summaryrefslogtreecommitdiff
path: root/apps/web/src/services/renderer
Commit message (Collapse)AuthorAgeFilesLines
* feat: lens effects tab, standalone motion effects, clip/asset rename, ↵cashmere2026-08-093-11/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | 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: keep GPU effect previews from clobbering the preview canvascashmere2026-08-082-2/+33
| | | | | | | | | | | | | | | | On the WebGL backend wgpu can only present to the single canvas its GL context is bound to, which is also the compositor's output canvas. The effect tile previews (and mask feather) rendered through that canvas and resized it behind the compositor's back, leaving the main preview showing the preview image stretched until a full reload. TS side (works with the published wasm): after every applyEffectPasses/ applyMaskFeather call the gpu renderer restores the canvas size, using a one-pixel intermediate resize to force a surface reconfigure, then notifies the preview component to re-render the current frame. Rust side (next wasm publish): the GL canvas detour saves and restores the canvas size, and resizeCompositor always reconfigures the surface.
* feat: pan & zoom motion presetscashmere2026-08-081-3/+13
| | | | | | | | | | | | | 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: Electron desktop app, native ffmpeg export, fully static webcashmere2026-07-301-0/+159
| | | | | | | | | | | | | | | | - 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-283-3/+96
| | | | | | | | 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
* fix: address review findings in masks substrateMaze Winther2026-05-021-0/+4
| | | | | | | | | | | | | | | - Remove dead ternary in getPreferredEdges (always returned undefined; the all-false object was never reached by Object.values().some(Boolean)) - Document why drawWithFeather descriptors zero the feather field in the compositor (analytical renderer handles softness itself; zeroing prevents a second JFA feather pass) - Remove legacyType from V30→V31 migration (not consumed anywhere; a down-migration can map type:"freeform" back to "custom" directly) - Add V30→V31 test coverage: skip-guard branches, freeform passthrough, elements without a masks array - Add snap tests for vertical-edge (bottom) and uniform-scale handle paths Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: split builtin and freeform masksMaze Winther2026-05-021-2/+2
| | | | Made-with: Cursor
* refactor: make mask renderer dispatch explicitMaze Winther2026-05-021-57/+63
| | | | Made-with: Cursor
* refactor: unify element paramsMaze Winther2026-05-023-15/+31
|
* chore: switch from biome to eslint + prettier; fix ton of lint issuesMaze Winther2026-05-029-144/+61
|
* refactor: split animation helpers by domainMaze Winther2026-04-265-269/+412
|\
| * refactor: split animation helpers by domainMaze Winther2026-04-261-10/+10
| |
| * perf: improve rendering performance by ~20xMaze Winther2026-04-224-259/+402
| |
* | fix: model editor time as wasm MediaTime ticks end-to-endMaze Winther2026-04-261-3/+3
|/
* chore: formattingMaze Winther2026-04-227-37/+54
|
* refactor: restructure files to their domains, new preview overlay system, ↵Maze Winther2026-04-2013-40/+40
| | | | and dep graph
* fix: WebGL frame rendering and opencut-wasm 0.2.8Maze Winther2026-04-191-29/+37
|
* feat: text / custom masks, fix preview pan, refactor selectionMaze Winther2026-04-152-85/+40
|
* chore: remove debugging throughout codebaseMaze Winther2026-04-152-23/+1
|
* refactor: move constants to domain modulesMaze Winther2026-04-142-2/+2
|
* refactor: rendering pipelineMaze Winther2026-04-1318-1237/+1766
| | | | Made-with: Cursor
* refactor: structured track layout per sceneMaze Winther2026-04-071-15/+7
|
* refactor: split effects and masks into dedicated rust crates, introduce ↵Maze Winther2026-04-075-209/+218
| | | | MediaTime and FrameRate
* refactor: split constants by domain and isolate timeline panel from coreMaze Winther2026-04-011-2/+3
|
* fix: don't crash when GPU isn't availableMaze Winther2026-04-011-9/+23
|
* fix: align background blur with effect blur intensity scaleMaze Winther2026-04-011-3/+3
|
* feat: migrate GPU renderer from WebGL to wgpu/WASMMaze Winther2026-04-0111-764/+231
|
* Merge branch 'feature/track-placement'Maze Winther2026-03-311-1/+1
|\
| * refactor: centralize track placement into its own moduleMaze Winther2026-03-311-1/+1
|/
* chore: normalize line endingsMaze Winther2026-03-2911-1291/+1291
|
* feat: masks, properties refactor, shaders, storage migrations, and moreMaze Winther2026-03-2918-521/+1121
|
* fix: fallback to opus codecMaze Winther2026-03-091-1/+14
|
* feat: wire ui to have keyframes for: opacity, text color, and all background ↵Maze Winther2026-03-021-10/+45
| | | | properties
* feat: implement keyframe support for more properties at the core (no ui yet)Maze Winther2026-03-021-7/+21
|
* feat: Clip effects, asset sorting, and timeline improvementsMaze Winther2026-03-022-69/+142
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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).
* feat: introduce WebGL effects system and Blur effectMaze Winther2026-02-2812-137/+914
| | | | | | | | | | | | This implements the foundational architecture for video effects, starting with a multi-pass WebGL rendering pipeline and a customizable Gaussian Blur effect. Key changes: - WebGL Engine: Added `raw-loader` for `.glsl` shaders, multi-pass framebuffer rendering, and live offscreen canvas previews. - Node Architecture: Replaced hardcoded background blur with `CompositeEffectNode` and added `EffectLayerNode` to apply effects to specific visual elements. - Timeline & DND: Added a new `effect` track type. Upgraded drag-and-drop to support dropping effects directly onto the timeline. Consolidated track constants into a cleaner `TRACK_CONFIG`. - UI/UX: Added an Effects tab in the assets panel with live previews. Added an Effect Properties panel with sliders and inputs for fine-tuning parameters. - Data Model: Added `sourceDuration` to video and audio elements, and wrote a v8 storage migration to update existing projects to the new schema. - Docs: Added `CHANGELOG.md` tracking v0.1.0 and v0.2.0, plus `docs/effects-renderer.md` to document the new WebGL pipeline.
* feat: implement keyframe animation systemMaze Winther2026-02-276-16/+65
| | | | | | | | | | 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.
* fix a ton of issues + improvementMaze Winther2026-02-251-77/+35
|
* fix preview perf issuesMaze Winther2026-02-233-41/+98
|
* refactor: make export audio consistent to previewMaze Winther2026-02-231-3/+1
| | | | fixes audio export issue with .mkv files
* feat: major editor overhaul (assets, properties, timeline, fonts) (#709)Maze2026-02-234-25/+175
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: major editor overhaul (assets, properties, timeline, fonts) Refactor editor core systems to standardize UI architecture and improve performance. Assets & Properties: - Replace monolithic property items with composable `Section` architecture. - Add specialized sections for Transform, Blending, and Text. - Implement `NumberField` with scrubbing and math evaluation. - Add new ColorPicker with EyeDropper and multiple format support. - Standardize asset panels using new `PanelView` layout. Fonts & Stickers: - Implement custom font atlas/sprite system for high-performance previews. - Add virtualized FontPicker with search and favorites. - Refactor stickers to use a provider-based architecture (icons, emoji, flags, shapes). - Standardize sticker IDs to `provider:value` format. Timeline & Interaction: - Convert bookmarks to rich objects with notes, colors, and duration. - Refactor drag-and-drop to use Command pattern (enabling proper undo/redo). - Add Shift modifier to disable snapping during moves/resizes. - Add new overlays for layout guides and text editing. Renderer: - Add support for multi-line text, custom line-height, and letter-spacing. - Implement global composite operation (blend modes). - Update sticker node to resolve dynamic provider IDs. Infrastructure: - Add storage migrations (v3->v6) for text weights, sticker IDs, and bookmarks. - Update global styles and core UI components (Button, Input, Popover). * add ts-nocheck directive to settings-legacy.tsx to suppress TypeScript errors * fix: correct global composite operation assignment in TextNode to ensure proper blend mode handling * deleted shadcn components with errors * formatting * fix linter issues * migrate from next middleware to proxy * add missing component back * add breadcrumb back * chore: add @radix-ui/react-primitive deps * chore: more deps * chore: add missing env vars to bun-ci * next env
* formattingMaze Winther2026-02-081-4/+2
|
* add transform + few fixesMaze Winther2026-02-085-160/+102
| | | | | | | | feat: transform feat: batch command fix: slider undo fix: timeline zoom perf refactor: make updateElement support multiple
* feat: update text properties to use dynamic font size limits and scalingMaze Winther2026-02-082-3/+20
|
* fix rendering issue from v1 to currentMaze Winther2026-02-051-2/+1
|
* make storage versioning per-project + few other refactorsMaze Winther2026-02-053-13/+19
|
* fix importMaze Winther2026-01-311-1/+1
|
* codebase overhaul (#697)Maze2026-01-3111-0/+859