Audio / Video
A full server-side media editing suite powered by FFmpeg. Every verb takes input paths from /root/ and writes output to /root/. All operations return the output path as text.
Probing
| Verb | Modifiers | Description |
|---|---|---|
PROBE MEDIA "/root/v.mp4" | — | Full media metadata — duration, codec, resolution, fps, bitrate, audio streams. Also accepts PROBE VIDEO and PROBE AUDIO. |
PROBE MEDIA "/root/input.mp4" SET ?info
AFTER EMIT ?info(format)(duration) & "s, " & ?info(streams)(0)(codec_name)
Try it ›
Transcoding & Scaling
| Verb | Modifiers | Description |
|---|---|---|
TRANSCODE "/root/src" | AS "format" INTO "/root/dst" | Convert container/codec. Formats: mp4, webm, avi, mkv, mov, gif, mp3, wav, ogg, flac, aac |
SCALE VIDEO "/root/v" | WITH "1920x1080" INTO "/root/out" | Resize resolution. WITH "1280" scales width only, height auto. |
SPEED VIDEO "/root/v" | WITH "2.0" INTO "/root/out" | Change playback speed. 2.0 = double, 0.5 = half. Audio pitch-corrected automatically. |
TRANSCODE "/root/upload.mov" AS "mp4" INTO "/root/ready.mp4" SET ?out
AFTER EMIT ?out
Try it ›
SCALE VIDEO "/root/4k.mp4" WITH "1920x1080" INTO "/root/1080p.mp4" SET ?out
AFTER EMIT ?out
(* Scale width only — height auto to preserve aspect ratio *)
SCALE VIDEO "/root/video.mp4" WITH "1280" INTO "/root/scaled.mp4" SET ?out
AFTER EMIT ?out
SPEED VIDEO "/root/video.mp4" WITH "0.5" INTO "/root/slow.mp4" SET ?out
AFTER EMIT ?out
Trimming
| Verb | Modifiers | Description |
|---|---|---|
TRIM VIDEO "/root/v" | FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out" | Cut a time range from a video |
TRIM AUDIO "/root/a" | FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out" | Cut a time range from an audio file |
TRIM VIDEO "/root/interview.mp4" FROM "00:01:30" TO "00:03:00" INTO "/root/clip.mp4" SET ?out
AFTER EMIT ?out
Try it ›
TRIM AUDIO "/root/podcast.mp3" FROM "00:00:00" TO "00:05:00" INTO "/root/intro.mp3" SET ?out
AFTER EMIT ?out
Joining
| Verb | Modifiers | Description |
|---|---|---|
SPLICE "/root/a" | WITH "/root/b" INTO "/root/out" | Join two clips end to end |
CONCAT MEDIA "/root/a" | WITH "/root/b" INTO "/root/out" | Alias for SPLICE |
SPLICE "/root/clip1.mp4" WITH "/root/clip2.mp4" INTO "/root/joined.mp4" SET ?out
AFTER EMIT ?out
Try it ›
(* Join three clips — chain two SPLICEs *)
SPLICE "/root/a.mp4" WITH "/root/b.mp4" INTO "/root/tmp_ab.mp4" SET ?ab
AFTER SPLICE ?ab WITH "/root/c.mp4" INTO "/root/final.mp4" SET ?out
AFTER EMIT ?out
Frame & clip operations
| Verb | Modifiers | Description |
|---|---|---|
EXTRACT FRAME "/root/v" | AT "HH:MM:SS" INTO "/root/frame.jpg" | Extract one frame as image |
INSERT FRAME "/root/img" | INTO "/root/base.mp4" AT "HH:MM:SS" FROM "3" TO "/root/out" | Insert a still image at timestamp. FROM = display duration in seconds. TO = output path. |
INSERT CLIP "/root/clip" | INTO "/root/base.mp4" AT "HH:MM:SS" FROM "5" TO "/root/out" | Insert a clip at timestamp. FROM = max duration. Add USING "loop" to loop the clip. |
REPLACE FRAME "/root/v" | WITH "/root/img" FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out" | Replace a time range with a still image |
REPLACE CLIP "/root/base" | WITH "/root/clip" FROM "HH:MM:SS" TO "HH:MM:SS" INTO "/root/out" | Replace a time range with another clip |
EXTRACT FRAME "/root/video.mp4" AT "00:00:05" INTO "/root/thumb.jpg" SET ?frame
AFTER EMIT ?frame
Try it ›
(* Insert a title card image at the start for 3 seconds *)
INSERT FRAME "/root/title.jpg" INTO "/root/video.mp4" AT "00:00:00" FROM "3" TO "/root/out.mp4" SET ?out
AFTER EMIT ?out
(* Replace a time range with another clip *)
REPLACE CLIP "/root/base.mp4" WITH "/root/correction.mp4"
FROM "00:01:00" TO "00:01:30" INTO "/root/fixed.mp4" SET ?out
AFTER EMIT ?out
Audio operations
| Verb | Modifiers | Description |
|---|---|---|
EXTRACT AUDIO "/root/v" | INTO "/root/out.mp3" | Extract audio track from video as MP3 |
REPLACE AUDIO "/root/v" | WITH "/root/audio" INTO "/root/out" | Swap video audio track with a new audio file |
NORMALIZE AUDIO "/root/a" | INTO "/root/out" | Normalise loudness (EBU R128) |
SET VOLUME "/root/a" | WITH "1.5" INTO "/root/out" | Adjust volume. 1.0 = original, 1.5 = 50% louder, 0.5 = half |
PITCH AUDIO "/root/a" | WITH "1.2" INTO "/root/out" | Change pitch. 1.0 = unchanged, 1.2 = higher, 0.8 = lower |
MIX AUDIO "/root/a" | WITH "/root/b" INTO "/root/out" | Mix two audio tracks together |
FADE AUDIO "/root/a" | AS "in"|"out" WITH "1.0" FROM "0" INTO "/root/out" | Fade in or out. WITH = duration in seconds. FROM = start offset. |
MUTE VIDEO "/root/v" | INTO "/root/out" | Remove audio track from video |
EXTRACT AUDIO "/root/video.mp4" INTO "/root/audio.mp3" SET ?out
AFTER NORMALIZE AUDIO ?out INTO "/root/clean.mp3" SET ?clean
AFTER EMIT ?clean
Try it ›
MIX AUDIO "/root/voiceover.mp3" WITH "/root/bgmusic.mp3" INTO "/root/mixed.mp3" SET ?out
AFTER EMIT ?out
FADE AUDIO "/root/music.mp3" AS "in" WITH "3.0" FROM "0" INTO "/root/out.mp3" SET ?out
AFTER EMIT ?out
PITCH AUDIO "/root/voice.mp3" WITH "1.15" INTO "/root/pitched.mp3" SET ?out
AFTER EMIT ?out
(* Replace a video's audio with a new track *)
REPLACE AUDIO "/root/video.mp4" WITH "/root/newtrack.mp3" INTO "/root/final.mp4" SET ?out
AFTER EMIT ?out
Video effects
| Verb | Modifiers | Description |
|---|---|---|
OVERLAY "/root/base" | WITH "/root/img" INTO "/root/out" AT "x:y" | Composite an image over video at pixel position. Default: bottom-right 10px margin. |
SUBTITLE "/root/v" | WITH "/root/subs.srt" INTO "/root/out" | Burn in SRT subtitles |
TEXT ON VIDEO "/root/v" | WITH "text" INTO "/root/out" AT "x:y" FROM "36" AS "white" USING "/root/font.ttf" | Burn text. AT = position, FROM = font size, AS = colour, USING = font file (optional) |
BLUR VIDEO "/root/v" | WITH "5" INTO "/root/out" | Box blur. WITH = radius. |
COLOR GRADE "/root/v" | WITH "contrast=1.2:saturation=1.3" INTO "/root/out" | Adjust eq filter params: brightness, contrast, saturation, gamma |
MIRROR VIDEO "/root/v" | AS "horizontal"|"vertical" INTO "/root/out" | Flip. Default: horizontal. |
REVERSE VIDEO "/root/v" | INTO "/root/out" | Play backwards (video and audio) |
FREEZE FRAME "/root/v" | AT "HH:MM:SS" WITH "3.0" INTO "/root/out" | Freeze at timestamp for N seconds, then continue. WITH = freeze duration. |
BOOMERANG VIDEO "/root/v" | INTO "/root/out" | Forward then reverse — Instagram Boomerang effect |
LOOP VIDEO "/root/v" | WITH "3" INTO "/root/out" | Loop N times. WITH = loop count. |
STABILIZE VIDEO "/root/v" | INTO "/root/out" | Two-pass motion stabilisation (vidstab) |
FADE VIDEO "/root/v" | AS "in"|"out" WITH "2.0" FROM "0" INTO "/root/out" | Video fade. AS = direction, WITH = duration, FROM = start offset. |
GREEN SCREEN "/root/v" | WITH "/root/bg" INTO "/root/out" AS "0x00FF00" FROM "0.1" TO "0.05" | Chroma key. AS = key colour, FROM = similarity, TO = blend edge. |
SPLIT SCREEN "/root/a" | WITH "/root/b" INTO "/root/out" AS "horizontal"|"vertical" | Side-by-side or top-bottom split |
TRANSITION VIDEO "/root/a" | WITH "/root/b" INTO "/root/out" FROM "1.0" | Crossfade transition between two clips. FROM = transition duration in seconds. |
OVERLAY "/root/video.mp4" WITH "/root/logo.png" INTO "/root/branded.mp4" AT "10:10" SET ?out
AFTER EMIT ?out
Try it ›
TEXT ON VIDEO "/root/video.mp4"
WITH "Engineering Magic"
INTO "/root/titled.mp4"
AT "x=(w-text_w)/2:y=h-80"
FROM "42"
AS "white" SET ?out
AFTER EMIT ?out
COLOR GRADE "/root/raw.mp4" WITH "contrast=1.3:saturation=1.4:brightness=0.05" INTO "/root/graded.mp4" SET ?out
AFTER EMIT ?out
GREEN SCREEN "/root/shoot.mp4" WITH "/root/background.jpg" INTO "/root/composited.mp4" SET ?out
AFTER EMIT ?out
SPLIT SCREEN "/root/cam1.mp4" WITH "/root/cam2.mp4" INTO "/root/dual.mp4" AS "horizontal" SET ?out
AFTER EMIT ?out
TRANSITION VIDEO "/root/scene1.mp4" WITH "/root/scene2.mp4" INTO "/root/final.mp4" FROM "1.5" SET ?out
AFTER EMIT ?out
BOOMERANG VIDEO "/root/clip.mp4" INTO "/root/boomclip.mp4" SET ?out
AFTER EMIT ?out
FREEZE FRAME "/root/video.mp4" AT "00:00:03" WITH "5.0" INTO "/root/frozen.mp4" SET ?out
AFTER EMIT ?out
STABILIZE VIDEO "/root/shaky.mp4" INTO "/root/stable.mp4" SET ?out
AFTER EMIT ?out
Full production pipeline
(* Trim, add title card, grade, add subtitle, watermark, export *)
TRIM VIDEO "/root/raw.mp4" FROM "00:00:10" TO "00:05:00" INTO "/root/trimmed.mp4" SET ?trimmed
AFTER INSERT FRAME "/root/title.jpg" INTO ?trimmed AT "00:00:00" FROM "3" TO "/root/with_title.mp4" SET ?titled
AFTER COLOR GRADE ?titled WITH "contrast=1.2:saturation=1.3" INTO "/root/graded.mp4" SET ?graded
AFTER SUBTITLE ?graded WITH "/root/subs.srt" INTO "/root/subbed.mp4" SET ?subbed
AFTER OVERLAY ?subbed WITH "/root/logo.png" INTO "/root/final.mp4" AT "10:10" SET ?final
AFTER SHARE ?final SET ?url
AFTER EMIT ?url