Skip to content

v1.1.0 - README doc polish + per-filter docs + image lints

Choose a tag to compare

@franzenzenhofer franzenzenhofer released this 24 May 00:34

Doc-quality pass on top of v1.0.0 with hard lint guards so removed flags and broken filter syntax can never re-appear in the docs.

README

  • New ## Filter showcase --filter chain in action section (positioned well below Recipes — primary surface stays focused on background removal). Five end-to-end before/after pairs against strict-CC0 fixtures:
    1. Colour-pop — red panda, bg:grayscale with auto-promoted self-as-bg → forest goes monochrome, fur stays vibrant orange
    2. Portrait mode — red panda, bg:blur=60 → silky background, pin-sharp subject
    3. Sticker — corgi on dark navy plate, thick white halo + drop shadow
    4. Vintage backdrop — kingfisher, bg:sepia=1.0,adjust=brightness=-0.3:saturation=0.3; vignette=2:1 → modern subject in front of vintage backdrop
    5. Dramatic composite — corgi on Flying Dragon Nebula, three-stage colour grade with golden outline
  • Edge refinement section migrated to --filter "mask:feather=N" syntax with restored 4-up progression panel + pixel-level close-up zoom.

Per-filter docs

  • 49 per-filter MD pages in docs/filters/ + index + cross-cutting stubs (composition, recipes, colour-spaces, perf).

Hard lints (wired into make release)

  • scripts/lint-readme.sh — fails the build if any removed flag (--feather / --threshold / --mask-only / --scale / --position) re-appears in README (allowing only lines that explicitly document the removal).
  • scripts/lint-docs.sh — extracts every --filter "..." from every markdown file (README, docs/, docs/filters/) and validates each chain against the real parser+registry. 70 chains validated, 0 invalid.

Pipeline

  • Auto-promote source as bg plate when a filter uses the bg layer but no --bg image:... flag is passed. Lets bgbgone in.jpg --filter "bg:grayscale" produce the colour-pop without forcing the user to type --bg image:in.jpg.
  • Outline / glow / shadow / inner-shadow rebuilt so their effects are actually visible: foreground = blendWithMask(subject, tinted_plane, original_mask) instead of compose-over (which the full-frame opaque foreground was hiding).

CLAUDE.md

  • New Hypothesis-then-AI-review for every image asset section mandating: (1) state expected visible change before generation, (2) regen against freshly-built binary, (3) AI-review with vision tool, (4) cmp-diff against baseline.

Tests

  • 181/181 unit
  • 209/209 integration
  • lint-readme + lint-docs both green