Skip to content

Commit 22c1946

Browse files
committed
Release MasterSelects 2.0.6 timeline updates
1 parent 0e1090b commit 22c1946

44 files changed

Lines changed: 1823 additions & 197 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/Features/Audio.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ The main runtime path is `LayerBuilderService` -> `AudioTrackSyncManager` -> `Au
2929
- Nested composition mixdown audio and proxy audio are synced through the same runtime path.
3030
- Audio status is tracked as `playing`, `drift`, `silent`, or `error` for performance stats.
3131
- Timeline track headers and the master bus show runtime Peak/RMS meters plus stereo phase-correlation metadata when routed stereo samples are available. Timeline audio-layer meters and the docked Audio Mixer render stereo snapshots as fixed-scale left/right bars, so the color bands stay tied to the dB scale instead of being rescaled with the active fill. Meter snapshots are collected from the live Web Audio route or the varispeed scrub graph, aggregated in `runtimeAudioMeters`, and are never serialized into project files.
32-
- Audio track headers expose Aux send controls inline with track volume, pan, mute/solo, meters, and FX. Sends can be added, bypassed, routed to a target bus id, switched pre/post fader, and removed without leaving the timeline.
32+
- Audio track headers expose Aux send controls inline with track volume, pan, mute/solo, meters, and FX. Full-height and compact audio headers reserve a wide bottom pan rail from the fader area to the right edge while keeping the button block above it; compact headers keep the meter but drop the inline volume fader. Sends can be added, bypassed, routed to a target bus id, switched pre/post fader, and removed without leaving the timeline.
3333
- The docked `Audio Mixer` view is available from the main View menu. It mirrors the same timeline-native track and master state with full-height vertical strips for mute/solo, record-arm, input monitor, faders, center-out bipolar pan controls, meters, sends, track FX, master FX, limiter, and export preflight. Track strips scroll horizontally when needed while the master strip remains pinned, and clicking an insert opens the FX stack in a floating mixer window. Mixer strip colors are the same persisted track label colors shown on timeline layers; unset tracks stay in the colorless gray state and can be assigned from either right-click menu. Disabling the advanced audio-layer eye hides those colors and uses neutral gray audio rows in the timeline without clearing the labels or changing the mixer. Mixer strip focus and timeline audio-layer selection are synchronized, so selecting either surface highlights the matching strip/lane, smoothly reveals off-screen timeline audio layers, and opens the same track or master Properties target.
3434
- Live playback folds enabled Aux sends into the same master-return gain model used by export: post-fader sends follow track volume, pre-fader sends bypass it, disabled sends are ignored.
3535
- Audio track headers expose `R` record-arm and `I` input-monitor toggles. The timeline toolbar record button starts from the current playhead for armed audio tracks.
@@ -84,6 +84,7 @@ Live routing uses `audioRoutingManager` when EQ, pan, above-unity gain, Aux send
8484
- Spectrogram, loudness, beat/onset, and frequency/phase timeline jobs share `ClipAudioAnalysisOrchestrator` for source/processed buffer preparation and expose a semantic `audioAnalysisJob` while keeping the legacy waveform progress indicator compatible.
8585
- Source waveform pyramids are generated during import, with lazy upgrade remaining as a fallback for legacy media or clips that have only a lightweight waveform preview.
8686
- Source waveform-pyramid bucket analysis yields back to the browser between bounded chunks so timeout/cancel signals can be handled and the timeline does not freeze during detailed analysis. Divisible pyramid levels derive from the finest PCM pass instead of re-scanning the decoded audio for each level.
87+
- Detailed waveform display uses a perceptual display scale: the RMS/loudness body is the primary readable shape, the peak envelope is a quieter underlay, and high-crest peaks are drawn as selective transient spikes instead of a continuous outer peak trace.
8788
- Nested composition clips generate waveforms from the mixed-down buffer when available.
8889
- Large files are skipped: audio-only files above 4 GB and video files above 500 MB.
8990
- Legacy waveform display normalizes bounded peak data for display. Old saved projects may only have an aggregate mono fallback until their waveform preview is regenerated.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[Back to Features](./README.md)
2+
3+
# Issue Credit Campaign
4+
5+
MasterSelects shows a version 2.0 issue-credit campaign banner in the desktop editor. The campaign message is:
6+
7+
- Users can submit a GitHub issue.
8+
- If the issue is completed, the user receives 1000 AI credits.
9+
- The primary action opens `https://github.com/Sportinger/MasterSelects/issues/new`.
10+
- The in-app copy is English-only.
11+
12+
## Behavior
13+
14+
- The banner is mounted by `src/App.tsx` through `IssueCreditCampaignBanner`.
15+
- It appears on every fresh editor page load or browser refresh.
16+
- Dismissing the banner only hides it for the current React session; no project, IndexedDB, or local storage state is written.
17+
- Confetti is CSS-only and replays on each fresh mount.
18+
- `prefers-reduced-motion: reduce` disables the banner entrance animation and hides the confetti pieces.
19+
20+
## Layout
21+
22+
- The banner is fixed at the top center, below the toolbar.
23+
- It uses a colorful version 2.0 treatment with a slow looping rainbow background and amplified glow while keeping text on a darkened overlay for readability.
24+
- Its z-index sits above the editor dock and startup overlays, while remaining below the billing success celebration.

