VEAC (Video Editing as Code) is a declarative, non-Turing-complete domain-specific language for video editing. It compiles .veac source files into FFmpeg commands.
- Declarative: Describe what the video should be, not how to process it
- Non-Turing-complete: Variables and references only — no loops, conditionals, or recursion
- Agent-friendly: Clear syntax and helpful errors for AI-assisted editing
- Single source format:
.veacfiles are the canonical representation
my-project/
├── main.veac
├── shared.veac # Optional: included modules
└── assets/
├── intro.mp4
├── bgm.mp3
└── logo.png
A .veac file consists of top-level declarations:
| Declaration | Purpose | Reference |
|---|---|---|
project |
Output configuration | Project |
asset |
Media file references | Assets |
let |
Variable bindings | Variables & Includes |
include |
Module imports | Variables & Includes |
timeline |
Video composition | Timeline & Tracks |
Within timelines, different track types support different items:
| Item | Tracks | Reference |
|---|---|---|
clip |
video, audio | Clips |
transition |
video | Transitions |
text |
text | Overlays |
image |
overlay | Overlays |
pip |
overlay | Overlays |
subtitle |
overlay | Overlays |
gap |
video, audio | Overlays |
freeze |
video | Overlays |
See Literals for time, color, and number formats.