affaan-m/ECC · error · SystemExit

--base-video not found

Error message

--base-video not found: {bp}

What it means

apply.py validates the optional --base-video argument before any upload: the user-supplied path does not exist on disk, so the pipeline aborts (via SystemExit) before calling falapi.upload.

Solutions

  1. Correct the --base-video path
  2. Verify the file exists before invoking: ls on the path
  3. Omit --base-video if no base video is needed
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at skills/taste-application/scripts/apply.py:381 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16). Data as JSON: /api/errors/626b30d7781b677c. Report an issue: GitHub.

Appendix: source

Thrown at skills/taste-application/scripts/apply.py:381

    clock = 0.0
    for t in plan:
        i = t["index"]
        s = ShotPlan(
            i, clock, float(t["used"]), stills[i % len(stills)],
            cuts=t["shots"], gen_duration=float(t["gen_duration"]),
        )
        s.prompt = build_prompt(
            spec, grade, style_steer, brief, i, len(plan),
            float(t["gen_duration"]), n_cuts=len(t["shots"]),
        )
        shots.append(s)
        clock += float(t["used"])

    base_video_url = None
    if base_video:
        bp = Path(base_video)
        if not bp.exists():
            raise SystemExit(f"--base-video not found: {bp}")
        base_video_url = falapi.upload(bp)
        print(f"  base video     : {bp.name} (frames pulled per shot timecode)")

    overlay_urls: list[str] = []
    if overlays:
        # Fail before any paid upload: forge() rejects a missing overlay
        # later, which would strand every generated take without a manifest.
        missing = [Path(o) for o in overlays if not Path(o).is_file()]
        if missing:
            raise SystemExit("--overlay not found: " + ", ".join(str(m) for m in missing))
        for o in overlays:
            overlay_urls.append(falapi.upload(Path(o)))
        print(f"  overlays       : {len(overlay_urls)}")

    # Uploads are cached by (path, mtime, size), so the workers racing on the
    # same handful of stills still only pay for each upload once.
    lock = threading.Lock()
    workers = max(1, min(int(concurrency), len(shots)))

View on GitHub (pinned to 8321021c54)