- Use linear interpolation for resampling instead of nearest neighbor
- Clamp output samples to [-1, 1] range to prevent distortion from
overlapping audio clips exceeding valid amplitude range
This should reduce audio artifacts in exported videos, especially
when multiple audio sources overlap.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The VideoCache was creating Input objects but not storing them,
so input.dispose() was never called. This caused WebCodecs
VideoDecoder resources to leak, leading to browser crashes
during video playback.
Changes:
- Store Input object in VideoSinkData
- Call input.dispose() on initialization errors
- Call input.dispose() when clearing video from cache
- Clear frame references when disposing
This follows the same pattern as AudioManager which properly
manages Input disposal.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Creates a new /about page with:
- Project mission and vision
- Key features overview
- Open source information
- Community links
- Call to action
Updates footer to link to /about instead of GitHub README.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds a "cut-selected" action that copies selected elements to
clipboard and then deletes them, enabling standard cut behavior.
Note: Drag/drop elements to other tracks was already implemented.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Validates file sizes before processing media uploads:
- Image limit: 50MB
- Video limit: 500MB
- Audio limit: 100MB
Shows clear error messages with actual file size when exceeded.
Valid files still process even when some files are rejected.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add LinkSquare02Icon to grid and list views on Projects page
- Icon appears on hover and opens project editor in new tab
- Prevents default link navigation to allow new tab opening
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add theme toggle to Projects page header (#689)
- Fix nested button HTML validation errors in header and hero (#687)
- Use asChild prop to render Links with button styles
- Add ability to add multiple keyboard shortcuts per action (#696)
- New "+" button to add additional shortcuts
- Replace mode only removes the specific key being edited
- Right-click to remove a shortcut when multiple exist
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* 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