affaan-m/ECC · error · SystemExit

no pack at and no --refs given; nothing to measure

Error message

no pack at {pack_dir} and no --refs given; nothing to measure

What it means

pipeline.py aborts with SystemExit during the mint stage when a remeasure is needed (--remint passed, or grade.json missing in the pack) but no reference media was supplied via --refs. With no existing pack and no inputs there is nothing to measure.

Solutions

  1. Supply reference media: --refs file1.mp4 file2.mov
  2. Verify the pack exists at the expected --root; if it does, drop --remint to reuse it
  3. Re-run mint.py directly to build the pack before pipeline if you want a two-step flow
  4. Check that stylepacks/<genre>/grade.json exists - its absence is what forces the refs requirement

Example fix

// before
python pipeline.py --genre noir --out cut.mov            # fresh genre, no refs
// after
python pipeline.py --genre noir --out cut.mov --refs ref.mp4 ref2.mov
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
pack = Path(root) / genre
if (not (pack / 'grade.json').exists() or remint) and not refs:
    raise SystemExit("supply --refs or drop --remint to reuse existing pack")

Try / catch

try:
    pipeline.main()
except SystemExit as e:
    if 'nothing to measure' in str(e):
        rerun_with_refs(genre, ref_paths)

Prevention

When it happens

Trigger: First run for a genre (no stylepacks/<genre>/grade.json) without --refs; or --remint passed to force re-measurement without supplying new reference media.

Common situations: Running the pipeline on a fresh genre and forgetting --refs; assuming an old pack exists under a different --root than the one passed; deleting the pack directory manually then rerunning without refs.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at skills/taste-application/scripts/pipeline.py:99

        print("[dry run] offline passthrough planned; no stages or files produced")
        return

    pack_dir = Path(a.root) / a.genre
    out = a.out or f"out/FINAL_{a.genre}.mp4"
    # Catch handoff collisions before optional distillation or prop spending.
    from forge import validate_output
    validate_output(Path(out))
    if not a.takes:
        for destination in (Path(out).with_suffix(".generation.json"),
                            Path(out).parent / f"{Path(out).stem}_takes"):
            if destination.exists() or destination.is_symlink():
                raise FileExistsError(f"output already exists; choose a new --out: {destination}")
    dry = ["--dry-run"] if a.dry_run else []

    # ---- 1. mint -------------------------------------------------------
    if a.remint or not (pack_dir / "grade.json").exists():
        if not a.refs:
            raise SystemExit(
                f"no pack at {pack_dir} and no --refs given; nothing to measure"
            )
        _run("mint", ["mint.py", "--genre", a.genre, "--root", a.root,
                      "--refs", *a.refs])
    else:
        print(f"[mint] reusing existing pack at {pack_dir} (--remint to re-measure)")

    # ---- 2. distill ----------------------------------------------------
    if not a.takes and not a.no_distill and (a.remint or not (pack_dir / "spec.json").exists()):
        _run("distill", ["distill.py", "--genre", a.genre, "--root", a.root, *dry])
    elif a.takes:
        print("[distill] skipped (offline passthrough)")
    else:
        print("[distill] reusing existing spec.json or explicitly skipped")

    # ---- 3. optional 3D ------------------------------------------------
    if a.prop:
        _run("mint3d", ["mint3d.py", "--genre", a.genre, "--root", a.root,

View on GitHub (pinned to 8321021c54)