docs/Features/Project-Persistence.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,11 @@ saveLayoutAsDefault() // View -> Layouts; stores dock layout, timeline focu
483483
resetLayout() // View -> Layouts
484484
```
485485

486-
The hardcoded default layout is the shared Video/Audio Edit arrangement: Media on the left,
487-
Preview in the center, Properties/Export on the right, and a compact Timeline at the bottom.
486+
The hardcoded factory layouts are `VIDEO EDIT` and `AUDIO EDIT`. `VIDEO EDIT` is the default
487+
layout with Media on the left, Preview in the center, Properties/History on the right, and
488+
Timeline at the bottom. It stores balanced timeline focus with 70 px video tracks and 48 px
489+
compact audio tracks. `AUDIO EDIT` stores audio focus with Timeline above Media, Audio Mixer,
490+
and Properties/History, using 40 px video context tracks and 96 px audio tracks.
488491

489492
---
490493

docs/Features/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ The docs in this folder were re-audited against the current codebase and now tra
7575
| Document | Description |
7676
|---|---|
7777
| [Landing Page](./Landing-Page.md) | Dev-only front page concept, separate URL strategy, and current landing/editor split |
78+
| [Issue Credit Campaign](./Issue-Credit-Campaign.md) | Refresh-visible version 2.0 issue campaign banner with GitHub issue CTA and confetti |
7879
| [AI Integration](./AI-Integration.md) | OpenAI/Cloud and Lemonade chat, 79 exported tools, segmentation, transcription, and bridge behavior |
7980
| [Guided Action Runtime Plan](./Guided-Action-Runtime-Plan.md) | Target architecture for AI action replay, interactive tutorials, guided workflows, and parallel implementation workstreams |
8081
| [FlashBoard](./FlashBoard.md) | Board-mode AI canvas for text-to-video, image-to-video, and image generation |

docs/Features/Timeline.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ getTrackChildren() // Query child tracks
3434
```
3535

3636
### Track Height
37-
- Track height clamps to 20-200 px.
37+
- Track height clamps to 20-600 px.
3838
- Curve editors clamp to 80-600 px.
3939
- Expanded track height depends on the selected clip, visible property rows, and open curve editors.
4040

@@ -119,7 +119,11 @@ getTrackChildren() // Query child tracks
119119
| Blade all tracks | Available in the Cut flyout as a mode; splits every unlocked visible clip crossing the click time. |
120120
| Trim start/end to playhead | Available in the Cut flyout; trims selected clips through the operation kernel and keeps linked audio aligned. |
121121
| Ripple delete | Available in the Cut flyout and clip context menu; deletes selected clips and closes the affected track gap through the operation kernel. |
122-
| Delete gap | Available in the Cut flyout and clip context menu; closes an empty gap through the operation kernel. |
122+
| Delete gap | Available in the Cut flyout, clip context menu, and empty timeline right-click menu; closes an empty gap through the operation kernel. |
123+
| Delete all gaps in this layer | Available from the empty timeline right-click menu; closes gaps on the clicked layer from the clicked empty space onward as one undoable operation. |
124+
| Delete all gaps | Available from the empty timeline right-click menu; closes all gaps on unlocked visible tracks as one undoable operation. |
125+
| Fit comp to window | Available from the zoom controls and empty timeline right-click menu. |
126+
| Right-drag empty space or clips | Scrubs the playhead without opening the timeline context menu; context menus open only for a single right-click. |
123127
| Lift range | Available in the Cut flyout after drawing a Range Selection; removes the range and leaves a gap. |
124128
| Extract range | Available in the Cut flyout after drawing a Range Selection; removes the range and ripples following clips left. |
125129
| Copy | `Ctrl+C` copies selected keyframes first, otherwise selected clips. |
@@ -280,7 +284,7 @@ The toolbar and wheel gestures still drive playback and navigation:
280284
- Marker MIDI bindings support `Jump To Marker`, `Play From Marker`, and `Jump To Marker And Stop`.
281285
- Left/Right arrows step frame by frame.
282286
- The ruler and lane grid use the active composition frame rate at deep zoom. The base time grid crossfades out while frame-accurate grid lines fade in with zoom before the ruler switches to frame timecode labels.
283-
- `Alt+Scroll` or `Ctrl+Scroll` zooms the timeline around the playhead.
287+
- `Alt+Scroll` or `Ctrl+Scroll` zooms the timeline around the mouse pointer by default; Preferences -> General -> Timeline can switch the zoom anchor to the playhead. Faster wheel gestures use larger zoom steps.
284288
- `Shift+Scroll` pans horizontally.
285289
- Vertical scroll snaps to track boundaries.
286290
- `Ctrl+Shift+Scroll` or `Cmd+Shift+Scroll` toggles slot-grid view.

