Skip to main content
← Back to list
01Issue
FeatureOpenExtensionsPublic
AssigneesNone

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:

  1. 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 concat filter, and shifted the second take's .srt by the first take's length to merge the captions.
  2. A music bed under the whole video. media.bed only plays under fast-forwarded waits, and media.music only 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, and amix with normalize=0 so 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 own edit.txt and data, so it's edited as it is today.
  • Output: one .polished.mp4 and .srt, with the captions shifted per take, plus the thumbnail and the video-render data.
  • 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 in edit.txt, rather than only appending.

Background music: a media or render setting that plays the bed under the whole video:

  • bedMode: waits | full (default waits, which is today's behaviour).
  • bedLevel in dB (e.g. −18 when full), plus the existing bedFadeSeconds for 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
02Bog Flow
◉OPEN○TRIAGED○IN PROGRESS○SHIPPED

Open

11/2/2026, 10:45:16 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

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.