VideoWare

VideoWare

Docker app from make-ware's Repository

Overview

Self-contained web based video editor. Upload media, create clips, edit timelines, and collaborate with other users on the same project in real time.

Video Ware

A self-hosted video editor with a command line interface.

Video Ware pairs a browser-based timeline editor with a CLI (vw) that can do everything the editor can: ingest footage, find moments by what's said or seen, cut clips, compose multi-track timelines, and render the result. That makes video editing scriptable — by you, by a pipeline, or by an AI agent editing on your behalf.

vw upload create raw/*.mp4                                  # ingest footage
vw label search "let's get started"                         # find moments by speech or visuals
vw label clip speech LABEL_ID --label "Cold open"           # turn a moment into a clip
vw timeline create "Episode 4" --tracks "Music,Interview,B-Roll"
vw timeline insert -t TIMELINE_ID --clips CLIP_ID --track 1
vw timeline render -t TIMELINE_ID --download episode-4.mp4

Humans get the same power visually: the web app has a full drag-and-drop timeline editor over the same data, and CLI edits show up there in realtime. Everything runs on your own hardware — your media never has to leave your server.

Features

  • Edit from the command line — the vw CLI covers the entire workflow: upload, search, clip, compose, render. Designed for scripts and AI agents, with vw workspace export to dump context and vw timeline doctor to verify edits
  • A real editor in the browser — multi-track drag-and-drop timeline, nested timelines, captions, and live preview, kept in sync with CLI edits
  • Searchable footage — speech-to-text with speaker labels, plus optional visual analysis (objects, faces, people, shot changes) via Google Cloud Video Intelligence, so "find where she says…" is a one-line search
  • Fast previews — thumbnails, scrub sprites, and proxy videos generated automatically on upload with FFmpeg
  • Render to file — export any timeline to a finished video
  • Workspaces — multi-user collaboration with role-based access
  • Your storage — local disk or any S3-compatible bucket

Quick start

The prebuilt Docker image bundles everything — web app, database, and worker — in a single container:

docker run -d \
  --name video-ware \
  -p 8888:80 \
  -e POCKETBASE_ADMIN_EMAIL=admin@example.com \
  -e POCKETBASE_ADMIN_PASSWORD=your-secure-password \
  -v ./data:/data \
  ghcr.io/make-ware/video-ware:latest

Then open http://localhost:8888 and start uploading. For pinned versions, split-service deployment with Docker Compose, and configuration options, see the deployment guide.

Get the CLI

brew tap make-ware/tap && brew install vw
vw login

Not on Homebrew? Every GitHub release ships a standalone vw build. See the CLI guide for details, the full command reference, and the end-to-end agent editing flow.

Developing locally

You'll need Node.js >= 22, Yarn 4 (via Corepack), FFmpeg, and Redis running on localhost:6379.

git clone https://github.com/make-ware/video-ware
cd video-ware
yarn install
yarn setup          # downloads PocketBase, creates .env and the admin account
yarn build:shared   # build the shared package once
yarn dev            # web app :3000, PocketBase :8090, worker

The development guide covers the rest: project layout, schemas, migrations, and worker internals.

How it's built

Video Ware is a Yarn workspaces monorepo:

  • cli/ — the vw command-line tool
  • webapp/ — the editor UI (Next.js 16, React 19, Tailwind)
  • pb/PocketBase, providing the database, auth, and realtime updates
  • worker/ — a NestJS background worker that processes, analyzes, and renders media (BullMQ + Redis)
  • shared/ — types, Zod schemas, and utilities used everywhere

More docs: Google Cloud Video Intelligence configuration · PocketBase guides

Contributing

Contributions are welcome! Set up a local environment as above, make your changes on a branch, run yarn precommit (lint, typecheck, format, test), and open a pull request. By contributing, you agree to the Contributor License Agreement.

License

Video Ware is licensed under the GNU AGPL-3.0-only. You are free to use, modify, and self-host it, including for commercial purposes. If you modify Video Ware and distribute it or run it as a network service, you must make your complete source code available to users under the same license.

The software is provided "as is", without warranty, and the authors are not liable for any damages arising from its use.

Media gallery

1 / 6

Install VideoWare on Unraid in a few clicks.

Find VideoWare in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for VideoWare Review the template variables and paths Click Install

Download Statistics

7,163
Total Downloads

Related apps

Details

Repository
dastron/video-ware:latest
Last Updated2026-08-04
First Seen2026-06-22

Runtime arguments

Web UI
http://[IP]:[PORT:80]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI PortPorttcp

Host port for the web app, PocketBase API and admin (proxied by nginx on container port 80).

Target
80
Default
8888
Value
8888
App DataPathrw

Persistent storage: PocketBase database, uploaded media, and the Redis queue.

Target
/data
Default
/mnt/user/appdata/video-ware
Value
/mnt/user/appdata/video-ware
Admin EmailVariable

Email for the auto-created PocketBase superuser.

Target
POCKETBASE_ADMIN_EMAIL
Default
admin@example.com
Value
admin@example.com
Admin PasswordVariable

Password for the auto-created PocketBase superuser. MUST be set to a strong value - leaving it at the default skips superuser creation.

Target
POCKETBASE_ADMIN_PASSWORD
Storage TypeVariable

Storage backend: 'local' (files under /data) or 's3'. For 's3' you must also supply the STORAGE_S3_* variables (see README).

Target
STORAGE_TYPE
Default
local
Value
local
Log LevelVariable

Logging verbosity: error, warn, info, debug, verbose.

Target
LOG_LEVEL
Default
warn
Value
warn