summaryrefslogtreecommitdiff
path: root/apps/web/src/core/managers
Commit message (Collapse)AuthorAgeFilesLines
* feat: Electron desktop app, native ffmpeg export, fully static webcashmere2026-07-301-5/+37
| | | | | | | | | | | | | | | | - apps/desktop: Electron shell serving the static web build over a privileged opencut:// protocol; exports stream frames over IPC to a bundled ffmpeg (libx264/libvpx-vp9, BT.709 tagged) with backpressure. electron-builder packaging: AppImage, deb, rpm. - apps/web: dead backend deleted (better-auth, drizzle/pg, upstash, botid, freesound proxy, blog, rss, env validation); next build emits a zero-env static export; /editor/[project_id] -> /editor?project=. - Native exporter mirrors SceneExporter; activates when the preload bridge is present; web keeps the mediabunny path. - Docker self-hosting now builds and serves the static export via nginx. - Release workflow: v* tags publish static web tarball + Linux packages. - Changelog 0.4.0; README/AGENTS/CONTRIBUTING/roadmap updated. - GPUI/Rust rewrite parked on branch rust-rewrite.
* feat: ripple-extend resize, timeline filmstrip, export hardeningcashmere2026-07-282-4/+10
| | | | | | | | 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: single-file project import/export (.ocp)cashmere2026-07-271-0/+57
| | | | | | | | | | | fflate zip container: project.json (serialized project incl. schema version) + media files with a manifest. Export gathers all project media (missing blobs warn, never abort) after save-flush; import validates everything before any write, migrates older archives through the storage migration registry, remaps media ids, and creates a new project with rollback on failure. Entry points: projects page import/export, editor header menu, export-project-archive action. 29 tests incl. full round-trip.
* feat: git-like project versioning (v1)cashmere2026-07-271-0/+4
| | | | | | | | | | | Linear per-project history per notes/project-versioning.md: named checkpoints (thumbnail via renderer.captureFrame) plus auto-checkpoints on save (60s throttle, ring of 20, named never rotate). Restore writes a safety checkpoint first, then swaps the document outside undo/redo. Media assets referenced by any version are pinned against deletion. Migration v31-v32 stamps the schema; the version store lives in its own IDB database with an in-memory fallback for tests. Versions popover in the editor header for jump/rename/delete. 12 new tests.
* feat: freeze frame at playheadcashmere2026-07-261-4/+31
| | | | | | | | | | | 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: split builtin and freeform masksMaze Winther2026-05-021-6/+6
| | | | Made-with: Cursor
* refactor: animate params over timeMaze Winther2026-05-021-7/+4
|
* refactor: unify element paramsMaze Winther2026-05-021-2/+3
|
* chore: switch from biome to eslint + prettier; fix ton of lint issuesMaze Winther2026-05-024-12/+31
|
* refactor: split animation helpers by domainMaze Winther2026-04-262-17/+5
|\
| * refactor: split animation helpers by domainMaze Winther2026-04-261-1/+1
| |
| * refactor: centralize editor interaction stateMaze Winther2026-04-253-43/+36
| | | | | | | | | | | | | | | | 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-263-25/+42
| |
* | fix: model editor time as wasm MediaTime ticks end-to-endMaze Winther2026-04-264-37/+48
|/
* refactor: restructure files to their domains, new preview overlay system, ↵Maze Winther2026-04-2011-366/+366
| | | | and dep graph
* fix: WebGL frame rendering and opencut-wasm 0.2.8Maze Winther2026-04-191-3/+7
|
* feat: clip volume line and timeline waveform improvementsMaze Winther2026-04-182-5/+22
|
* feat: text / custom masks, fix preview pan, refactor selectionMaze Winther2026-04-153-90/+264
|
* feat: move/resize multiple elementsMaze Winther2026-04-151-29/+25
|
* chore: remove debugging throughout codebaseMaze Winther2026-04-151-2/+0
|
* feat: transcription diagnosticsMaze Winther2026-04-141-0/+38
|
* fix: keyframe removal stateMaze Winther2026-04-141-1/+4
|
* chore: remove unused importMaze Winther2026-04-141-1/+0
|
* refactor: move constants to domain modulesMaze Winther2026-04-141-3/+3
|
* fix: text measurement, rotation handle, video cache races, playback syncMaze Winther2026-04-133-52/+143
| | | | Made-with: Cursor
* feat: clipboard with keyframe pasteMaze Winther2026-04-131-0/+81
| | | | Made-with: Cursor
* refactor: structured track layout per sceneMaze Winther2026-04-076-93/+112
|
* refactor: split effects and masks into dedicated rust crates, introduce ↵Maze Winther2026-04-075-727/+739
| | | | MediaTime and FrameRate
* Merge branch 'temp'Maze Winther2026-04-061-0/+41
|\
| * feat: graphs popoverMaze2026-04-061-0/+41
| |
* | refactor: unify element updates into pipeline and centralize rippleMaze Winther2026-04-062-90/+146
|/
* refactor: split constants by domain and isolate timeline panel from coreMaze Winther2026-04-012-8/+6
|
* Merge branch 'refactor-selection-commands'Maze Winther2026-03-311-0/+13
|\
| * refactor: move track pruning into a post-command reactorMaze Winther2026-03-311-0/+13
| |
* | Merge branch 'feature/separate-audio'Maze Winther2026-03-311-0/+15
|\ \ | |/ |/|
| * feat: separate audio from elementsMaze Winther2026-03-311-0/+15
| |
* | feat: centralize selection managementMaze Winther2026-03-312-50/+104
|/
* Merge branch 'feature/track-placement'Maze Winther2026-03-311-1/+1
|\
| * refactor: centralize track placement into its own moduleMaze Winther2026-03-311-1/+1
| |
* | feat: migrate time utilities from typescript to rust WASMMaze Winther2026-03-312-6/+3
|/
* chore: normalize line endingsMaze Winther2026-03-2910-1316/+1344
|
* feat: masks, properties refactor, shaders, storage migrations, and moreMaze Winther2026-03-298-121/+598
|
* feat: ripple support for element resizeMaze Winther2026-03-021-0/+3
|
* feat: Clip effects, asset sorting, and timeline improvementsMaze Winther2026-03-023-4/+216
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Major features and improvements: * **Clip Effects**: * Added UI in Properties Panel to manage effects on video/image clips (add, remove, toggle, reorder). * Implemented dynamic parameter fields for effects. * Added support for keyframing effect parameters. * **Assets Panel**: * Added sorting options: Name, Type, Duration, and File Size. * Persisted view preferences (grid/list mode, sort order) to local storage. * Refactored media item rendering and drag interactions. * **Timeline & Interaction**: * **Keyframe Dragging**: Added ability to drag keyframes directly on the timeline element. * **Resizing**: Improved resize logic to respect neighboring clips (prevents overlaps). * **Visuals**: Implemented tiled background rendering for video/image clips on the timeline. * **Shortcuts**: Added "Deselect All" action bound to the `Escape` key. * **Fixes**: Corrected drag-and-drop coordinate calculations when the timeline track area is scrolled. * **Text Elements**: * Refactored text background storage to use an explicit `enabled` flag. * Added `V8toV9` storage migration to update existing projects. * **Architecture**: * Moved export state management to `ProjectManager` for better lifecycle handling. * Refactored `PropertiesPanel` sections to be more composable (custom headers, borders).
* Merge branch 'dev' into ripple-editingMaze Winther2026-03-013-15/+200
|\
| * fix(audio): stabilize playback startup when timeline selection is heavyMaze Winther2026-03-011-3/+39
| |
| * fix coderabbit issuesMaze Winther2026-02-271-1/+1
| |
| * feat: implement keyframe animation systemMaze Winther2026-02-272-11/+164
| | | | | | | | | | | | | | | | | | | | Add keyframe support for transform, opacity, and volume properties. Includes animation engine (interpolation, mutations, resolvers), timeline markers with selection/snapping, properties panel toggles, keyframe-aware renderer, and full undo/redo command support. Also refactor element command constructors to object params, extract timeline pixel math to pixel-utils.ts, and update cursor rules.
* | feat: basic ripple editingMaze Winther2026-02-231-2/+11
|/
* feat: save frame as imageMaze Winther2026-02-231-0/+66
|