diff --git a/helpers/render.py b/helpers/render.py index 0d02cff..430a597 100644 --- a/helpers/render.py +++ b/helpers/render.py @@ -515,7 +515,14 @@ def build_final_composite( inputs: list[str] = ["-i", str(base_path)] for ov in overlays: ov_path = resolve_path(ov["file"], edit_dir) - inputs += ["-i", str(ov_path)] + # VP9/WebM overlays carry alpha as a side-data plane. ffmpeg's native vp9 + # decoder drops it (decodes to yuv420p → opaque), which turns a full-frame + # transparent overlay into an opaque black layer. Force the alpha-aware + # libvpx-vp9 decoder so overlay alpha is honored. + if ov_path.suffix.lower() == ".webm": + inputs += ["-c:v", "libvpx-vp9", "-i", str(ov_path)] + else: + inputs += ["-i", str(ov_path)] filter_parts: list[str] = [] # PTS-shift every overlay so its frame 0 lands at start_in_output