nexu-io/open-design · error · SystemExit

missing generated strip for {state}: {strip_path}

Error message

missing generated strip for {state}: {strip_path}

What it means

For each requested state the script expects <decoded_dir>/<state>.png to exist. If a state's strip is absent it cannot be processed, and the run aborts before writing frames-manifest.json.

Source

Thrown at skills/hatch-pet/scripts/extract_strip_frames.py:291

    parser.add_argument("--chroma-key", help="Override chroma key as #RRGGBB.")
    parser.add_argument("--key-threshold", type=float, default=96.0)
    parser.add_argument(
        "--method",
        choices=("auto", "components", "slots"),
        default="auto",
        help="Use connected sprite components when possible, or fixed equal slots.",
    )
    args = parser.parse_args()

    decoded_dir = Path(args.decoded_dir).expanduser().resolve()
    output_dir = Path(args.output_dir).expanduser().resolve()
    chroma_key = load_chroma_key(decoded_dir, args.chroma_key)
    states = parse_states(args.states)
    manifest = []
    for state in states:
        strip_path = decoded_dir / f"{state}.png"
        if not strip_path.is_file():
            raise SystemExit(f"missing generated strip for {state}: {strip_path}")
        manifest.append(
            extract_state(
                strip_path,
                state,
                output_dir,
                chroma_key,
                args.key_threshold,
                args.method,
            )
        )

    (output_dir / "frames-manifest.json").write_text(
        json.dumps(
            {
                "ok": True,
                "chroma_key": {
                    "hex": f"#{chroma_key[0]:02X}{chroma_key[1]:02X}{chroma_key[2]:02X}",
                    "rgb": list(chroma_key),

View on GitHub (pinned to 5be4028344)

Solutions

  1. List available strips: ls <decoded_dir>/*.png.
  2. Generate and decode the missing state's strip first.
  3. Narrow --states to only the states whose strips currently exist.
  4. Confirm --decoded-dir resolves to the right directory.
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path

decoded_dir = Path("<decoded_dir>")
needed = ["idle", "running-right", "running-left"]  # or the full known set
missing = [s for s in needed if not (decoded_dir / f"{s}.png").is_file()]
assert not missing, f"missing strips: {missing}"

Prevention

When it happens

Trigger: Passing --states (or --states all) where one or more named states have no corresponding <decoded_dir>/<state>.png on disk.

Common situations: Running --states all before every strip has been generated/decoded; a state that failed generation but is still listed; decoded-dir pointing at the wrong folder.

Related errors


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/763e53e2aa6a13d5. Report an issue: GitHub.