Skip to content

Migrate to Vite+, oxlint/oxfmt, vendored soundtouch#205

Merged
walterlow merged 16 commits intostagingfrom
develop
Apr 25, 2026
Merged

Migrate to Vite+, oxlint/oxfmt, vendored soundtouch#205
walterlow merged 16 commits intostagingfrom
develop

Conversation

@walterlow
Copy link
Copy Markdown
Owner

Summary

  • Migrate tooling to Vite+ and switch linting/formatting to oxlint + oxfmt, with broad cleanup of exhaustive-deps and memo dependencies across preview, timeline, and runtime hooks.
  • Vendor soundtouch as a local audio module and route audio time stretch through the infrastructure facade.
  • Refresh README, tighten generated report parsing in checks, and other small follow-ups.

Test plan

  • npm run lint
  • npm run format:check
  • npm run test:run
  • npm run build
  • Smoke test preview playback, scrubbing, and audio time stretch in the editor

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 25, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
freecut Ready Ready Preview, Comment Apr 25, 2026 9:10am

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 25, 2026

Important

Review skipped

Too many files!

This PR contains 299 files, which is 149 over the limit of 150.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 88a25a71-f47c-442f-8c95-1d19d33a2ac8

📥 Commits

Reviewing files that changed from the base of the PR and between 99ce674 and 3376d32.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (299)
  • .github/workflows/ci.yml
  • .oxfmtrc.json
  • .oxlintrc.json
  • .vite-hooks/pre-commit
  • .vite-hooks/pre-push
  • CLAUDE.md
  • README.md
  • eslint.config.js
  • package.json
  • scripts/check-legacy-lib-imports.mjs
  • src/app.tsx
  • src/app/debug/index.ts
  • src/app/debug/project-debug.ts
  • src/app/editor-layout.ts
  • src/app/state/clear-keyframes-dialog/index.ts
  • src/app/state/clear-keyframes-dialog/store.ts
  • src/app/state/editor/index.ts
  • src/app/state/editor/store.ts
  • src/app/state/editor/types.ts
  • src/app/state/project-media-match-dialog/index.ts
  • src/app/state/project-media-match-dialog/store.ts
  • src/app/state/tts-generate-dialog/index.ts
  • src/app/state/tts-generate-dialog/store.ts
  • src/components/brand/freecut-logo.tsx
  • src/components/error-boundary.tsx
  • src/components/marquee-overlay.tsx
  • src/components/ui/accordion.tsx
  • src/components/ui/alert-dialog.tsx
  • src/components/ui/alert.tsx
  • src/components/ui/button-variants.ts
  • src/components/ui/button.tsx
  • src/components/ui/collapsible.tsx
  • src/components/ui/combobox.tsx
  • src/components/ui/context-menu.tsx
  • src/components/ui/dialog.tsx
  • src/components/ui/dropdown-menu.tsx
  • src/components/ui/floating-panel.tsx
  • src/components/ui/global-tooltip.tsx
  • src/components/ui/input.tsx
  • src/components/ui/label.tsx
  • src/components/ui/popover.tsx
  • src/components/ui/progress.tsx
  • src/components/ui/resizable.tsx
  • src/components/ui/scroll-area.tsx
  • src/components/ui/select.tsx
  • src/components/ui/separator.tsx
  • src/components/ui/slider.tsx
  • src/components/ui/sonner.tsx
  • src/components/ui/switch.tsx
  • src/components/ui/tabs.tsx
  • src/components/ui/textarea.tsx
  • src/components/ui/tooltip.tsx
  • src/components/ui/window-portal.tsx
  • src/config/hotkeys.test.ts
  • src/config/hotkeys.ts
  • src/config/proxy-generation.ts
  • src/core/animation/easing.ts
  • src/core/projects/migrations/index.test.ts
  • src/core/projects/migrations/index.ts
  • src/core/projects/migrations/migrations.ts
  • src/core/projects/migrations/normalize.ts
  • src/core/projects/migrations/types.ts
  • src/core/timeline/defaults.ts
  • src/core/timeline/transitions/engine-wipe.test.ts
  • src/core/timeline/transitions/engine.ts
  • src/core/timeline/transitions/index.ts
  • src/core/timeline/transitions/register-builtins.ts
  • src/core/timeline/transitions/registry.ts
  • src/core/timeline/transitions/renderers/basic.ts
  • src/core/timeline/transitions/renderers/flip.ts
  • src/core/timeline/transitions/renderers/gpu.ts
  • src/core/timeline/transitions/renderers/index.ts
  • src/core/timeline/transitions/renderers/mask.test.ts
  • src/core/timeline/transitions/renderers/mask.ts
  • src/core/timeline/transitions/renderers/slide.ts
  • src/core/timeline/transitions/renderers/wipe.ts
  • src/core/timeline/transitions/transition-planner.test.ts
  • src/core/timeline/transitions/transition-planner.ts
  • src/data/changelog-types.ts
  • src/data/changelog.json
  • src/features/composition-runtime/components/audio-playback-props.ts
  • src/features/composition-runtime/components/composition-content.keyframes.test.tsx
  • src/features/composition-runtime/components/composition-content.masks.test.tsx
  • src/features/composition-runtime/components/composition-content.stable-video.test.tsx
  • src/features/composition-runtime/components/composition-content.tsx
  • src/features/composition-runtime/components/contained-media-layout.test.tsx
  • src/features/composition-runtime/components/contained-media-layout.tsx
  • src/features/composition-runtime/components/custom-decoder-audio.test.tsx
  • src/features/composition-runtime/components/custom-decoder-audio.tsx
  • src/features/composition-runtime/components/custom-decoder-buffered-audio-handoff.test.tsx
  • src/features/composition-runtime/components/custom-decoder-buffered-audio.test.tsx
  • src/features/composition-runtime/components/custom-decoder-buffered-audio.tsx
  • src/features/composition-runtime/components/debug-overlay.tsx
  • src/features/composition-runtime/components/gif-player/gif-canvas.tsx
  • src/features/composition-runtime/components/gif-player/index.tsx
  • src/features/composition-runtime/components/hooks/use-audio-playback-state.ts
  • src/features/composition-runtime/components/hooks/use-item-visual-state.ts
  • src/features/composition-runtime/components/item-effect-wrapper.tsx
  • src/features/composition-runtime/components/item-visual-wrapper.tsx
  • src/features/composition-runtime/components/item.tsx
  • src/features/composition-runtime/components/pitch-corrected-audio.test.tsx
  • src/features/composition-runtime/components/pitch-corrected-audio.tsx
  • src/features/composition-runtime/components/shape-content.tsx
  • src/features/composition-runtime/components/soundtouch-worklet-audio.test.tsx
  • src/features/composition-runtime/components/soundtouch-worklet-audio.tsx
  • src/features/composition-runtime/components/stable-video-sequence.test.tsx
  • src/features/composition-runtime/components/stable-video-sequence.tsx
  • src/features/composition-runtime/components/text-content.tsx
  • src/features/composition-runtime/components/video-audio-context.ts
  • src/features/composition-runtime/components/video-content.test.tsx
  • src/features/composition-runtime/components/video-content.tsx
  • src/features/composition-runtime/compositions/main-composition.tsx
  • src/features/composition-runtime/contexts/KeyframesProvider.tsx
  • src/features/composition-runtime/contexts/composition-space-context.test.ts
  • src/features/composition-runtime/contexts/composition-space-context.tsx
  • src/features/composition-runtime/contexts/keyframes-context-core.ts
  • src/features/composition-runtime/contexts/keyframes-context.ts
  • src/features/composition-runtime/contexts/nested-media-resolution-context.tsx
  • src/features/composition-runtime/deps/keyframes-contract.ts
  • src/features/composition-runtime/deps/keyframes.ts
  • src/features/composition-runtime/deps/media-library-contract.ts
  • src/features/composition-runtime/deps/media-library.ts
  • src/features/composition-runtime/deps/player-contract.ts
  • src/features/composition-runtime/deps/player.ts
  • src/features/composition-runtime/deps/stores-contract.ts
  • src/features/composition-runtime/deps/stores.ts
  • src/features/composition-runtime/deps/timeline-contract.ts
  • src/features/composition-runtime/deps/timeline.ts
  • src/features/composition-runtime/hooks/use-frame-composition-scene.ts
  • src/features/composition-runtime/hooks/use-player-compat.ts
  • src/features/composition-runtime/hooks/use-transition-participant-sync.test.ts
  • src/features/composition-runtime/hooks/use-transition-participant-sync.ts
  • src/features/composition-runtime/utils/audio-buffer-wav.ts
  • src/features/composition-runtime/utils/audio-codec-detection.test.ts
  • src/features/composition-runtime/utils/audio-codec-detection.ts
  • src/features/composition-runtime/utils/audio-decode-cache.test.ts
  • src/features/composition-runtime/utils/audio-decode-cache.ts
  • src/features/composition-runtime/utils/audio-scene.test.ts
  • src/features/composition-runtime/utils/audio-scene.ts
  • src/features/composition-runtime/utils/clip-mask-raster.test.ts
  • src/features/composition-runtime/utils/clip-mask-raster.ts
  • src/features/composition-runtime/utils/corner-pin.ts
  • src/features/composition-runtime/utils/dom-video-element-registry.test.ts
  • src/features/composition-runtime/utils/dom-video-element-registry.ts
  • src/features/composition-runtime/utils/fonts.ts
  • src/features/composition-runtime/utils/frame-scene.test.ts
  • src/features/composition-runtime/utils/frame-scene.ts
  • src/features/composition-runtime/utils/mask-info.test.ts
  • src/features/composition-runtime/utils/mask-info.ts
  • src/features/composition-runtime/utils/mask-preview.test.ts
  • src/features/composition-runtime/utils/mask-preview.ts
  • src/features/composition-runtime/utils/preview-audio-conform.ts
  • src/features/composition-runtime/utils/preview-audio-element-pool.ts
  • src/features/composition-runtime/utils/preview-audio-graph.test.ts
  • src/features/composition-runtime/utils/preview-audio-graph.ts
  • src/features/composition-runtime/utils/preview-path-override.ts
  • src/features/composition-runtime/utils/scene-assembly.test.ts
  • src/features/composition-runtime/utils/scene-assembly.ts
  • src/features/composition-runtime/utils/shape-path.ts
  • src/features/composition-runtime/utils/soundtouch-preview-shared.ts
  • src/features/composition-runtime/utils/soundtouch-preview-source.test.ts
  • src/features/composition-runtime/utils/soundtouch-preview-source.ts
  • src/features/composition-runtime/utils/soundtouch-preview-worklet.test.ts
  • src/features/composition-runtime/utils/soundtouch-preview-worklet.ts
  • src/features/composition-runtime/utils/text-layout.ts
  • src/features/composition-runtime/utils/transform-resolver.test.ts
  • src/features/composition-runtime/utils/transform-resolver.ts
  • src/features/composition-runtime/utils/transition-scene.test.ts
  • src/features/composition-runtime/utils/transition-scene.ts
  • src/features/composition-runtime/utils/transition-shadow-warmup.test.ts
  • src/features/composition-runtime/utils/transition-shadow-warmup.ts
  • src/features/composition-runtime/utils/video-scene.test.ts
  • src/features/composition-runtime/utils/video-scene.ts
  • src/features/composition-runtime/utils/video-sync-plan.test.ts
  • src/features/composition-runtime/utils/video-sync-plan.ts
  • src/features/composition-runtime/utils/video-timing.test.ts
  • src/features/composition-runtime/utils/video-timing.ts
  • src/features/composition-runtime/worklets/soundtouch-preview-processor.worklet.ts
  • src/features/editor/components/ai-panel.tsx
  • src/features/editor/components/audio-meter-panel.tsx
  • src/features/editor/components/audio-meter-utils.test.ts
  • src/features/editor/components/audio-meter-utils.ts
  • src/features/editor/components/audio-mixer-view.test.tsx
  • src/features/editor/components/audio-mixer-view.tsx
  • src/features/editor/components/clear-keyframes-dialog-store.ts
  • src/features/editor/components/clear-keyframes-dialog.tsx
  • src/features/editor/components/editor.test.tsx
  • src/features/editor/components/editor.tsx
  • src/features/editor/components/interaction-lock-region.tsx
  • src/features/editor/components/local-inference-status-pill.tsx
  • src/features/editor/components/media-sidebar.tsx
  • src/features/editor/components/preview-area.test.tsx
  • src/features/editor/components/preview-area.tsx
  • src/features/editor/components/project-debug-panel.tsx
  • src/features/editor/components/project-media-match-dialog.test.tsx
  • src/features/editor/components/project-media-match-dialog.tsx
  • src/features/editor/components/project-upgrade-dialog.tsx
  • src/features/editor/components/properties-sidebar/canvas-panel/index.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/audio-eq-curve-editor.test.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/audio-eq-curve-editor.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/audio-eq-panel-content.test.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/audio-eq-panel-content.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/audio-eq-ui.test.ts
  • src/features/editor/components/properties-sidebar/clip-panel/audio-eq-ui.ts
  • src/features/editor/components/properties-sidebar/clip-panel/audio-section-utils.ts
  • src/features/editor/components/properties-sidebar/clip-panel/audio-section.test.ts
  • src/features/editor/components/properties-sidebar/clip-panel/audio-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/corner-pin-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/fill-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/font-picker.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/gif-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/index.test.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/index.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/layout-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/shape-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/text-animation-presets.test.ts
  • src/features/editor/components/properties-sidebar/clip-panel/text-animation-presets.ts
  • src/features/editor/components/properties-sidebar/clip-panel/text-section.tsx
  • src/features/editor/components/properties-sidebar/clip-panel/text-style-presets.test.ts
  • src/features/editor/components/properties-sidebar/clip-panel/text-style-presets.ts
  • src/features/editor/components/properties-sidebar/clip-panel/video-section.tsx
  • src/features/editor/components/properties-sidebar/components/alignment-buttons.tsx
  • src/features/editor/components/properties-sidebar/components/color-picker.tsx
  • src/features/editor/components/properties-sidebar/components/index.ts
  • src/features/editor/components/properties-sidebar/components/linked-dimensions.tsx
  • src/features/editor/components/properties-sidebar/components/number-input.tsx
  • src/features/editor/components/properties-sidebar/components/property-row.tsx
  • src/features/editor/components/properties-sidebar/components/property-section.tsx
  • src/features/editor/components/properties-sidebar/components/slider-input.test.tsx
  • src/features/editor/components/properties-sidebar/components/slider-input.tsx
  • src/features/editor/components/properties-sidebar/index.test.tsx
  • src/features/editor/components/properties-sidebar/index.tsx
  • src/features/editor/components/properties-sidebar/marker-panel/index.tsx
  • src/features/editor/components/properties-sidebar/transition-panel/index.test.tsx
  • src/features/editor/components/properties-sidebar/transition-panel/index.tsx
  • src/features/editor/components/properties-sidebar/utils/index.ts
  • src/features/editor/components/properties-sidebar/utils/mixed-value.ts
  • src/features/editor/components/settings-dialog.tsx
  • src/features/editor/components/shortcuts-dialog.tsx
  • src/features/editor/components/toolbar.tsx
  • src/features/editor/components/transitions-panel.tsx
  • src/features/editor/components/tts-generate-dialog.tsx
  • src/features/editor/components/unsaved-changes-dialog.tsx
  • src/features/editor/components/whats-new-dialog.tsx
  • src/features/editor/components/whats-new-seen.ts
  • src/features/editor/deps/composition-runtime-contract.ts
  • src/features/editor/deps/composition-runtime.ts
  • src/features/editor/deps/effects-contract.ts
  • src/features/editor/deps/export-contract.ts
  • src/features/editor/deps/keyframes-contract.ts
  • src/features/editor/deps/keyframes.ts
  • src/features/editor/deps/media-library-contract.ts
  • src/features/editor/deps/media-library.ts
  • src/features/editor/deps/preview-contract.ts
  • src/features/editor/deps/preview.ts
  • src/features/editor/deps/project-bundle-contract.ts
  • src/features/editor/deps/project-bundle.ts
  • src/features/editor/deps/projects-contract.ts
  • src/features/editor/deps/projects.ts
  • src/features/editor/deps/scene-browser-contract.ts
  • src/features/editor/deps/scene-browser.ts
  • src/features/editor/deps/settings-contract.ts
  • src/features/editor/deps/settings.ts
  • src/features/editor/deps/timeline-cache.ts
  • src/features/editor/deps/timeline-contract.ts
  • src/features/editor/deps/timeline-hooks.ts
  • src/features/editor/deps/timeline-store.ts
  • src/features/editor/deps/timeline-subscriptions.ts
  • src/features/editor/deps/timeline-ui.ts
  • src/features/editor/deps/timeline-utils.ts
  • src/features/editor/deps/timeline.ts
  • src/features/editor/hooks/use-auto-save.ts
  • src/features/editor/hooks/use-editor-hotkeys.ts
  • src/features/editor/index.ts
  • src/features/editor/services/kokoro-tts-service.ts
  • src/features/editor/services/moss-tts-service.ts
  • src/features/editor/services/musicgen-service.ts
  • src/features/editor/stores/clipboard-store.ts
  • src/features/editor/stores/debug-store.ts
  • src/features/editor/stores/editor-store.test.ts
  • src/features/editor/stores/editor-store.ts
  • src/features/editor/stores/selection-store.test.ts
  • src/features/editor/stores/selection-store.ts
  • src/features/editor/types.ts
  • src/features/editor/utils/project-media-match.ts
  • src/features/editor/utils/project-metadata-history.ts
  • src/features/editor/utils/transition-ui-config.test.ts
  • src/features/editor/utils/transition-ui-config.ts
  • src/features/effects/components/effects-section.tsx
  • src/features/effects/components/panels/gpu-curves-panel.tsx
  • src/features/effects/components/panels/gpu-effect-panel.tsx
  • src/features/effects/components/panels/gpu-wheels-panel.tsx
  • src/features/effects/components/panels/index.ts
  • src/features/effects/deps/keyframes-contract.ts
  • src/features/effects/deps/media-library-contract.ts
  • src/features/effects/deps/preview-contract.ts
  • src/features/effects/deps/timeline-contract.ts
  • src/features/effects/hooks/use-effect-previews.ts
  • src/features/effects/utils/effect-selection.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 25, 2026

Too many files changed for review. (1412 files found, 100 file limit)

@walterlow walterlow merged commit bb50f05 into staging Apr 25, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant