Skip to main content

DOVE - Online Video Editor

Project description

DOVE — Online Video Editor

DOVE DOVE is an API driven Video/Audio Editor for live mixing with an intuitive web based Interface.

Developed by and for DORFTV. Inspired by bbc/brave.

License: AGPL v3 Python 3.12+ GStreamer 1.26+ Nuxt 4 FastAPI

Main mixing interface — scene grid, program output, and multi-input panel NodeCG broadcast graphics overlay with live lower third controls

Concept

Inputs → Scenes → Program → Outputs

Inputs — media sources: local files, network streams, web pages, yt-dlp URLs, cameras, test patterns.

Scenes — compositor layouts combining multiple inputs. Each scene has slots with per-slot position, size, z-order, alpha, and volume controls.

Program — the currently live scene, sent to all active outputs simultaneously. Cut or crossfade between scenes.

Outputs — streaming destinations (SRT, RTMP, HLS, WebRTC, Decklink, etc.). Multiple outputs can share an encoder; dedicated encoders per output are also possible.

Features

Inputs

Type Description
uridecodebin3 Local files and streams (HTTP, SRT, RTMP, RTSP)
playlist Sequence of video clips and HTML pages
wpesrc Web page rendered as video (HTML/CSS/JS overlays)
ytdlp YouTube, Twitch, and hundreds of other sites via yt-dlp
nodecg NodeCG broadcast graphics
v4l2src Webcams and capture cards (V4L2)
imagesrc Still images (PNG, JPEG, WebP, SVG)
testsrc SMPTE color bars and test patterns
whip Browser screen share or webcam via WebRTC (experimental)

Outputs

Type Description
srtsink SRT push to a remote listener
srtserversink SRT server mode (remotes connect to DOVE)
rtmpsink RTMP push
rtspclientsink RTSP push
hlssink2 HLS segments (also used for previews)
splitmuxsink Segmented file recording
decklink SDI/HDMI via Blackmagic Design card
shout2send Icecast/Shoutcast audio stream

Encoders

Hardware-accelerated encoding via VAAPI (AMD/Intel) or Vulkan. Software fallback via x264/x265. Set video_encoder.name = "auto" to pick the best available encoder at startup. Multiple outputs can share a single encoder, or each output can have its own dedicated encoder.

Encoder Type
x264 Software (always available)
openh264 Software alternative
vah264enc / vaapih264enc VAAPI (AMD/Intel)
vulkanh264enc Vulkan (Mesa 26+, GStreamer 1.28+)
mpph264enc Rockchip hardware

Audio & Video Filters

Per-input dynamic filter chains, applied at runtime without pipeline restart.

Audio: highpass, lowpass, 3-band/10-band EQ, compressor (LSP), expander (LSP), gate (LSP), limiter, amplify, pan, invert, echo, denoise, loudnorm. See docs/audio-filters.md.

Video: color balance, flip/mirror, crop, color effects, blur, chroma key. Experimental (requires frei0r-plugins): pixelate, cartoon, glow, vignette, film grain, glitch, scanlines, sobel edge, color halftone. See docs/video-filters.md.

Previews

  • WebRTC — sub-second latency preview in the browser.
  • HLS — works in restricted networks, through any reverse proxy over HTTPS.

Keyboard Shortcuts

Full keyboard control for live production: scene selection (1–9), cut/crossfade (Enter), transition toggle (T), and more. Press ? in the UI for the full list. See docs/keyboard-shortcuts.md.

Quick Start

Want a ready-to-run setup with example inputs and scenes? See dove-demo for a pre-configured docker-compose stack you can spin up in one command.

To install DOVE from scratch:

Docker Compose

git clone https://github.com/dorftv/dove.git && cd dove
cp config-example.toml config.toml

Software rendering (no GPU):

docker compose up

AMD GPU (VAAPI + Vulkan):

docker compose -f docker-compose.yml -f docker-compose.amd.yml up

Intel GPU (VAAPI + Vulkan):

docker compose -f docker-compose.yml -f docker-compose.intel.yml up

Open http://localhost:5000

Configuration

Copy config-example.toml to config.toml and edit as needed. See docs/config.md for all options.

[main]
default_resolution = "HD720"    # QHD, FullHD, HD720, nHD, …
default_framerate = "30/1"
volume = 0.7

[preview.scenes]
type = ["webrtcbin", "hlssink2"]
video_encoder.name = "auto"

Authentication

Optional OIDC authentication (Keycloak, Authentik, Authelia, etc.). Disabled by default — enable with:

[auth]
enabled = true
issuer = "https://auth.example.com/realms/dove"
client_id = "dove-app"
client_secret = "your-secret"

Four roles: User, Supervisor, Outputs, Admin. See docs/auth.md for setup, role details, API tokens, and nginx integration.

Documentation

In-app help is available at /help after starting DOVE. All docs are in the docs/ directory:

SetupInterface overview · Configuration · Authentication

PipelineInputs (uridecodebin3 · playlist · wpesrc · ytdlp · nodecg · testsrc) · Scenes · Outputs · Encoders

Effects & OutputAudio filters · Video filters · Previews

OperationsDebugging

Tech Stack

  • GStreamer 1.26+
  • FastAPI + uvicorn — REST API and WebSocket
  • Nuxt 4 — web frontend
  • Python 3.12+

Development

Running DOVE natively from a Python venv: see docs/install.md.

Contributing

Contributions are welcome! Please open an issue first to discuss larger changes. For bug reports, include the GStreamer version, config, and relevant logs.

Notes

  • Decklink requires a supported Blackmagic Design card and the decklink GStreamer plugin
  • WebRTC previews use announced_ip for the server's public IP — set in config.toml or via ANNOUNCED_IP env var

License

GNU Affero General Public License v3.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dove_video_editor-1.0.0rc1.tar.gz (138.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dove_video_editor-1.0.0rc1-py3-none-any.whl (180.9 kB view details)

Uploaded Python 3

File details

Details for the file dove_video_editor-1.0.0rc1.tar.gz.

File metadata

  • Download URL: dove_video_editor-1.0.0rc1.tar.gz
  • Upload date:
  • Size: 138.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dove_video_editor-1.0.0rc1.tar.gz
Algorithm Hash digest
SHA256 9287a3b381dfec90c5b776e5b0ba29c99c9eea26e781686475bfd2c7f388e41a
MD5 aa4b35b18495aa9f9369777d8a959036
BLAKE2b-256 0ea2766108a58c608f5813345bfa3d4bf052f7401da0f807fbff3672f79ede7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for dove_video_editor-1.0.0rc1.tar.gz:

Publisher: pypi-publish.yml on dorftv/dove

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dove_video_editor-1.0.0rc1-py3-none-any.whl.

File metadata

File hashes

Hashes for dove_video_editor-1.0.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 5fc4514c17dc27619a89866f3b514d9e4e7b72f24a673e3780622a6f5a3e0f9c
MD5 017bd5dbe3ba4e3d02bebcb7541c82bd
BLAKE2b-256 7689579fa02586cfa24d95862326ed4fceaa7a1fb99229839a1f3ee2de2b3d4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dove_video_editor-1.0.0rc1-py3-none-any.whl:

Publisher: pypi-publish.yml on dorftv/dove

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page