summaryrefslogtreecommitdiff
path: root/apps/web/src/timeline
Commit message (Collapse)AuthorAgeFilesLines
* feat: add transitions, track mixing, and voiceover controlscashmere2026-08-1614-233/+934
|
* feat: lens effects tab, standalone motion effects, clip/asset rename, ↵cashmere2026-08-092-6/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | preview popout - New Lens category in the assets panel: Blur, Motion Blur, Zoom In/Out, Pan x4, Shake, Pulse, Spin, Custom Zoom. EffectDefinition gains a category field; tabs with an empty category are hidden, and the properties-panel 'Open effects' button opens the first non-empty one. - Motion effects work standalone: dropping them on the timeline creates an effect-track element that animates (scale/translate/rotate) every track below it, computed purely in the TS frame descriptor - no wasm changes, identical in preview and export. supportsStandalone removed. - Motion Blur: directional gaussian smear (amount + angle) reusing the existing WGSL shader with arbitrary u_direction. - Custom Zoom: start/end scale params (keyframable clip-level). - MotionOffset gains optional rotate, accumulated clip-level and applied to standalone layer quads via rotationDegrees. - Rename clips (timeline context menu) and media assets (media panel context menu) via a shared RenameDialog; asset rename persists through storageService with rollback on error. - Preview pops out into a Document Picture-in-Picture window and docks back; button hidden where the API is unsupported. - Export keeps running when the export popover is closed; only the explicit Cancel button aborts. - Captions and Adjustment tabs removed from the assets panel.
* fix: un-nest buttons in timeline to resolve hydration errorscashmere2026-08-082-15/+21
| | | | | | | | | | Bookmark markers rendered inside the ruler <button>, and the effects badge inside the timeline element's main <button>. Both are invalid HTML and triggered React hydration errors once the effects panel was enabled. Bookmarks now sit as siblings of the ruler button (wheel handling moved to the shared wrapper), and the effects badge renders absolutely positioned next to the element button like the resize handles, with a spacer keeping the header layout.
* feat: pan & zoom motion presetscashmere2026-08-081-0/+5
| | | | | | | | | | | | | Ken Burns-style motion effects (zoom in/out, pan left/right/up/down) that drag onto clips like regular effects. Instead of shader passes they evaluate a per-frame transform offset in resolveVisualState, so they stack with keyframed transforms and work in preview and export. - intensity param (0-100%, keyframable) scales the whole effect - easing select maps progress through the graph editor's bezier presets - supportsStandalone: false hides them from effect-track creation - empty shader pass groups are filtered out so pass-less effects and zero-intensity blur no longer crash the compositor
* feat: ripple-extend resize, timeline filmstrip, export hardeningcashmere2026-07-287-29/+935
| | | | | | | | Yesterday's verified web session (gates green: 316 tests, tsc, build): - ripple-extend pushes right-hand chain on static-element resize - per-position video filmstrip thumbnails with zoom-adaptive density - fps-aware export bitrate, 2s keyframes, even-dim export canvas - freeze frame uses fixed 3s duration, prompt removed
* feat: voice-over recording into the timelinecashmere2026-07-271-0/+26
| | | | | | | | | MediaRecorder mic capture (defensive mimeType picking, permission/no-mic toasts) with elapsed display in the timeline toolbar. Stop produces an audio asset and inserts it at the playhead on an audio track as ONE BatchCommand undo step, freeze-frame precedent. voice-over action registered, no default keybinding. 20 tests; smoke-tested in Chromium with a fake mic end to end.
* feat: gate sounds/stickers/effects UI behind feature flagscashmere2026-07-271-1/+2
| | | | | | | FEATURES in src/features.ts (all false) hides the assets-panel tabs and views, the clip effects properties tab, and the timeline effects badge. Existing project data still renders and stays editable (standalone effect tab, sticker config, renderer nodes untouched).
* test: repair broken tests for a green baselinecashmere2026-07-272-4/+4
| | | | | | | | | Mask insertion test expected zero handles; the de Casteljau split correctly produces colinear shape-preserving ones. Box scale snap now reports both symmetric snap lines. Fractional ticks and unbranded MediaTime expectations fixed. Text-measurement test skipped (no canvas 2d in bun). CI-hostile it.only reference removed. Suite: 221 pass, 1 skip, 0 fail.
* feat: freeze frame at playheadcashmere2026-07-261-3/+15
| | | | | | | | | | | Enable the timeline toolbar freeze-frame button: capture the composited canvas as PNG, add it as an image media asset, split the video element at the playhead, shift the right part by the freeze duration, and insert a 3-second image element in the gap. Adds RendererManager.captureFrame(), reused by createSnapshot(). Also adds the Nix devshell (flake.nix/flake.lock: bun + nodejs) and AGENTS.md repository guidelines.
* refactor: animate params over timeMaze Winther2026-05-024-40/+21
|
* chore: cleanupMaze Winther2026-05-022-44/+8
|
* refactor: unify element paramsMaze Winther2026-05-0213-399/+280
|
* chore: switch from biome to eslint + prettier; fix ton of lint issuesMaze Winther2026-05-0225-1065/+631
|
* refactor: split animation helpers by domainMaze Winther2026-04-2612-176/+851
|\
| * refactor: split animation helpers by domainMaze Winther2026-04-269-156/+830
| |
| * refactor: centralize editor interaction stateMaze Winther2026-04-2523-3064/+3520
| | | | | | | | | | | | | | | | Move timeline and preview gestures into dedicated controllers so hooks stay thin around editor state and DOM events. This also routes drag and playback synchronization through manager APIs and reuses persistent wasm surfaces so scrubbing, seeking, and preview rendering stay in sync. Made-with: Cursor
* | refactor: thinner hooksMaze Winther2026-04-2632-2879/+3444
| |
* | fix: linterMaze Winther2026-04-262-16/+23
| |
* | fix: model editor time as wasm MediaTime ticks end-to-endMaze Winther2026-04-2633-308/+549
|/
* refactor: restructure files to their domains, new preview overlay system, ↵Maze Winther2026-04-2096-0/+15990
and dep graph