Skip to content

v0.3.0 — brand your project: 24 features across color, type, output & tooling - #114

Merged
moose25 merged 35 commits into
mainfrom
dev
Jul 7, 2026
Merged

v0.3.0 — brand your project: 24 features across color, type, output & tooling#114
moose25 merged 35 commits into
mainfrom
dev

Conversation

@moose25

@moose25 moose25 commented Jul 7, 2026

Copy link
Copy Markdown
Owner

Consolidated v0.3.0 feature release. Integrates eight feature branches into one proven-coexisting tree (35 commits: every feature commit preserved via --no-ff merges, plus the release and regression-test work).

Highlights

Color & gradients

  • --from <hex> derives a full gradient from one brand color (Oklab)
  • Positioned stops #hex@pos, --gradient-file palette import, --bg-gradient (all 5 renderers)
  • radial / conic directions; 6 new gradients + 3 new themes

Typography & layout

  • --subtitle (logo + tagline), --wrap, --fit, --letter-spacing, --icon, --fill shade

Output & tooling

  • Animated PNG (APNG); -F js|ts|c|cpp|ruby|markdown; --func function form
  • sigil mark (generative logo), sigil gallery (HTML showcase), sigil random, sigil config
  • sigil themes live previews; cargo binstall support

Messaging — reframed around "brand your project in seconds" + a simple→elaborate README gallery.

Quality

  • 94 tests green (70 lib + 16 CLI + 7 golden + 1 doctest); clippy -D warnings clean; release build clean
  • New golden tests pin byte-exact output; new property tests cover gradient sampling
  • All features verified to compose together (e.g. --from + --subtitle + --fill shade + radial)

Closes #109, #110, #111, #112, #113.

See CHANGELOG.md for the full list.

moose25 added 30 commits July 7, 2026 10:37
Shift the story from 'give your CLI a face' to personalizing/branding
your project, and foreground the embed-in-your-code angle. Add status
badges and a little flair to the hero.

Closes #109
Long input previously overflowed the terminal with no recourse. --wrap
<cols> (alias --max-width) greedily packs whole words onto each line,
measuring against the rendered banner width so it accounts for the font.
An oversized lone word still gets its own line. Config key: wrap.

Closes #110
Extends the 'embed a banner in your own code' story beyond
rust/go/python/shell. Each new -F target bakes color in and carries a
one-line 'how to print' comment. Ruby output escapes '#' so banner
content can't trigger string interpolation.

Closes #111
Show that sigil scales from a single flat color and a small font up to a
fully-themed banner. Adds a step-by-step spectrum (each image adds one
thing) and a composite that stacks the same word at three sizes/styles in
one image — literally small and large text together.

Assets are reproducible: assets/generate.sh shells out to sigil -F svg and
assets/compose.py stacks renders onto a shared backdrop.
Gradients: coral, glacier, nebula, moss, peach, twilight (21 -> 27).
Themes: synthwave, arctic, sepia (11 -> 14). Strengthen the theme test to
assert every built-in names a real gradient preset unless it overrides
with explicit colors.

Closes #112
'sigil config path' prints the user and project config files sigil reads
and whether each exists; 'sigil config show' prints the effective merged
settings before CLI flags. Documented in the README Config section, with
integration tests.

Closes #113
Spreads a single color into a soft two-tone Oklab sweep (darker+hue-nudged
low end, through the base, into a lighter high end) so a brand color needs
no hand-picked stops. Precedence: --colors > --from > --gradient. Config
key: from.

Roadmap: --from brand color (issue to be filed at push time).
For any snippet format (rust/go/python/js/ts/c/cpp/ruby/shell), --func
wraps the banner in a self-contained, ready-to-call print_banner function
with the literal baked in. No-op for non-snippet formats. Config key: func.

Roadmap: print-function snippets (issue to be filed at push time).
Places a single icon on the banner's vertically-centered row (width-aware,
so wide emoji align) with a small gap before the text — the icon+wordmark
look. Works across term/SVG/PNG since it lives in the glyph grid. Config
key: icon.

Roadmap: --icon prefix (issue to be filed at push time).
Lays out each character on its own and concatenates the rows with N blank
columns between them (trading FIGlet smushing for even spacing). Config
key: letter_spacing.

Roadmap: letter-spacing (issue to be filed at push time).
Renders the main text and a --subtitle line (in --subtitle-font, default
small), centers each, and stacks them into one banner sharing the gradient,
border, and animation — the logo + tagline pattern in a single render.
Config keys: subtitle, subtitle_font.

