An AI-assisted production workspace for turning source videos or scripts into edited, narrated, subtitled, translated, and publish-ready video packages.
Ultimate Video Editor combines a Next.js dashboard with Baserow, MinIO, FFmpeg, local or hosted AI models, speech services, and image/video generation providers. It is designed for scene-based production: ingest a source, generate or refine its script, build scene media, synchronize narration, run quality-control passes, assemble the final video, and export the accompanying YouTube assets.

The configurable production pipeline supports reusable templates, multi-step automation, and language-specific dubbing.
![]()
Generate and compare thumbnail variants, select or export the final artwork, and manage YouTube metadata from the same workspace.
[!NOTE] This is a self-hosted production application, not a hosted SaaS product. Several workflows depend on separately configured services, provider credentials, Baserow tables, and local filesystem paths. Review the configuration section before running it outside the original development environment.
The full pipeline is configurable, but a typical production flow looks like this:
Source video or title
|
v
Script -> narration -> transcription -> scene separation
|
v
Scene clips -> text fixes -> TTS -> synchronization -> QA
|
v
Subtitles -> images -> scene videos -> enhancement -> final merge
|
v
Dubbing -> YouTube metadata -> thumbnails -> asset export
Pipeline presets can retain different combinations of these steps for different channels, languages, or production styles.
At minimum, development requires:
PATHAdditional features require their corresponding services or credentials:
Clone the repository and enter the project:
git clone https://github.com/sahandghavidel/ai-video-editor.git
cd ai-video-editor
Install the Node.js dependencies:
npm install
Create the local environment file:
cp .env.example .env.local
Add the values required by the workflows you intend to use. The core configuration normally includes:
# Baserow
BASEROW_API_URL=http://localhost:714/api
BASEROW_TABLE_ID=your_scenes_table_id
BASEROW_SCENES_TABLE_ID=your_scenes_table_id
BASEROW_EMAIL=you@example.com
BASEROW_PASSWORD=your_password
# Alternatively, configure BASEROW_TOKEN and BASEROW_USE_DATABASE_TOKEN.
# MinIO
MINIO_BASE_URL=http://localhost:9000
MINIO_BUCKET=your_bucket
MINIO_ROOT_USER=your_access_key
MINIO_ROOT_PASSWORD=your_secret_key
# AI providers (configure only what you use)
OPENROUTER_API_KEY=your_openrouter_key
OPENAI_API_KEY=your_openai_key
KIE_API_KEY=your_kie_key
FISH_TTS_API_KEY=your_fish_audio_key
# Optional notifications
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
The committed .env.example also documents the yt-dlp cache, cookie, rate-limit, and client-rotation settings. Feature-specific routes contain additional optional tuning variables for local transcription, TTS cleanup, FFmpeg timeouts, and video enhancement.
Start the development environment:
npm run dev
The development script starts Next.js at http://localhost:9540 and restarts the local MinIO server. It currently contains macOS-specific paths and expects the minio executable plus MINIO_ROOT_PASSWORD; adjust scripts/dev-with-minio.sh for your machine if necessary.
To run Next.js without the helper script:
npx next dev -p 9540
src/lib/baserow-actions.ts and the Baserow API helpers before connecting a new database.src/lib/local-video-export.ts. Change LOCAL_VIDEO_EXPORT_BASE_DIR before using folder export on another machine.NEXT_PUBLIC_MINIO_* values when the browser needs direct object URLs..env.local, provider keys, database credentials, or storage secrets.| Command | Purpose |
|---|---|
npm run dev | Start Next.js on port 9540 and restart local MinIO |
npm run dev:restart | Run the same development helper without caffeinate |
npm run build | Create a production Next.js build |
npm run start | Start the production server |
npm run lint | Run ESLint |
src/
├── app/ Next.js pages and API routes
├── components/ Dashboard, scene editor, settings, and batch UI
├── data/ TTS references and replacement data
├── features/ Focused production workflows
├── lib/ Baserow, MinIO, AI provider, and export services
├── server/ Server-only integrations and notifications
├── store/ Zustand application state and pipeline presets
└── utils/ FFmpeg, captions, uploads, and batch utilities
docs/ Operational and batch-pipeline guides
scripts/ Development and local processing helpers
cohere-local/ Local Cohere transcription service notes
omnivoice-local/ Local OmniVoice service notes
REAL-Video-Enhancer/ Optional third-party enhancement backend
Contributions are welcome. Before opening a pull request:
npm run lint and, when relevant, npm run build.This project is licensed under the MIT License.
Third-party projects and model code included in or used by this repository remain subject to their own licenses. See the license files within those directories for details.
1,090 commits
TypeScript
62.4%
Python
36.6%
An AI-assisted production workspace for turning source videos or scripts into edited, narrated, subtitled, translated, and publish-ready video packages.
Ultimate Video Editor combines a Next.js dashboard with Baserow, MinIO, FFmpeg, local or hosted AI models, speech services, and image/video generation providers. It is designed for scene-based production: ingest a source, generate or refine its script, build scene media, synchronize narration, run quality-control passes, assemble the final video, and export the accompanying YouTube assets.

