This repository was archived by the owner on Aug 2, 2026. It is now read-only.
Repository navigation
release: v1.0.0 — out of beta - #29
Closed
jameshgordy wants to merge 17 commits into
Closed
jameshgordy wants to merge 17 commits into
jameshgordy wants to merge 17 commits into
Conversation
Version bump + README: the GUITAR mode section (octave-down front end, red theme, plugin-formats-only) and the 1.0 what's-new. Tag cut after approval. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n duck' The drive strips' output envelope is the AGC peak follower (the clipper saturates at the locked drive amounts), so the stock 250 ms release fell audibly from each pluck's attack peak to the body level. Two new global dials in the master bar reshape that envelope for all drive strips: RELEASE (100 ms-4 s, default 2500 ms — won the 2026-08-01 stem audition) and SUSTAIN (env^(1-s/200) upward compression, default 0 = stock). Greyed until a FUZZ/DIST key is engaged. No IR changes: the AGC wraps the cab convolution. stateVersion 5: pre-v5 sessions and user presets are pinned to an explicit legacy 250 ms (ms->s by exact /1000 division), verified bit-identical to the pre-dial render; the 2500 ms default render is bit-identical to the picked audition variant. auval PASS. Also: tools/fuzz_variants.cpp (bor-fuzz-variants) — the offline harness that rendered the audition grid; drives the shipped params. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… key
- Each ROOM strip gets a FEED column (SUB/15"/12"/57/421/TW) choosing which
voicing layers feed that room's sum ('boomy rooms? drop SUB out'). All-on
default uses the same 0..5 add order as the old shared voicing sum, so
pre-v1 renders are bit-identical; the shared voiceMono buffer is gone.
- Master EQ column at the far right (LOW 90 Hz shelf / LO MID 250 / HI MID
900 / HIGH 3.2 kHz shelf, +/-12 dB), post GLUE pre OUTPUT; skipped
entirely when all dials are neutral. Panel widens 1180 -> 1264.
- Display renames (ids untouched): CLEAN 15", CLEAN 12", FX 57, FX 421,
FX TWEETER — the LOW prefix was premium-engine legacy. README updated to
match, plus FEED/RELEASE/SUSTAIN/EQ docs and a MIDI-mapping FAQ.
- Header key now reads GUITAR MODE with a fuller pitch-down tooltip.
All new params default neutral -> no stateVersion bump needed; verified
default render bit-identical to the pre-change build; auval PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Physical caps from box-of-bass-plugin: fader gets the rounded gradient cap with grip ridges, seat shadow and catchlight; rotaries get the shared machined cap (gradient body, radial sheen, ink rim, bone pointer). Slider geometry/hit-areas untouched; the per-instance accent member is kept so GUITAR mode still recolors. No premium features pulled in. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- DRIVE (25-400 %, default 100 = exact x1) joins RELEASE/SUSTAIN: scales every drive strip's locked clipper amount; same grey-out gating. - Each master-EQ band's frequency is now a 4-way choice param (eq_*_freq, defaults = the fixed v1 centres): click the knob caption (reads e.g. "LO MID · 250") for the menu; append-only choice surface. - Byte-identity fix the probe surfaced: a skewed range's 0..1 roundtrip returns 99.9999924 for the step-1 default 100, so the drive dials' raw values are rounded to their legal grid before deriving factors. Verified: default render bit-identical to the audition files again. auval PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dalone - WIDTH: 0-200 % mid/side image scale between GLUE and OUTPUT, stereo instances only (hidden in mono like the pans). 100 % bypasses the stage entirely — M/S decompose+recompose is not bit-exact even at unity — and the raw value is rounded (skew-roundtrip lesson). Ramped per block. - GUITAR MODE is no longer plugin-only: the Standalone gets the header key too, with a red footer notice 'GUITAR MODE may incur unavoidable lag' while active (no host there to compensate the ~32 ms tracking latency). Verified default render bit-identical; auval PASS; pluginval strictness 8 PASS on the previous build (re-run on this one alongside). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…anel SIMPLE trims the panel to SUB, the clean pair, the FX strips, DRIVE and the master gains (no DI/ROOM strips, EQ column, RELEASE/SUSTAIN or WIDTH) and re-themes the accent to #F2A20C amber (GUITAR red still outranks it). It is a VIEW, not a parameter: hidden controls keep running and presets/sessions still set every value. Persisted as the non-param "uiMode" state property (freqView pattern), resynced by the editor timer on session restore. Visible strips stretch to fill the row. auval PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…inks - 'Box Of Rules (Artist)' PRESET section (always present, under User): the four Tax Wealth, Not Work tones (Main/Verse/Heavy/Heavy Fuzz), fitted from the band's printed stems with the new bor-preset-match tool (renders the DI through the engine, coordinate-descends the preset surface to minimise 1/6-octave log-spectrum distance; mean band errors ~2-3 dB, loudness baked into out_gain). - Analytics.h: anonymous usage events -> POST boxofrules.com/api/v1/events per the site's PLUGIN-ANALYTICS contract (random install_id only, no PII/IP; fire-and-forget; BOR_EVENTS_URL env override for testing). Launch ping once per process; SYS gains the contract-required USAGE STATS opt-out key; verified end-to-end against boxofrules.test (202, row landed in plugin_events). - Footer social links (INSTAGRAM / TIKTOK / BOXOFRULES.COM): direct URLs, clicks counted as link_click events; site link carries utm for GA4. - README 'Does it phone home?' rewritten to disclose the pings + opt-out (contract requirement). auval PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e row All six follow the theme accent (red in GUITAR MODE, amber in SIMPLE); each click still counts as an anonymous link_click event. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The stack is nearly mono by design (lows centred, pans at the detent), so the old mid/side scale had no side to scale: the dial did nothing. Above 100 % it now synthesizes a side signal — 6 ms delayed, 250 Hz low-cut copy of the mid, pushed +L/-R — so the image genuinely wraps wider while the mono fold-down stays EXACTLY the untouched mid (the generated side cancels) and the lows stay centred. Below 100 % still narrows real stereo content; 100 % remains a bit-exact bypass. auval PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-able) Band name stays muted; the clickable frequency part draws in the live theme accent (cyan / GUITAR red / SIMPLE amber). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ial icons - SATURATE: the three FX strips render to a sub-bus that clips as ONE signal (level-compensated tanh, dry/wet) before joining the mix — the cross-mic intermod a printed drive tone has and per-strip drive cannot make. 0 (default) keeps the classic direct routing bit-exactly. - PAD selector at the bottom of every strip (-30 / -12 / 0 dB, default -12 = the classic level exactly): re-references the strip's headroom so a maxed fader is never the ceiling (the TWNW fits were railing the TWEETER at +12). Applied after the -60 silence floor. - WIDTH re-ranged 0-100, default 0: the old 0-100 'narrow' half was dead travel on a mono-by-design stack; the whole dial is now spread amount. (Param semantics change is safe: v1 params were never released.) - Footer socials are now house-style vector icons (semiotics over words): IG / TikTok / YouTube / Spotify / Apple Music / BOR monogram, accent- tinted, theme-following, tooltipped, still counting link_click events. - bor-preset-match gains fx_sat + per-strip pad coordinates. Verified default render bit-identical; auval PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d, README re-jig - SATURATE was near-inaudible: internal levels sit far below tanh's knee, so the shaper ran in its linear region. Now envelope-normalised into the curve (3 ms / 150 ms follower, FuzzChain's AGC trick) and restored on the way out — density at constant loudness, properly gnarly at 100 %. - Box Of Rules (Artist) presets re-fitted with SATURATE + PADs in the search space: mean band errors drop (MAIN 8.7->5.2, HEAVY 10.4->6.2); every tone chose 10-15 % SATURATE and PAD 0 on the TWEETER. - README re-jigged for 1.0: grouped what's-new, artist presets, updated signal flow, screenshot placeholders (assets/ shots pending). auval PASS. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… events, PRIVACY link in SYS, socials via boxofrules.com tracked redirects Events carry their real timestamp so batching costs no accuracy; offline sessions queue until the next flush. User preset names are never sent. Queue file is BlowFish-obfuscated local hygiene, documented in-source. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…creenshots list The BOR_BUILD_TOOLS console targets compile PluginEditor.cpp, which now pulls in Analytics.h's BlowFish queue — they need the module too, or the tool link fails. Also: .gitignore .env -> .env*, docs/SCREENSHOTS.md (the README + wiki shot list for James). v1 gate results: all targets build; auval PASS; pluginval STRICTNESS 10 PASS (first max-strictness run — closes the CLAUDE.md TODO); default render byte-identical to the audition baseline; production endpoints verified live (events 202, tracked redirects 302). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Room FEED defaults: SUB + cleans OFF (anti-boom, per James) — FX-only is the shipped room voice. Pre-v5 sessions are migrated to explicit all-on (their classic feed, bit-identical), and the artist presets with audible rooms pin all-on to preserve their fitted tone. Default render unchanged (rooms ship at the fader floor). - SIMPLE now mutes the hidden strips (DI + rooms) and remembers which were unmuted (session state property); leaving restores exactly those. Preset loads while in SIMPLE re-apply the muting but update the restore set, so the preset's intent lands on exit. User presets no longer carry view state (uiMode/restore list stripped on save & load). auval PASS; default render byte-identical. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
Author
|
Development has moved — Bass Better-er is feature-final at 0.2.2; its successor ships separately. See the README. |
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
v1.0.0 — out of beta. Version bump + README, plus the v1 polish round (2026-08-01/02):
Drive stage: DRIVE (25–400 %), RELEASE (drive-envelope, default 2500 ms — ear-picked on stems; stateVersion 5 pins pre-v5 sessions to the legacy 250 ms), SUSTAIN (upward env compression), SATURATE (combined FX-bus AGC-normalised shaper — cross-mic intermod).
Shaping: master EQ column (4 bands, clickable per-band frequency choices), WIDTH spreader (generated side, mono-fold mathematically exact, 0 = bypass), per-strip PAD (−30/−12/0, default −12 = classic level exactly), per-room FEED selects (all-on = bit-identical classic feed).
UI: SIMPLE/EXPERT view (amber, view-only — presets still set everything), GUITAR MODE in the Standalone (red lag notice), premium F5 fader/knob styling (drawing-only), strip renames (display only — CLEAN 15"/12", FX 57/421/TWEETER), two-tone EQ captions, footer social icons via the site's tracked redirects.
Presets: "Box Of Rules (Artist)" section — Tax Wealth, Not Work (Main/Verse/Heavy/Heavy Fuzz), spectral-fitted to the printed stems with tools/preset_match.cpp (mean band errors ~2–2.5 dB).
Analytics: Source/Analytics.h — anonymous batched usage events per the site contract (encrypted local queue, hourly flush, real timestamps), SYS USAGE STATS opt-out + PRIVACY link, README FAQ discloses everything. Production endpoint verified live (202).
Verification: every DSP change null-tested — default render byte-identical to the pre-round baseline throughout; auval PASS; pluginval strictness 10 PASS; state migration verified bit-exact for legacy sessions.
Merge order per the playbook: #28 first, then retarget this PR to main BEFORE deleting feat/guitar-mode.
🤖 Generated with Claude Code