e3d4f3fa92 Add support for basic SRT subtitle import to Captions panel (#756)
* Add SRT subtitle import to the captions panel

[Modified from 0bd641b4102c827ef8d218ada099229f73396077, 2026-03-28 08:46:23 -0400]

Parse .srt files into chunks and insert them as text elements on a new text track using the existing caption styling defaults. Displays a warning when malformed cues are skipped during import.

* Batch caption text insertion

[Modified from eece3bbc5f0578a24a4f90f0ab87fe5ca37e94e9, 2026-03-28 09:13:18 -0400]

Batch caption insertion in a BatchCommand so that undo will batch undo all subtitle insertion from either srt file or ai transcriptions.

* Move subtitle parsing into a shared interface

[Modified from e84404b7857f8c611eda7a65b5d61ee6c9823d75, 2026-03-28 09:52:31 -0400]

Extracted the srt specific extraction behind a generic shared interface to allow easier adding of other subtitle formats in the future.

* Apply better default styling for subtitles.

[Modified from b5deec4285f99873ba5bf57971f7bcab26e8c743, 2026-03-31 11:49:34 -0400]

Shrink font size, aim to layout 5% above bottom, keep subtitle width 80% of video, wrap text on new lines if too long.

* Update Captions Panel UI

Split captions panel into Generate and Import tabs as they are two different approaches for adding captions.

* Add biome formatting fixes

* Add .ass subtitle import support

Extend subtitle import to accept .ass files alongside .srt, map supported .ass styles onto imported text elements, and display warnings when unsupported .ass features are skipped.

* Change “Import subtitles” button style

* refactor: review fixes

* fix: convert subtitle times from seconds to ticks

* refactor: replace captions tab switcher with import action button

---------

Co-authored-by: Maze Winther <mazewinther@gmail.com>
2026-04-14 03:19:12 +02:00
2026-04-04 08:53:10 +02:00
2026-03-29 15:56:48 +02:00
2026-03-29 15:56:48 +02:00
2026-04-13 05:08:29 +02:00
2026-02-23 09:38:38 +01:00
2025-07-02 16:25:08 +03:00
2026-04-13 05:08:29 +02:00
2026-04-13 05:01:51 +02:00
2025-06-22 22:22:08 +02:00
2026-03-29 15:56:48 +02:00
2026-04-04 08:53:10 +02:00
2026-03-29 15:56:48 +02:00

OpenCut Logo

OpenCut

A free, open-source video editor for web, desktop, and mobile.

Sponsors

Thanks to Vercel and fal.ai for their support of open-source software.

Vercel OSS Program Powered by fal.ai

Why?

  • Privacy: Your videos stay on your device
  • Free features: Most basic CapCut features are now paywalled
  • Simple: People want editors that are easy to use - CapCut proved that

Features

  • Timeline-based editing
  • Multi-track support
  • Real-time preview
  • No watermarks or subscriptions
  • Analytics provided by Databuddy, 100% Anonymized & Non-invasive.
  • Blog powered by Marble, Headless CMS.

Project Structure

  • apps/web/ – Main Next.js web application
  • apps/desktop/ – Native desktop app (in progress)
  • src/components/ – UI and editor components
  • src/hooks/ – Custom React hooks
  • src/lib/ – Utility and API logic
  • src/stores/ – State management (Zustand, etc.)
  • src/types/ – TypeScript types

Getting Started

Prerequisites

Note: Docker is optional but recommended for running the local database and Redis. If you only want to work on frontend features, you can skip it.

Setup

  1. Fork and clone the repository

  2. Copy the environment file:

    # Unix/Linux/Mac
    cp apps/web/.env.example apps/web/.env.local
    
    # Windows PowerShell
    Copy-Item apps/web/.env.example apps/web/.env.local
    
  3. Start the database and Redis:

    docker compose up -d db redis serverless-redis-http
    
  4. Install dependencies and start the dev server:

    bun install
    bun dev:web
    

The application will be available at http://localhost:3000.

The .env.example has sensible defaults that match the Docker Compose config — it should work out of the box.

Desktop setup

Desktop is opt-in. If you're only working on the web app, skip this entirely.

If you want to get ready for apps/desktop, see apps/desktop/README.md. It's a two-step setup: Rust toolchain first, then desktop native dependencies.

Local WASM development

Only needed if you're editing rust/wasm and want the web app to use your local build instead of the published package.

  1. Build the package once from the repo root:

    bun run build:wasm
    
  2. Register the generated package for linking:

    cd rust/wasm/pkg
    bun link
    
  3. Link apps/web to the local package:

    cd apps/web
    bun link opencut-wasm
    
  4. Rebuild on changes while you work:

    bun dev:wasm
    

To switch apps/web back to the published package, run:

cd apps/web
bun add opencut-wasm

Self-Hosting with Docker

To run everything (including a production build of the app) in Docker:

docker compose up -d

The app will be available at http://localhost:3100.

Contributing

We welcome contributions! While we're actively developing and refactoring certain areas, there are plenty of opportunities to contribute effectively.

🎯 Focus areas: Timeline functionality, project management, performance, bug fixes, and UI improvements outside the preview panel.

⚠️ Avoid for now: Preview panel enhancements (fonts, stickers, effects) and export functionality - we're refactoring these with a new binary rendering approach.

See our Contributing Guide for detailed setup instructions, development guidelines, and complete focus area guidance.

Quick start for contributors:

  • Fork the repo and clone locally
  • Follow the setup instructions in CONTRIBUTING.md
  • Working on apps/desktop? See apps/desktop/README.md for setup
  • Create a feature branch and submit a PR

License

MIT LICENSE


Star History Chart

S
Description
No description provided
Readme MIT
43 MiB
Languages
TypeScript 97.2%
CSS 2.1%
Rust 0.7%