The configurable production pipeline supports reusable templates, multi-step automation, and language-specific dubbing.
![]()
Generate and compare thumbnail variants, select or export the final artwork, and manage YouTube metadata from the same workspace.
[!NOTE] This is a self-hosted production application, not a hosted SaaS product. Several workflows depend on separately configured services, provider credentials, Baserow tables, and local filesystem paths. Review the configuration section before running it outside the original development environment.
The full pipeline is configurable, but a typical production flow looks like this:
Source video or title
|
v
Script -> narration -> transcription -> scene separation
|
v
Scene clips -> text fixes -> TTS -> synchronization -> QA
|
v
Subtitles -> images -> scene videos -> enhancement -> final merge
|
v
Dubbing -> YouTube metadata -> thumbnails -> asset export
Pipeline presets can retain different combinations of these steps for different channels, languages, or production styles.
At minimum, development requires:
PATHAdditional features require their corresponding services or credentials:
Clone the repository and enter the project:
git clone https://github.com/sahandghavidel/ai-video-editor.git
cd ai-video-editor
Install the Node.js dependencies:
npm install
Create the local environment file:
cp .env.example .env.local
Add the values required by the workflows you intend to use. The core configuration normally includes:
# Baserow
BASEROW_API_URL=http://localhost:714/api
BASEROW_TABLE_ID=your_scenes_table_id
BASEROW_SCENES_TABLE_ID=your_scenes_table_id
BASEROW_EMAIL=you@example.com
BASEROW_PASSWORD=your_password
# Alternatively, configure BASEROW_TOKEN and BASEROW_USE_DATABASE_TOKEN.
# MinIO
MINIO_BASE_URL=http://localhost:9000
MINIO_BUCKET=your_bucket
MINIO_ROOT_USER=your_access_key
MINIO_ROOT_PASSWORD=your_secret_key
# AI providers (configure only what you use)
OPENROUTER_API_KEY=your_openrouter_key
OPENAI_API_KEY=your_openai_key
KIE_API_KEY=your_kie_key
FISH_TTS_API_KEY=your_fish_audio_key
# Optional notifications
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
The committed .env.example also documents the yt-dlp cache, cookie, rate-limit, and client-rotation settings. Feature-specific routes contain additional optional tuning variables for local transcription, TTS cleanup, FFmpeg timeouts, and video enhancement.
Start the development environment:
npm run dev
The development script starts Next.js at http://localhost:9540 and restarts the local MinIO server. It currently contains macOS-specific paths and expects the minio executable plus MINIO_ROOT_PASSWORD; adjust scripts/dev-with-minio.sh for your machine if necessary.
To run Next.js without the helper script:
npx next dev -p 9540
src/lib/baserow-actions.ts and the Baserow API helpers before connecting a new database.src/lib/local-video-export.ts. Change LOCAL_VIDEO_EXPORT_BASE_DIR before using folder export on another machine.NEXT_PUBLIC_MINIO_* values when the browser needs direct object URLs..env.local, provider keys, database credentials, or storage secrets.| Command | Purpose |
|---|---|
npm run dev | Start Next.js on port 9540 and restart local MinIO |
npm run dev:restart | Run the same development helper without caffeinate |
npm run build | Create a production Next.js build |
npm run start | Start the production server |
npm run lint | Run ESLint |
src/
├── app/ Next.js pages and API routes
├── components/ Dashboard, scene editor, settings, and batch UI
├── data/ TTS references and replacement data
├── features/ Focused production workflows
├── lib/ Baserow, MinIO, AI provider, and export services
├── server/ Server-only integrations and notifications
├── store/ Zustand application state and pipeline presets
└── utils/ FFmpeg, captions, uploads, and batch utilities
docs/ Operational and batch-pipeline guides
scripts/ Development and local processing helpers
cohere-local/ Local Cohere transcription service notes
omnivoice-local/ Local OmniVoice service notes
REAL-Video-Enhancer/ Optional third-party enhancement backend
Contributions are welcome. Before opening a pull request:
npm run lint and, when relevant, npm run build.This project is licensed under the MIT License.
Third-party projects and model code included in or used by this repository remain subject to their own licenses. See the license files within those directories for details.
1,090 commits
TypeScript
62.4%
Python
36.6%