Release v0.1.0: promote dev to master - #76
Merged
Merged
Conversation
Color-by-temporal-change + colorize-last invariant (levers 3 & 9)
Diffusion/decay art knobs: afterglow, decay-gamma, separable Gaussian, diffuse-weight
…fp-equivalence test
Fix field_reassign_with_default clippy errors in deposit test code (config.rs and simulation/mod.rs); add fold_deposits_sqrt bench case to diffusion_benchmark.rs. All 5 gate steps pass: fmt clean, clippy zero warnings, 800 tests pass, 812 all-features pass, 47 goldens unchanged.
feat: nonlinear deposit curve (lever 4)
feat: per-preset tone curves via render/art-defaults payload (#32)
Add map_brightness_rgb_cycled / map_brightness_cycled that insert a PaletteCycle remap at pass-order step 5 (between the tone curve and the gradient lookup). The public map_brightness_rgb / map_brightness keep their existing signatures and delegate with PaletteCycle::default() so all ~136 existing callers stay byte-identical. colorize_subpixel gains a trailing cycle: PaletteCycle param and routes the base color through the cored fn. frame_buffer.rs and png.rs updated with PaletteCycle::default() stubs (marked TODO(task4)) to keep the build green.
…nd modals Two visual-noise fixes for the windowed overlay experience: 1. Status bar now appears only when paused AND no overlay is open. Previously it showed whenever paused OR any overlay was open, cluttering the screen behind modals. on_pause() no longer expands chrome while an overlay is open, and on_modal_open() leaves the default (Minimal) base chrome collapsed instead of forcing ModalPane (persistent Expanded chrome is unchanged). 2. When a modal panel overlaps the window-frame border, the simulation and frame are wiped to a clean matte behind it so the panel is the sole focus. Panels fully contained within the sim interior leave the sim showing, so the blanking only kicks in when the frame would otherwise poke out as noise. Added FrameBuffer::fill_background and TerminalRenderer::modal_overlaps_frame, wired into both the single- and multi-species render paths.
fix: controls console + tuner polish
Add 11 new figures (Cassiopeia, Sagittarius, Pegasus-Andromeda, Lyra, Aquila, Bootes, Taurus, Draco, Hercules, Canis Major, Perseus) and upgrade Cygnus to a fuller Northern Cross, taking the atlas from 6 to 17. Figures were authored over varying sub-ranges of 0..1, so many rendered as a small central patch. fit_to_grid now uniformly rescales each figure to fill the unit square (preserving proportions) before mapping to the grid, and the margin shrinks 5% to 4%, so every asterism covers far more of the frame.
ControlAction::Restart reused original_seed verbatim, so pressing 'r' always re-picked the same Constellation figure. Re-roll a fresh seed on each manual restart unless a seed was pinned via --seed (then it stays reproducible).
The Constellation preset sets constellation_restamp_floor, but the field has no ProfileOverrides counterpart (capture can't read it back) and is not runtime-editable. Live capture projected it to its default while the preset resolved to its set value, so the dirty guard saw a phantom diff and prompted to discard when swapping away from constellations. Normalize it on both sides in project(), matching trail_modulation/respawn_config.
New FoodConstellation init mode seeds agents from a food/brightness image and keeps that image as a per-frame re-stamp template, so the picture persists like a constellation figure instead of dispersing. The Trademark preset (alias `logo`) applies this to the embedded tslime logo: Ethereal palette, HalfBlock charset, auto-normalized brightness, held crisp via constellation_restamp_floor. Bound to quick-key 4 by default; user keybinds.toml entries override.
Add two opt-in preset-switch announcement styles selectable via --transition <toast|figlet|type>, with an optional --transition-tagline. - TransitionStyle enum (toast default) plumbed end-to-end through CLI, profile overrides, SimConfig, config capture, and RuntimeState. - transition.rs renders FIGLET (4x6 block name, vertical palette gradient, fade envelope, backing scrim so the name reads over any field) and TYPE (letter-spaced typed readout over a frame-clipped dimmed band, blinking caret, near-white ink for legibility, accent underline) as a direct FrameBuffer pass inside render_with_overlay. - Per-preset Preset::tagline(); announce_preset_switch arms the anim. - FIGLET is suppressed when switching to the Trademark (logo) preset (unreadable over the dense logo, redundant since the logo is the brand); TYPE and the plain toast still play. - Multi-species render path does not show transitions yet (noted in README).
Add TransitionStyle::Off variant and make it the default so runtime preset switches no longer emit a toast unless a transition mode is explicitly set (--transition toast/figlet/type).
Looping montage that grows the tslime logo across the four launch presets (Organic, Constellation, Vinescii, Trademark). Optimized GIF at assets/demos/hero.gif.
Replace the static preset stills with six looping GIFs of the live controls: palette cycling, character sets, preset transitions, randomize, live parameter tuning, and the palette editor.
Suppress transient toasts and ambient parameter readouts for a clean field. Start with --no-notifications; toggle live with Ctrl+N. Guards push_msg and the ambient Tune surface; user-opened overlays (controls, palette editor, dashboard, preset transitions) are unaffected. Listed in the README controls table and the ? hints overlay. Recapture the palette, charset, and randomize gallery demos with notifications suppressed.
The capture .mov is limited-range (tv, 16-235), so the GIF encode lifted blacks (~16->31) and read as gray. Expand to full range (tv->pc) and add a gentle saturation/contrast lift so the GIFs match the on-screen vividness. Deeper blacks, richer color across all six demos.
Apply the same color treatment as the gallery: gentle saturation/contrast lift, 256-color palette, and sierra dithering. Deeper blacks and more vivid color in the settled-preset sections; slightly smaller file.
Deeper blacks exposed the terminal's 150-column render striping. Soften it with a faint gaussian blur, drop the contrast stretch (keep the saturation lift), and use full-palette sierra dithering with lighter lossy compression. Bands gone, logo still crisp, color preserved.
Re-encode from the correct montage source so the ending runs vinescii then trademark (the prior re-encode used an earlier cut with the segments reordered). Keeps the de-banding color treatment.
The vinescii opening renders the logo in crisp green ASCII; sharp quantization made the character grid read as striping. Switch to fine bayer dithering (breaks the grid into a soft glow) with a lighter blur and saturation. Keeps deep blacks and the crisp trademark logo.
Same fix as the hero: switch the gallery encode from error-diffusion to fine bayer dithering, which breaks the terminal's per-cell glyph grid into a soft texture instead of exposing it as striping. Keeps the limited->full range fix and color lift.
switch_preset carried transition prefs across a preset swap but not chrome_style, so a bare preset resolve reset chrome to the preset default and silently dropped fullscreen. Presets with a small min_sim_size (Constellation, Trademark) then fell back to the centered 3:2 layout and letterboxed on switch. Carry chrome_style alongside the transition fields so the active display mode survives the swap.
- regenerate randomize (fire), palette-cycle (vinescii, even tempo), charset-cycle, and preset-transition (3 figlets, all fullscreen) - crop every gallery clip to the hero aspect (480x257) for consistent framing - drop the param-tune demo; restructure the gallery to 5 cells
docs: README hero + control-demo gallery (ws6)
Updated the README to clarify the functionality of the terminal screensaver and added details about key bindings and presets.
Updated references section to citations and added software inspirations.
Force LF on golden files via .gitattributes and strip CRLF in the snapshot comparison so the test passes on Windows runners (core.autocrlf rewrites the text golden to CRLF on checkout).
A push to dev while a dev->master PR is open fired both the push and pull_request workflows, running the ubuntu suite twice. Scope push CI to master (post-merge verification); dev and feature branches are covered by their pull request.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promote
devtomasterfor the v0.1.0 release.Included
Test plan
cargo fmt --check,cargo clippy --all-targets --all-features -- -D warningscargo test,cargo test --all-features --lib,cargo test --test visual_regression