Skip to content

v1.0.0 - golden goal: 49-filter chain shipped

Choose a tag to compare

@franzenzenhofer franzenzenhofer released this 23 May 23:25

The complete v1.0.0 release of bgbgone. Every issue in epic #1 closed.

Highlights

49 filters spanning tone+colour, spatial, stylise, composite, mask-aware fg, geometric, and mask-shape categories. Backed by Core Image primitives (CIColorControls, CIGaussianBlur, CISepiaTone, CIMorphologyMaximum, CIBlendWithMask, ...). FFmpeg-style chain syntax:

bgbgone in.jpg --filter "bg:grayscale"
bgbgone in.jpg --filter "bg:blur=20"
bgbgone in.jpg --filter "fg:outline=color=#fff:width=4,shadow=blur=10:offset=4,4:opacity=0.5"
bgbgone in.jpg --filter "sepia=0.7,vignette=0.4:1.2"
bgbgone in.jpg --bg image:./bg.jpg --filter "bg:adjust=brightness=-0.15:saturation=0.8; fg:adjust=saturation=1.1"

Run bgbgone --filters-list to see the full catalogue with valid layers, signatures, and one-line docs for each filter.

What changed since v0.2.0

  • 49-filter --filter chain (T5..T53) + DSL parser (T1) + registry (T2) + LayeredImage pipeline (T3) + perf baseline (T4)

  • --filters-list discovery command (T58)

  • HTTP /v1.0/bgbgone accepts a filter form field (T59)

  • JPEG alpha-loss refusal: BGBG_USER_JPEG_ALPHA_LOSS (T57)

  • Breaking: --scale, --position, --feather, --threshold, --mask-only hard-removed (T54/T55/T56). Use the filter equivalents:

    Removed flag Replacement
    --mask-only --filter "fg:matte"
    --feather N --filter "mask:feather=N"
    --threshold N --filter "mask:threshold=N"
    --scale F --filter "fg:scale=F"
    --position X% Y% --filter "fg:translate=dx,dy"

    The server form fields (scale=, position=, feather=, threshold=, channels=alpha) remain for kaleido.ai removebg backward-compat.

Tests

  • 181/181 swift unit tests
  • 209/209 integration tests
  • 0 RED tests remain

Architecture

See docs/design.md for the deferred-flatten pipeline and error model. See docs/filters-out-of-scope.md for explicitly-rejected ideas.