Commit Graph

155 Commits

Author SHA1 Message Date
Maze Winther a526066b61 feat: wire ui to have keyframes for: opacity, text color, and all background properties 2026-03-02 16:36:10 +01:00
Maze Winther 81e7a7fb32 feat: implement keyframe support for more properties at the core (no ui yet) 2026-03-02 15:08:21 +01:00
Maze Winther db50b5214d feat: ripple support for element resize 2026-03-02 13:26:40 +01:00
Maze Winther e7dcb586c0 feat: Clip effects, asset sorting, and timeline improvements
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).
2026-03-02 13:13:07 +01:00
Maze Winther 5e7c27f542 Merge branch 'dev' into ripple-editing 2026-03-01 01:32:09 +01:00
Maze Winther 216e3e0c39 feat: introduce WebGL effects system and Blur effect
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.
2026-02-28 18:41:22 +01:00
Maze Winther 6226ceb052 fix coderabbit issues 2026-02-27 20:34:33 +01:00
Maze Winther 956f3d201b fix type error 2026-02-27 18:15:36 +01:00
Maze Winther 49426f19cd feat: implement keyframe animation system
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.
2026-02-27 16:33:57 +01:00
Maze Winther f75b5d3fd2 fix a ton of issues + improvement 2026-02-25 01:37:56 +01:00
Maze Winther 4d77e3f2bb refactor: snapping system 2026-02-23 10:55:35 +01:00
Maze Winther d352e58570 fix preview snapping threshold 2026-02-23 10:15:51 +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 744419469d feat: basic ripple editing 2026-02-23 07:09:26 +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 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 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 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 e84c0cfda6 comments + codebase index 2026-02-02 23:17:30 +01:00
Maze Winther 1aec9c5cf5 fix comment 2026-02-02 19:15:25 +01:00
Maze Winther e88a059222 increase zoom of buttons + refactor 2026-02-02 19:14:37 +01:00
Maze Winther c3f0d640ef feat: exponential zoom 2026-02-02 18:11:12 +01:00
Maze Winther 3e4584edde fix 2026-02-01 13:19:51 +01:00
Maze Winther f820d9a894 refactor services structure 2026-01-31 22:19:11 +01:00
Maze 7bf0984698
codebase overhaul (#697) 2026-01-31 00:20:04 +01:00
Maze Winther d8f446580c feat: remove default background scene and add scene management 2025-09-01 22:15:32 +02:00
Maze Winther af1964cf11 fix: scenes now load properly 2025-09-01 17:18:00 +02:00
Maze Winther 350b55081c refactor(core): switch to scene-based architecture 2025-09-01 16:17:06 +02:00
Maze Winther 2c5d5dc234 bunch of small improvements 2025-08-31 19:57:50 +02:00
Maze Winther 73a156c002 gradient backgrounds now work 2025-08-31 14:35:24 +02:00
Maze Winther 29fdd8568d refactor: improve types, fix background blur, some other stuff 2025-08-31 14:10:59 +02:00
Maze Winther e7d75ce1f8 fix: add fallback 2025-08-31 13:43:52 +02:00
Maze Winther d747fb458d feat: make timeline renderer 15x faster 2025-08-31 13:40:41 +02:00
Maze Winther e222f15d1d feat: implement timeline caching with cache indicator 2025-08-31 13:26:53 +02:00
Maze Winther 70a9bfebb1 feat: add audio support for export 2025-08-28 21:52:03 +02:00
Maze Winther f9170dcf09 style: re-design colors in text properties panel 2025-08-27 17:23:16 +02:00
Maze Winther adc8cb37fc another huge refactor 2025-08-27 00:52:39 +02:00
Maze Winther b459b46802 refactor: type-safety & separate concerns 2025-08-26 15:04:25 +02:00
Maze Winther a4f2273e25 feat: mediabunny + preview canvas refactor 2025-08-23 11:00:59 +02:00
Maze Winther f3ddf26334 feat: export waitlist 2025-08-17 18:50:13 +02:00
Zaka 7e4cd76762
feat: add an input so the user can go to a specific timestamp (#530)
* feat: add an input so the user can go to a specific timestamp

* fix: use TimeCode type for EditableTimecodeProps

* cleanup

---------

Co-authored-by: Maze Winther <mazewinther@gmail.com>
2025-08-15 23:01:18 +02:00
enkei64 c3f3345d7b
feat: stickers panel (#539)
* Stickers panel base complete

* Improve dark mode stickers background for visibility

* Prevent stickers from being too small or too big

* Improve UI, added credit for Iconify API

* Allow manually loading more collections

* Add a maximum width of 200px so stickers aren't too big

* cleanup

* style: hover state of button

* refactor: input component

* fix: mark input component as client

* so much stuff

---------

Co-authored-by: Maze Winther <mazewinther@gmail.com>
2025-08-15 02:11:21 +02:00
Maze Winther a97eb26fa4 fix: typo causing runtime error 2025-08-12 16:35:01 +02:00
Maze Winther 665bb9fbd1 fix: typescript errors 2025-08-11 22:29:15 +02:00
Maze Winther 5b059ce6de feat: auto-captions 2025-08-11 22:24:54 +02:00
Maze Winther b0329f1372 refactor: move canvas size to be a project-level setting instead of editor-level 2025-08-04 20:45:48 +02:00
Maze Winther 48b694bbd8 feat: sound effects functionality with freesound's api 2025-08-04 01:30:33 +02:00
Maze Winther c8980de41a refactor: remove all waitlist-related code 2025-08-02 17:28:01 +02:00
melad f255ccb818
feat: add hide or show for media elements, mute or unmute for audio elements (#500)
* feat: create external tools section (#493)

* feat: create external tools section

* fix: better wording

* Feature, added hide or show for media elements, mute or unmute for audio elements both effective on timeline and preview panel, with overlay icon for indicating so and state storing,

* Minor UI vertical separator between magnifier and other buttons

* fixed the AbortError issue in the AudioWaveform component. The error was occurring because of a race condition during cleanup when the component unmounts.

* feat: implement bookmarking functionality in the timeline and project storage

- Added bookmark management methods in the project store for toggling and checking bookmarks.
- Updated the timeline component to display bookmark markers and integrate bookmark actions in the context menu.
- Enhanced the storage service to handle bookmarks in project serialization and deserialization.
- Updated project types to include bookmarks as an array of numbers.

---------

Co-authored-by: Dominik K. <dominik@koch-bautechnik.de>
Co-authored-by: Maze Winther <mazewinther@gmail.com>
2025-07-31 12:50:22 +02:00
Maze Winther f15508df62 feat: make timestamp editable 2025-07-30 17:44:19 +02:00
Hayden Bleasel 5931ddb77a
feat: add ultracite (#452)
* Init ultracite

* Update scripts and biome.jsonc

* Update biome.jsonc

* Update biome.jsonc

* Update biome.jsonc

* Run format
2025-07-25 00:41:34 +03:00
Dominik K. 0ba2893610
fix: hardcode blog url 2025-07-22 00:43:27 +02:00
Dominik Koch e5c8df5555 fix: typo in url 2025-07-22 00:34:49 +02:00
Dominik Koch b10c8536fa fix: move to next_public keys 2025-07-22 00:27:23 +02:00
Dominik Koch ddf0353d92 fix: use default marble data 2025-07-21 23:50:21 +02:00
Dominik Koch 5ef6e2bc97 fix: implement coderabbit suggestions
They actually good wtf
2025-07-21 23:45:02 +02:00
Dominik Koch e21c467489 feat: add opencut blog 2025-07-21 23:18:07 +02:00
Maze Winther 5266aed5eb feat: ripple editing mode on timeline 2025-07-19 19:08:08 +02:00
Maze Winther 74e7d427aa Merge branch 'feat/shortcut-actions' into staging 2025-07-18 11:37:48 +02:00
Anwarul Islam c34b402297 Add utils for platform detection 2025-07-18 05:53:19 +06:00
Anwarul Islam 7f609cb86f Add action and keybinding management with React hooks 2025-07-18 05:27:40 +06:00
Maze Winther e317fb547d revert and fix (please work) 2025-07-16 15:44:05 +02:00
Ahmet Kilinc 5178732c4c csrf token and browser detection 2025-07-16 00:44:42 +01:00
tranminhquang 9d5fb821c7 feat: integrate @t3-oss/env for environment variable management across the application 2025-07-15 13:29:16 +07:00
Maze 800e720e6e
Merge pull request #208 from Sanjit-K/main
fixed: [BUG] crypto.randomUUID is not a function Runtime Error #205. …
2025-07-12 15:27:00 +02:00
Maze Winther 8545d95070 refactor: add FPS and remove turbopack (yes, fuck you turbopack) 2025-07-12 12:48:31 +02:00
Sanjit K 799fd2981a fixed: [BUG] crypto.randomUUID is not a function Runtime Error #205. Added fallback function with manual UUID generation if crypto.randomUUID() was not available. 2025-07-12 00:14:03 -05:00
Maze Winther 4d67e366ad feat: background settings (color, blur) 2025-07-11 03:52:39 +02:00
Maze Winther e8b0057cc4 feat: initial fonts support 2025-07-10 20:53:58 +02:00
Maze Winther 055a6af055 refactor: move constants to src/constants 2025-07-10 20:35:15 +02:00
Maze Winther 059a4f4205 style: timeline tracks 2025-07-09 22:31:45 +02:00
Maze Winther db8cd93a99 style: replace track color circle with icon in timeline 2025-07-09 22:17:05 +02:00
Maze Winther 60a1273206 fix: adjust element border colors 2025-07-08 20:54:19 +02:00
Maze Winther d750d7f41d shipping too hard 2025-07-08 00:07:22 +02:00
Maze Winther 9d2fd50fbc refactor: centralize track colors and timeline constants 2025-07-07 23:21:06 +02:00
Maze Winther bd0c7f2206 refactor: store media relative to project, add storage for timeline data, and other things 2025-07-07 19:06:36 +02:00
Maze Winther 40c7fbb4f8 refactor: move to a typed-tracks system and add support for text 2025-07-06 20:45:29 +02:00
Maze Winther c37c64c1b9 feat: add time formatting utility and update editor and preview components to use it 2025-07-01 01:30:02 +02:00
Maze Winther 1a01871cfc refactor: update media processing to use width and height instead of aspect ratio 2025-07-01 01:13:14 +02:00
Maze Winther 09373eb4a3 feat: implement project management features with storage integration, including project creation, deletion, and renaming dialogs 2025-06-30 19:58:36 +02:00
ANAGO Ronnel ebb3456c10 refactor: update imports in waitlist API and library to ensure consistent usage of drizzle-orm functions 2025-06-26 02:51:17 +02:00
DevloperAmanSingh 181d3fca06 fix: improve UI responsiveness during media file processing 2025-06-25 21:50:12 +05:30
DevloperAmanSingh 0723623eaf feat: add progress callback to media file processing function 2025-06-25 21:41:23 +05:30
Maze Winther 3dff7e37d0 refactor: update database imports to use new package structure 2025-06-24 13:52:48 +02:00
Hyteq d25e1eaa1d feat: migrated packages properly, using packages in web app 2025-06-24 11:29:15 +03:00
Hyteq e2872005fb feat: initial auth package 2025-06-24 11:27:19 +03:00
Dipanshu Rawat 57e42e2c45 ref: fetch api function 2025-06-24 02:06:55 +05:30
Dipanshu Rawat fb9c560c5b add: github stars count by API 2025-06-24 01:40:46 +05:30
Maze c691835d85
Merge pull request #22 from DeepanshuMishraa/changes
Added google auth and some auth page ui optimisations
2025-06-23 19:58:54 +02:00
Deepanshu Mishra 8bcd226bdb Added google auth and some auth page ui optimisations 2025-06-23 22:51:34 +05:30
Shubbu03 6a701ee8c0 better error handling 2025-06-23 22:24:57 +05:30
Shubbu03 7d1b5ceb0d Completed the getVideoInfo func according to the comment specified 2025-06-23 22:10:15 +05:30
Maze d92aed2dac
Merge pull request #1 from yimothysu/main
Add /auth/login and /auth/signup routes
2025-06-23 10:52:40 +02:00
Hyteq 56480772c3 feat: initial DnD and ffmpeg install 2025-06-23 10:33:03 +03:00
jimsu 54235d8dfe Add /auth/login and /auth/signup routes 2025-06-22 22:32:33 -07:00
Maze Winther ead6684b08 change app name from AppCut to OpenCut 2025-06-22 22:22:08 +02:00