affaan-m/ECC · error · SystemExit

pack ' ' has no stills under - run mint.py first

Error message

pack '{genre}' has no stills under {sp.stills_dir} - run mint.py first

What it means

distill() loads the style pack via pack_mod.load() and calls sp.stills() to list generated still images. If the pack directory contains no stills, it raises SystemExit instructing the user to run mint.py first, because distillation requires reference stills produced by the minting step.

Solutions

  1. Run mint.py for the genre first to generate stills, then re-run distill.py.
  2. Check the stills directory printed in the message and confirm it contains image files (ls the path).
  3. Verify the --root argument points to the same root used when minting the pack.
  4. Confirm the genre name is spelled correctly and matches an existing minted pack.
  5. Re-run mint.py if a previous mint attempt failed before writing stills.

Example fix

// before
python distill.py cinematic
# SystemExit: pack 'cinematic' has no stills under ... - run mint.py first

// after
python mint.py cinematic   # generate stills first
python distill.py cinematic
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path
stills_dir = Path(pack_root) / "stills"
if not any(stills_dir.glob("*.png")):
    raise SystemExit(f"no stills in {stills_dir}; run mint.py first")

Type guard

null

Try / catch

try:
    distill(genre, root)
except SystemExit as exc:
    if "run mint.py first" in str(exc):
        subprocess.run(["python", "mint.py", genre], check=True)
        distill(genre, root)
    else:
        raise

Prevention

When it happens

Trigger: Running `distill.py <genre>` where the pack at sp.stills_dir has zero image files: mint.py was never run for this genre, the wrong --root was passed so load() found an empty/other pack, stills were deleted, or the stills_dir configured in the pack is wrong.

Common situations: Fresh checkout where only distill.py is run; pointing --root at a directory that lacks the pack's outputs; mint.py failed partway earlier leaving no stills; genre name typo resolving to an empty pack.

Related errors


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

Appendix: source

Thrown at skills/taste-distillation/scripts/distill.py:417

    return {
        "source_still": hero.name,
        "detail_score": round(score, 3),
        "mesh_url": mesh_url,
        "file": dest.name,
        "endpoint": falapi.ENDPOINTS["image_to_3d"],
    }


def distill(
    genre: str,
    root: str = "stylepacks",
    max_stills: int = 6,
    props: bool = True,
) -> pack_mod.StylePack:
    sp = pack_mod.load(genre, root=root)
    all_stills = sp.stills()
    if not all_stills:
        raise SystemExit(
            f"pack '{genre}' has no stills under {sp.stills_dir} - run mint.py first"
        )

    chosen = pick_stills(all_stills, max_stills)
    mode = "DRY RUN" if falapi.is_dry_run() else "live"
    print(f"distilling '{genre}' [{mode}] from {len(chosen)}/{len(all_stills)} stills")

    urls = falapi.upload_many(chosen)
    print(f"  uploaded       : {len(urls)} still(s)")

    grounding = build_grounding(sp)
    if grounding:
        print(f"  grounding VLM with {len(grounding.splitlines())} measured facts")
    spec, provenance = describe(urls, grounding=grounding)

    spec["source"] = {
        "pack": genre,
        "generated": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),

View on GitHub (pinned to 8321021c54)