Commit Graph

1299 Commits

Author SHA1 Message Date
Abelino Chavez 71bdafac75 fix: make track visibility toggle button clickable (#658)
The eye icon in the track labels was not responding to clicks because
the onClick handler was placed directly on HugeiconsIcon which doesn't
forward click events to the underlying SVG. Fixed by wrapping the icon
in a button element.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 17:52:33 -06:00
Abelino Chavez 905238d424 fix: improve audio mixing quality and prevent clipping (#677)
- 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>
2026-02-23 17:52:33 -06:00
Abelino Chavez 80b229c3bf fix: properly dispose WebCodecs resources in video cache (#663)
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>
2026-02-23 17:52:33 -06:00
Abelino Chavez de5293b024 feat: add dedicated About page (#624)
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>
2026-02-23 17:52:33 -06:00
Abelino Chavez 147f473fd3 feat: add Ctrl+X cut shortcut for timeline elements (#672)
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>
2026-02-23 17:52:33 -06:00
Abelino Chavez 6bad0d42ca feat: add file size validation for media uploads (#653)
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>
2026-02-23 17:52:33 -06:00
Abelino Chavez 7670144be4 feat: add "open in new tab" icon next to project names (#644)
- 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>
2026-02-23 17:52:33 -06:00
Abelino Chavez acf689f97f fix: UI improvements and multiple keyboard shortcuts support
- 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>
2026-02-23 17:52:32 -06:00
Maze Winther 4d77e3f2bb refactor: snapping system 2026-02-23 10:55:35 +01:00
Maze Winther ab64c48c92 feat: make playhead snap to elements 2026-02-23 10:55:06 +01:00
Maze Winther d352e58570 fix preview snapping threshold 2026-02-23 10:15:51 +01:00
Maze Winther baa5f33407 fix preview perf issues 2026-02-23 10:03:15 +01:00
Maze Winther dbfecbba59 docker + update readme 2026-02-23 09:38:38 +01:00
Maze Winther 86a3592c88 refactor: make export audio consistent to preview
fixes audio export issue with .mkv files
2026-02-23 09:28:54 +01:00
Maze Winther 1762dc077d persist snapping + ripple 2026-02-23 06:56:05 +01:00
Maze Winther a982304bb3 docs: actions 2026-02-23 06:50:53 +01:00
Maze Winther 5616d4e9f3 feat: save frame as image 2026-02-23 06:44:27 +01:00
Maze Winther 71970d5f5f fix: audio from video files not being exported 2026-02-23 06:20:11 +01:00
Maze 93d1e3383c
feat: major editor overhaul (assets, properties, timeline, fonts) (#709)
* 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
2026-02-23 03:24:02 +01:00
Maze Winther fca99d6126 refactor 2026-02-10 16:28:21 +01:00
Maze Winther 33a8705f0d fix selection not getting cleared after element deletion 2026-02-09 16:38:17 +01:00
Maze Winther fe10cee3eb fix: correct default text capitalization in text constants 2026-02-09 00:34:45 +01:00
Maze Winther 1d05f5ac56 fix linter 2026-02-08 22:23:12 +01:00
Maze Winther 395e415cc4 formatting 2026-02-08 22:22:23 +01:00
Maze Winther e50a817b97 add transform + few fixes
feat: transform
feat: batch command
fix: slider undo
fix: timeline zoom perf
refactor: make updateElement support multiple
2026-02-08 22:21:17 +01:00
Maze Winther 484ce47867 update review cursor command 2026-02-08 22:19:39 +01:00
Maze Winther 681f006b35 fix: fps not being displayed in some cases 2026-02-08 21:49:32 +01:00
Maze Winther 0282ef2223 scale timeline ruler labels to hours 2026-02-08 18:32:08 +01:00
Maze Winther dc0b57cd6a refactor: replace text-specific update command with generic 2026-02-08 18:01:45 +01:00
Maze Winther a218a52d2d persist sotring (projects) 2026-02-08 17:45:39 +01:00
Maze Winther 1c2cf80188 change default sorting from createdAt to updatedAt in projects store 2026-02-08 17:44:43 +01:00
Maze Winther cdd29eb1dc fix: resize-none 2026-02-08 17:06:16 +01:00
Maze Winther 34cfeacdbb fix: stop audio on timeline scrub 2026-02-08 17:02:49 +01:00
Maze Winther 6d55a34586 refactor: move isScrubbing state to playback manager 2026-02-08 17:01:46 +01:00
Maze Winther c6666fd385 feat: update text properties to use dynamic font size limits and scaling 2026-02-08 16:50:31 +01:00
Maze Winther 9b5fd6eb07 feat: ensure elements on main track starts at 0 2026-02-08 01:51:25 +01:00
Maze Winther 00cf7f6ab7 add todo 2026-02-08 01:23:13 +01:00
Maze Winther a82817a703 fix landing image 2026-02-08 01:17:29 +01:00
Maze Winther 39b6ea5613 type error 2026-02-07 23:57:19 +01:00
Maze Winther ae45ef8154 blog ui fixes 2026-02-07 23:14:31 +01:00
Maze Winther 49c4fcb229 refactor: remove AuthorList component 2026-02-07 22:37:19 +01:00
Maze Winther 464a6e83b9 fix rendering issue from v1 to current 2026-02-05 14:44:31 +01:00
Maze Winther d0b4b1a5fc fix migration dialog 2026-02-05 14:28:16 +01:00
Maze Winther 2257ca2e6f make storage versioning per-project + few other refactors 2026-02-05 12:53:56 +01:00
Maze Winther 490fc170c0 checkbox 2026-02-03 21:10:08 +01:00
Maze Winther feb8a07c16 remove comment 2026-02-03 14:00:43 +01:00
Maze Winther 7366cb27e9 fix v1 to v2 migration 2026-02-03 14:00:04 +01:00
Maze Winther 34daad9df7 comments 2026-02-03 08:48:32 +01:00
Maze Winther 9bc35363b9 remove hover state from export button 2026-02-03 08:33:42 +01:00
Maze Winther e84c0cfda6 comments + codebase index 2026-02-02 23:17:30 +01:00