Relationships
#4330 @swamp/video: informal demos — join multiple takes into one video, and a full-length background music bed
Opened by skunk-ape · 11/2/2026
Problem
Short, informal internal demos (a feature walkthrough for the team, no branding) almost work with @swamp/video today using cards=none. Two things are missing, and both had to be done by hand with ffmpeg after video-recut:
- Joining takes. A quick demo often has a second take, recorded because something was forgotten, that needs to go into the first. Each take is edited on its own, and there's no way to join the results. For one recent demo, I recut both takes, stitched them with ffmpeg's
concatfilter, and shifted the second take's.srtby the first take's length to merge the captions. - A music bed under the whole video.
media.bedonly plays under fast-forwarded waits, andmedia.musiconly under the title card. Informal demos want quiet music the whole way through. I mixed it in by hand: the bed track looped and trimmed to length,volume=0.12(about −18 dB), a 1.5 s fade in and 2 s fade out, andamixwithnormalize=0so the voice stays at the −14 LUFS loudness target.
Proposed solution
Joining takes: a way to render several takes as one video, for example a video-join workflow or a takes input on render:
takes: an ordered list of recording paths. Each take keeps its ownedit.txtand data, so it's edited as it is today.- Output: one
.polished.mp4and.srt, with the captions shifted per take, plus the thumbnail and thevideo-renderdata. - Optional: a short crossfade or a hard cut between takes.
- Stretch goal: insert a take at a point inside another take, e.g. a
[splice <take>]marker inedit.txt, rather than only appending.
Background music: a media or render setting that plays the bed under the whole video:
bedMode: waits | full(defaultwaits, which is today's behaviour).bedLevelin dB (e.g. −18 whenfull), plus the existingbedFadeSecondsfor the fade in and out.- Optional: duck the music while the voice is talking (
sidechaincompress), so it can sit a bit louder in the gaps.
Loudness normalization should run after the mix, so the voice still lands at loudness.
Why
With both of these, an internal demo takes two commands and needs no hand-written ffmpeg: record one or more takes, then run video-edit with cards=none, takes=[...] and bedMode=full.
Upstream repository: https://github.com/swamp-club/swamp-extensions
Environment
- Extension:
@swamp/video@2026.10.30.1 - swamp:
20261102.180642.0-sha.c7a42995 - OS:
linux(x86_64) - Deno:
2.9.8 - Shell:
/usr/bin/bash
Open
No activity in this phase yet.
system commented 11/2/2026, 10:45:16 PM
Classified automatically when this issue was filed.
- Source: Extensions
If you feel this classification is incorrect, add a ripple to tell us so.
Sign in to post a ripple.