Docs
Settings
Every setting in video.json, what you can set for one scene in script.md, and the environment variables.
What goes in video.json?
Every setting is optional. A small file looks like this:
{
"title": "How DNS finds a website",
"theme": "chalk",
"voice": "af_heart",
"music": "calm"
}
| Setting | Default | What it does |
|---|---|---|
title |
from the script | the title shown in the preview |
theme |
paper |
the look. One of paper, clean, chalk, blueprint or midnight |
size |
16:9 |
the size of the video. A platform name (youtube, shorts, tiktok, reels, vertical, instagram, linkedin, square), a ratio (16:9, 9:16, 1:1, 4:5) or WIDTHxHEIGHT |
fps |
30 |
24, 25, 30, 50 or 60 frames per second |
voice |
af_heart |
which voice reads the script. explainroo voices lists all 28 |
speed |
0.9 |
how fast the voice speaks, from 0.6 to 1.6 |
pace |
1 |
how fast the whole video runs, from 0.7 to 1.6. It changes the voice, the pauses and the animations |
music |
true |
true plays the music style that goes with the look. You can also name a style (warm, upbeat, calm, tech, playful), set a volume with { "style": "calm", "volume": 0.35 }, or turn music off with false |
sfx |
true |
sound effects. true, "minimal" or false |
captions |
"auto" |
true, false or "auto". With "auto", tall and square videos get captions and wide ones don’t |
transition |
"auto" |
how scenes change. "auto" uses the change that goes with the look. You can also pick fade, slide, wipe, zoom, brush or cut |
lead |
0.35 |
how many seconds pass before the voice starts in each scene |
hold |
0.7 |
how many seconds the scene stays after the voice has finished |
end |
1.4 |
extra seconds at the very end of the video |
sentenceGap |
0.3 |
the pause between two sentences, in seconds |
paragraphGap |
0.55 |
the pause between two paragraphs in a scene, in seconds |
loudness |
-14 |
how loud the finished video is, in LUFS |
boil |
0 |
how many times per second the hand-drawn lines are redrawn. 0 keeps them still |
watermark |
"explainroo.com" |
the small text in the bottom right corner, or false for none |
images |
none | settings for AI images, like { "model": "best", "style": "..." } |
If a setting is unknown or out of range, explainroo stops and tells you what is wrong.
What can I set for one scene?
In script.md, a scene can have its own settings. They go in braces after the scene name, like ## outro {hold=2 transition=cut}:
| Setting | What it does |
|---|---|
hold |
how long this scene stays after the voice, instead of the video’s hold |
lead |
how long this scene waits before the voice, instead of the video’s lead |
min |
the shortest this scene may be |
transition |
how this scene comes in |
Which environment variables are there?
| Variable | What it does |
|---|---|
OPENROUTER_API_KEY |
your OpenRouter key for AI images. explainroo also reads it from a .env file in the explainroo folder or the project |
EXPLAINROO_CHROME |
where Chrome or Chromium is, in case explainroo doesn’t find it on its own |
EXPLAINROO_FFMPEG, EXPLAINROO_FFPROBE |
where ffmpeg and ffprobe are |
EXPLAINROO_CACHE |
where the speech models are stored, ~/.cache/explainroo by default |
EXPLAINROO_OFFLINE |
set it to 1 and explainroo downloads no model files |
EXPLAINROO_TTS_DTYPE |
the precision of the voice model. fp32 is the default. q8 is a smaller download, but it runs slower |
EXPLAINROO_DEBUG |
set it to 1 to see the full details of an error |