Roadmap: --subtitle multi-font stacking (issue to be filed at push time).
Lays the text out in every bundled font and picks the tallest-then-widest
one whose banner fits within N columns (falling back to the narrowest if
none fit), overriding --font. Config key: fit.

Roadmap: --fit auto font (issue to be filed at push time).
--direction radial sweeps outward from the banner's center (a ring), and
conic sweeps around it (a cone). Both plug into the existing per-cell t()
so they work with reverse/cycle and every renderer.

Roadmap: radial/conic direction (issue to be filed at push time).
--colors now accepts an optional @position in [0,1] per stop, e.g.
"#000@0,#fff@0.8", to bias where colors land. Gradient gains
with_positions(); even spacing is unchanged when no positions are given.

Roadmap: positioned gradient stops (issue to be filed at push time).
Instead of only a text summary, 'sigil themes' now paints a small Sigil
banner in each theme (font + gradient + border + effects) when color is on,
matching how 'sigil fonts' previews fonts. Falls back to labels-only when
piped or --no-color.

Roadmap: truecolor themes preview (issue to be filed at push time).
Renders a random font/gradient (and maybe a border/shadow) for the given
text, then prints the exact flags to reproduce it plus a '--seed N'
shortcut. Complements the existing --random flag with a friendlier,
self-documenting one-shot.

Roadmap: sigil random subcommand (issue to be filed at push time).
Wraps the plain (no-color) banner in a triple-backtick fence so it drops
straight into Markdown docs. Aliases: markdown, md.

Roadmap: markdown export (issue to be filed at push time).
Loads gradient stops from a palette file — one '#rrggbb'/'rrggbb' or
decimal 'R G B' per line — so GIMP .gpl palettes and plain hex lists both
work; headers and comments are skipped. Overridden by --colors. Config
key: gradient_file.

Roadmap: palette import (issue to be filed at push time).
[package.metadata.binstall] points at the release archives produced by the
existing release workflow (sigil-<target>.tar.gz, .zip on Windows), so
'cargo binstall sigil' fetches a prebuilt binary instead of compiling.
Documented in the README install section.

Roadmap: distribution polish (issue to be filed at push time).
New mark module + subcommand: hashes the input to seed a SplitMix PRNG,
builds a 5x5 mirror-symmetric grid, and paints the lit cells along a
gradient — a deterministic, unique emblem (same input, same mark) exported
as SVG. Leans into the name: sigil makes you a sigil.

Roadmap: generative sigil mark (issue to be filed at push time).
'-F png --animate sweep' now writes a looping APNG whose gradient shimmers,
using the png crate's animation support (no new deps): 30 frames spanning
one palette pass, delay 1/fps, loops forever. Static -F png is unchanged.

Roadmap: APNG export (issue to be filed at push time).
New RenderOptions.background_gradient + bg_cell_color helper, sampled along
the sweep direction. Wired into every renderer: terminal (per-cell bg
escapes), SVG (per-cell rects), PNG/APNG (per-cell fill), and HTML (per-cell
spans). Spec is a preset name or comma hex stops. Config key: bg_gradient.

Roadmap: background gradient (issue to be filed at push time).
--fill shade replaces glyph characters with block-shade glyphs (░▒▓█)
chosen by the gradient's brightness at each cell, so the gradient reads
even with --no-color or on 256-color terminals. Frame/border chars are
kept; applies to terminal, SVG, and HTML. Config key: fill.

Roadmap: block-shading fill (issue to be filed at push time).
New gallery subcommand writes a self-contained HTML page with your text
rendered as inline SVGs across every font, gradient, and theme (each card
captioned with its flags) — a shareable way to explore combos.

Roadmap: sigil gallery (issue to be filed at push time).
moose25 added 5 commits July 7, 2026 15:52
# Conflicts:
#	README.md
#	src/config.rs
#	src/export.rs
#	src/main.rs
#	src/render.rs
#	tests/cli.rs
Consolidate the v0.3 feature work: bump to 0.3.0 and document all of it in
the changelog (color/gradients, typography/layout, output/tooling, and the
messaging revamp).
Loop-based invariants (no new deps): every preset samples across the full
range in every interp space without panicking and pins its endpoints; and
adjust_t always returns a value in [0,1] under reverse/cycle.
Pin byte-exact raw rendering, JSON/SVG/markdown shape, mark determinism,
shade-without-color, and a composed-features smoke test — so a rendering
refactor can't silently change what users see.
@moose25
moose25 merged commit 2f29225 into main Jul 7, 2026
1 check passed
@moose25
moose25 deleted the dev branch July 8, 2026 00:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Revamp messaging: lead with 'Brand it in seconds'

1 participant