docs/Features/UI-Panels.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -389,16 +389,20 @@ The unified Properties panel adapts its tabs to the selected clip type, selected
389389

390390
## Dock Layouts
391391

392-
### Default Layout
392+
### Built-In Layouts
393393

394-
The built-in desktop layout is a three-column dock:
394+
The built-in `VIDEO EDIT` layout is the default desktop layout:
395395

396396
- Left column: Media
397397
- Center: Preview
398398
- Right column: Properties, History
399399
- Bottom: Timeline
400400

401-
Export, Multi Preview, scopes, and other panels are available from the View menu and can be floated or docked, but they are not pinned in the default layout.
401+
Its timeline defaults to balanced video/audio focus with 70 px video tracks and 48 px compact audio tracks, so audio headers keep the bottom pan rail visible without showing the inline volume fader.
402+
403+
The built-in `AUDIO EDIT` layout keeps Timeline above Media, Audio Mixer, and Properties/History. Its timeline defaults to audio focus with 40 px video context tracks and 96 px full-height audio tracks.
404+
405+
Export, Multi Preview, scopes, and other panels are available from the View menu and can be floated or docked, but they are not pinned in the built-in Video/Audio layouts.
402406

403407
### Layout Persistence
404408

@@ -494,7 +498,7 @@ Edit menu -> Settings
494498
| Category | Contents |
495499
|----------|----------|
496500
| **Appearance** | Theme selection and custom theme controls |
497-
| **General** | Save mode, autosave interval/enable state, import copy behavior, and mobile/desktop view mode |
501+
| **General** | Save mode, autosave interval/enable state, import copy behavior, timeline zoom anchor, and mobile/desktop view mode |
498502
| **MIDI** | Browser MIDI permission state, transport learning, and device list |
499503
| **Previews** | Preview resolution quality and transparency grid info |
500504
| **Import** | Copy media to project folder toggle |

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "masterselects",
33
"private": true,
4-
"version": "2.0.3",
4+
"version": "2.0.6",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { LinuxVulkanWarning } from './components/common/LinuxVulkanWarning';
2121
import { ProjectLoadProgressOverlay } from './components/common/ProjectLoadProgressOverlay';
2222
import { PricingDialog } from './components/common/PricingDialog';
2323
import { HistoryActionToast } from './components/common/HistoryActionToast';
24+
import { IssueCreditCampaignBanner } from './components/common/IssueCreditCampaignBanner';
2425
import { GuidedActionOverlay } from './components/guidedActions/GuidedActionOverlay';
2526
import { TutorialOverlay } from './components/common/TutorialOverlay';
2627
import { TutorialCampaignDialog } from './components/common/TutorialCampaignDialog';
@@ -428,6 +429,7 @@ function App() {
428429
<div className="app">
429430
<LinuxVulkanWarning />
430431
<Toolbar onOpenChangelog={() => setShowChangelog(true)} onOpenSplash={() => setShowSplash(true)} />
432+
<IssueCreditCampaignBanner />
431433
<DockContainer />
432434
<GuidedActionOverlay />
433435
<ProjectLoadProgressOverlay />

src/changelog-data.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
[
2+
{
3+
"date": "2026-05-29",
4+
"type": "improve",
5+
"title": "MasterSelects 2.0.6",
6+
"description": "Timeline editing now has clearer perceptual audio waveforms, right-drag playhead scrubbing over empty space and clips, mouse-anchored faster wheel zoom, wider audio header pan controls, refreshed built-in Video/Audio Edit layouts, empty-space gap cleanup actions, and more reliable direct timeline drops for newly imported media.",
7+
"section": "Release"
8+
},
29
{
310
"date": "2026-05-29",
411
"type": "improve",

0 commit comments

Comments
 (0)