NEXT Unreleased In Progress — 2026-07-20
  • fix
    The knobs and the workflow cards can be used without a mouse
    The thirteen knobs and the seventeen workflow cards were plain blocks of layout as far as the keyboard was concerned — you could look at them, but you could not reach them. The knob rack is now one stop on the Tab route rather than thirteen, because it is the main thing on the screen and nobody should have to press Tab thirteen times to get past it. Once you are on it, Left and Right change the value, Up and Down move between knobs, and Home and End jump to the first or last value. Screen readers now say the variable's name and read out the full value rather than the shortened one on the dial. Whichever knob you last used is the one Tab brings you back to. The workflow cards answer Enter and space, announce their name and then their description as two separate things rather than one long run-on, and the video ones you cannot run say so out loud and refuse the keyboard exactly as they already refused the mouse. Nothing about how any of it looks or behaves with a mouse has changed.
  • fix
    The small grey text is dark enough to read
    All the quiet grey captions — the "(optional)" notes beside form fields, hints under inputs, workflow step labels, the trace viewer's column headings — were set in a grey that does not carry enough contrast against the background behind it. On the tan chassis of the hardware theme some of them measured under 2 to 1, which is close to invisible in daylight or on a projector. Eighty-seven of them are now dark enough to clear the accessibility standard for body text, with the worst case measuring 4.6 to 1 and most far better. This was not a search-and-replace: the same grey is doing the opposite job on the dark surfaces — the Glitcher's chrome and the P5 filter drawer — where it already had plenty of contrast and darkening it would have made it worse, so those were measured individually and deliberately left alone. One subtitle in the Glitcher was failing not because of its colour but because it was being faded to 70 per cent on top of it; the fade is gone and the colour now says what it means.
  • fix
    The template name tells you when you have unsaved work
    If you rewrote a prompt in the template editor and then picked a different template, the work was gone, and nothing anywhere on screen had suggested it might be. The chip at the top left now grows a dot the moment you start typing — before you have applied anything, because that is exactly when the work is most easily lost — and hovering it says what the dot means. Loading another template over unsaved changes now asks first, and answering no leaves everything where it was. It only asks when there is genuinely something to lose: switching between templates you have not edited is as quiet as it ever was.
  • fix
    "Composer" is now called "Agents", and new arrivals are pointed at the tools
    The third mode builds a crew of AI personas and runs them together, which is not something the word "Composer" suggests to anybody — we know, because the person writing the manual had the app open and still described it as a prompt composer. It is now called Agents, and the tooltip says what it does. Separately: a brand new install opens in Perform, which shows knobs and a Generate button and hides the tool menus entirely, so there was nothing on the first screen hinting that four menus of tools existed one click away. On a genuinely first run only, a small note now points at the Studio button and says what is behind it. Dismiss it with the button, with Escape, or just by clicking Studio, and it never comes back. It does not take your keyboard or move you anywhere.
  • fix
    The app now tells you when a run has finished, and offers to take you to it
    Starting something in the Studio used to end in silence. You'd open Smart Transform, press Run, and the dialog would close — putting you back on the menu you came from while the picture appeared somewhere else entirely, with nothing said about it. If you couldn't see the screen, or you'd looked away during a run that takes the better part of a minute, there was no signal that it had finished at all, let alone where the output went. Now the output panel carries a line saying what happened — "Smart Transform complete — 4 results", or what went wrong if it failed — screen readers announce it, and a Jump to results button appears one Tab press from wherever you are. Pressing it takes you to the output; ignoring it costs you nothing. Your place is never taken from you: we deliberately don't move you to the results by force, because there's nothing worse than being yanked somewhere else just as you'd started doing something else. The same goes for batches, workflows and failures.
  • fix
    The P5 canvas panel no longer catches your keyboard while it's closed
    The sketch panel was only ever hidden by being made transparent, which means that as far as the keyboard was concerned it was still there. Tabbing to the end of the page walked you through ten controls of a panel that wasn't on screen — Play, Stop, the effect sliders — with no way to tell where you were. That's fixed: while it's closed it's properly gone. And while it's open it now behaves like the dialogs do — opening it takes you into it, Escape closes it, and closing hands you back to whatever you opened it from. Unlike a dialog it doesn't hold onto you, so you can Tab back out to the rest of the app while your sketch keeps running, which is the whole point of it being a panel rather than a window.
  • fix
    The focus outline is thick enough to find — and the code editors have one at all
    The outline marking which control your keyboard is on was a single hairline, which on many screens rendered thinner than the width of one pixel. It's now twice that, matching what the Glitcher already used, so the Suite draws one outline rather than two. Walking the whole screen with the keyboard to check turned up three places with no outline whatsoever — the template editor, the variables box and the P5 code editor, which had been showing a tinted border and a glow so faint it was effectively invisible against the near-white background. They now get the same ring as everything else when you reach them by keyboard, while still looking quiet when you click into them with a mouse.
  • fix
    Every dialog can now be used with the keyboard
    Opening a panel like Smart Transform, Image Studio or Workflows used to leave your keyboard behind: focus stayed on the page underneath, and pressing Tab walked through the app behind the dialog instead of into it. We measured it — with Smart Transform open, forty-eight presses of Tab never once reached one of its controls, because the first of them sat 63rd in line. Escape did nothing either. Now opening a dialog moves you straight into it, Tab cycles within it and wraps around, Escape closes it, and closing returns you to whatever you opened it from. Screen readers announce each dialog by name — previously all twelve of them announced nothing at all, and every close button read out as "times". The one deliberate exception is the terms screen on first sign-in: it holds focus and ignores Escape, because it's a consent step you shouldn't be able to skip by accident.
  • feat
    Text generation now runs on Gemini 3.6 Flash
    Everywhere the app used the fast text model — narrative, quick analysis, fast template generation, the agent panel and demo mode — it's now Gemini 3.6 Flash. It handles multi-step and multimodal work better than the model it replaces while using fewer tokens, and Google charges less for its output. Image generation is unaffected: the picture models are a separate family and stay exactly as they were. The higher-quality Pro option is also unchanged, since there's no new Pro model yet.
  • fix
    The Temperature, Top-K and Top-P sliders are gone
    Google has retired these three settings across its current and future models — they're already ignored, and will start returning an error outright. Rather than leave you three sliders that quietly did nothing, we've removed them. If you were using them to make results more predictable, the replacement is to say so in the prompt itself: an instruction like "answer in one sentence, no preamble" now does the work that lowering the temperature used to. The Music Studio's temperature control is not affected — that's a different system and still works as before.
  • fix
    Your credit balance is correct again after a workflow
    A workflow runs several steps at once, and the badge was showing whichever step happened to answer last rather than the true remaining balance — so it could read five credits higher than what you actually had. It now re-checks with the server when a run finishes. Batches did the same thing, and are fixed too.
  • fix
    Card Style Kit asks for a deck style instead of showing the wrong menu
    This workflow wanted a description of the look you're after, but it was borrowing a field name reserved for the 53-item style-preset picker — so it offered you that menu instead of a text box, and then passed the preset's internal id straight into the prompt. Runs came out asking for art_nouveau, underscore and all. It's now its own field: type the look you want in plain words.
  • fix
    All your knobs are visible in Studio again — ten of thirteen were hidden
    In Studio the knob rack was laid out as one long row that didn't wrap, inside a column far too narrow to hold it. With a typical template that meant three knobs on screen and ten off the side, reachable only by scrolling sideways in a thin strip most people would never think to drag. They now wrap to fill the space, so every variable in your template is visible at once. Studio's knobs are a little smaller than Perform's — Studio is a workbench where the rack shares the column with everything else, while Perform is meant to be read from across a room. Simply wrapping them at Perform's size would have pushed the Connections panel off the bottom of the screen, so this trades a slightly smaller dial for being able to see the whole instrument.
  • fix
    Perform / Studio / Composer stays where you left it
    The mode switcher used to slide a long way across the top bar the moment you used it — several hundred pixels between Studio and Perform, and again into Composer — because it was being pushed around by whatever else happened to be in the bar for that mode. It now sits in a fixed spot next to the app name and doesn't move at all, so the button you just clicked is still under your cursor.
  • fix
    Small things in the top bar that didn't match
    Template Gen had a thinner outline and a paler shadow than every other control beside it, so it read as though it belonged to a different toolbar. The mode switcher's frame was a slightly lighter shade than its neighbours'. The settings and ⋯ buttons were quietly rendering in a different typeface from the rest of the app. And Template Gen never showed its keyboard shortcut — pressing T has always opened it, and every other button in that row advertises its key, so the one that stayed silent looked like it didn't have one. All four now match.
  • fix
    The Studio tools moved up into the top bar
    Template Gen and the Generate / Transform / Automate / Inspect menus used to sit in their own strip below the top bar. On a wide screen that strip was about three-quarters empty, in the same colour as the bar above it — a whole row of window furniture that wasn't carrying anything. They now sit in the top bar itself, next to the template name, and they finally match the rest of the bar's lettering instead of being a shade off it. Nothing moved menus or changed what's in them. On narrower screens the tools still take their own row, because there they genuinely need it.
  • feat
    Sign in with Google and use the suite in the browser — 300 credits a month, free
    The suite now runs as a hosted service at synthograsizer.com, backed by Cloud Run in Montréal. Signing in with Google grants 300 credits per month (text costs ⚡1–5, images ⚡4–15), topped back up on your first visit each month — no rollover, no card, no waiting list. Anonymous visitors can still open the app and play with templates, variables, and knobs; only the AI calls require an account. Local installs are completely unaffected — run it yourself with your own API key and none of this applies.
  • feat
    Your data stays yours — one-click export and account deletion
    The account menu has Download my data (a JSON file of your account, credit history, and generation log) and Delete account, which removes everything immediately — no email round-trip, no waiting period. Prompt text is never stored: the generation log keeps only metadata like which model ran and how long it took, and it ages out automatically on a retention timer. Anything you explicitly save to My creations (see below) is the one exception — it's kept until you delete it, not on a timer, since that's the point of saving it.
  • feat
    Video and music studios are local-only for now
    Veo, Lyria, and Videorama stay off on the hosted tier — a single Veo clip can cost more than a month of everyone's text generation combined. Those tools are hidden rather than teasingly disabled, and the underlying endpoints refuse the call too. Run the suite locally with your own key and they all work as before. A paid tier that unlocks them is designed but not built.
  • fix
    Launch buttons open the real app, not the gated demo
    Every "Launch" call-to-action on the landing and about pages now goes straight to the full suite. The demo build had been the default for public visitors back when there was no way to sign in; the free tier replaces it. The gated demo is still reachable from the suite navigation if you want it.
  • fix
    Backend & Safety panel now talks about credits, not a mythical "instance operator"
    Settings → Backend & Safety carried notices written before the service existed — a generic operator managing config "via environment variables," which means nothing if you're signed in and paying in credits. The panel now branches on whether accounts are on: with accounts, it explains metering and points at the account menu; a plain hosted deployment without accounts keeps the operator wording. The backend note also stopped hardcoding "Google" — it names whichever tier is actually pinned, so a hosted local-model deployment no longer claims Google's usage policy applies to it.
  • fix
    Smart Video Options and Send to Scope no longer show up as dead ends on the hosted service
    Both buttons sat on every image result and led nowhere for free-tier users. Smart Video Options now shows only for admins, matching the admin-only video endpoint it opens; Send to Scope hides for everyone in service mode, admins included — it bridges to a renderer on your own machine, and the underlying endpoint 403s before a hosted request could ever reach one.
  • fix
    Fixed a database migration bug that would have broken every fresh install
    Laying groundwork for a future account-storage feature surfaced a latent bug in the service database's upgrade path: a brand-new database computed itself as version zero and replayed every migration step up to current, even though it had just been built at the current schema in one shot. Harmless while every step was an additive table creation, but the first column-add or backfill would have errored or double-applied on new installs. Fresh databases now stamp straight to the current version with nothing replayed; migrations only run against a database that already has its own older recorded version. Covered by a new test written to fail against the old logic first.
  • feat
    Save any generated image, video, or track to your account — find it later under My creations
    A 💾 Save button now sits beside generated images and videos. Saved items live in Cloud Storage (same Montréal region as everything else), private to your account, and stay there until you delete them — no retention timer, since that's the point of saving something. The account menu's new My creations entry lists everything you've saved with size and date, opens any item on demand, and deletes individually. A quota meter (200 MB by default) keeps things bounded; deleting your account removes every saved item along with it, immediately.
  • feat
    Download button beside Save on generated images — no account needed
    A ⬇ Download button now sits next to Save on every generated image and puts the PNG straight in your downloads folder, named by date and time. Unlike Save it needs no account and works on local installs, because nothing is uploaded — the picture is already in your browser, which is how you're looking at it. One thing worth knowing, and it's why the button says so on hover: generated PNGs carry the prompt that made them in the file's metadata, so sharing the image shares the prompt. Strip the metadata first if that matters for a particular image.
  • feat
    My creations now shows thumbnails
    Saved images get a little preview in the gallery instead of a generic icon. The thumbnail is made in your browser when you save (a small ~256px copy), so opening the list stays a single quick request and previews only load as you scroll to them. Older images saved before this update keep showing an icon; anything you save from now on gets a thumbnail. Videos and tracks still show their icon.
  • feat
    Save a generated template to your library — and load it back in one click
    When you generate a template, there's now a 💾 Save to My creations button, and it comes pre-named: a quick one- or two-word theme name so you can spot it later (e.g. "Neon Cats"). Saved templates live in My creations alongside your images; each one gets a Load template button that drops it straight back into the app. Saving is always a deliberate click — nothing is auto-saved. One honest note: a template is prompt text, so unlike an image (where only the file is stored), saving a template does keep its prompt on our server — that's spelled out in the updated Terms §7, and it only happens when you click Save.
  • fix
    Agent Composer no longer dead-ends with "Launch failed" on the hosted service
    Live multi-agent sessions (the Agent Composer / Agent Studio chat rooms) run on a separate backend that only exists on local installs, so launching one on the hosted service failed with a cryptic chatroom_unavailable error after you'd built the whole session. It now says up front that live sessions are local-only, before you do the work — and the rest of the Composer, including generating agent profiles and templates, keeps working on the hosted service. Running locally? Nothing changes; sessions launch as before.
  • chore
    Terms bumped to v0.3 — saved creations are the first hosted feature that stores generated media server-side
    Everything else about the service is unchanged: prompts are still never stored, and nothing is saved unless you click Save. Since this is a real change in what the service does with your content, signing in again shows the terms interstitial once more so you can review and re-accept — not a bug, just consent catching up to the feature.
  • fix
    Stop a workflow on purpose, keep what you typed, and save anything you go back to
    Three more places the app was unforgiving. A running workflow now has a ■ Stop run button — before, the only way out was closing the window, which quietly cancelled the run; it still stops the run (so nothing keeps spending while you're away) but now says so, and points at the steps that did finish. Parameters you've typed survive stepping back to the template list and returning, per template. And a generation you reopen from the RECENT strip now comes back with Download and Save, instead of being something you could look at but not keep.
  • fix
    Workflow results are no longer lost when you navigate away
    Pressing back from a workflow's results took you to the template list with no way to return — the images were still there, just unreachable. The template list now shows a View results bar for your last run, and it survives closing and reopening the Workflows window; only starting a new run clears it. Each result also gained ⬇ Download and (when signed in) 💾 Save, so a run's output can leave the browser instead of living until the tab closes.
  • feat
    New workflow: Card Style Kit
    Describe a style and get the five reusable pieces of a playing-card deck — a blank card frame and the four suit symbols. They're the input to a deck builder that composites all 40 number cards in code, so every card is pixel-consistent instead of being 40 separate generations that drift apart. Restyling a whole card sheet in one go doesn't work — one image can't keep track of 78 different cards at once, and comes back with the ranks and suits scrambled — so this generates the handful of pieces that actually need an artist's eye and builds the repetitive part exactly.
  • fix
    Smart Transform: keeps your image's shape, shows what a run costs, and defaults to the cheap model
    Aspect ratio now defaults to Match input, so a wide image comes back wide instead of being squeezed into a square. The model picker and the Run button show the credit cost up front (Run Smart Transform — ⚡6), read from the live price list rather than hardcoded, and the default is now Gemini 2.5 Flash at ⚡6 instead of Pro at ⚡17 — Pro is still one click away when you want it. Every result also gets ⬇ Download beside Save, so you can keep a transform without being signed in. And picking a file no longer means picking it twice: the first-upload notice now remembers your file and carries on with it once you accept.
  • fix
    The p5 canvas viewer now actually fills its window
    On a high-DPI screen the sketch rendered at about half the size of its own viewer, with a wide black border, and FIT and FILL looked identical. The viewer was measuring the canvas in hardware pixels while sizing it in layout pixels — on a 2× display that halves everything. Both buttons now do what they say. Batch tiles gained a Download button too.
  • feat
    Save buttons on batch results and Smart Transform results
    Saving to My creations used to work only on a single generated image or video. Now every tile in a batch run gets its own 💾 Save button, and so does every image Smart Transform produces — so you can run a whole batch, look at the grid, and keep just the two you liked. Each save is tied to the specific image it sits under. Batch saves are named after the loaded template, the same as a single generate; Smart Transform saves are named "Smart Transform" (or "Style 1", "Style 2"… when you're comparing styles), since the file you fed in isn't stored anywhere. As before, Save only appears when you're signed in on the hosted service — on a local install nothing is uploaded, so the Download button is the one you want.
  • feat
    AI Studio Tools moved into a menu bar — and Template Gen is front and center
    In Studio mode the block of tool buttons is now a proper menu bar across the top of the app, the way desktop software works: Generate, Transform, Automate, and Inspect menus that drop down when clicked (and switch as you hover across them). It's tidier and gives the canvas more room. Template Gen — the tool that builds a whole new template from a description — is pulled out as a featured button both in the menu bar and next to Generate, since it's where a lot of sessions start. Perform mode stays clean: the menu bar only appears in Studio, exactly like the old tool panel did.
  • feat
    Workflows now run on the website — multi-step image and text pipelines, no install needed
    The ⚡ Workflows tool used to need the local ChatRoom server, so on synthograsizer.com it only showed an "offline" message. It now runs the same workflow engine right in your browser, calling the same generation you already use — so each step counts against your credits exactly like generating an image yourself. Thirteen of the sixteen built-in workflows (style transfer, refinement loops, narrative and comparison pipelines, and more) work on the free tier. The three that generate video (Image → Video, Cinematic Short, Cinematic Animator) are shown but locked, since video generation isn't on the free tier — run Synthograsizer locally, or sign in as an admin, for those. A nice side effect: because the run is checkpointed in your browser, closing the tab mid-workflow no longer necessarily loses it.
  • fix
    Tools that only work on a local install no longer appear on the website
    Synthograsizer began as a desktop tool, and a few of those features were still showing on synthograsizer.com where they could never work: Video Studio and Music Studio (both need a paid tier — the buttons were visible but did nothing when clicked), and the whole Scope panel, which bridges to a renderer running on your own computer. They're now hidden unless your account can actually use them, so admins still see Video and Music. Signed-out visitors were missing these checks entirely and saw everything. Nothing changes if you run Synthograsizer locally — every one of these tools works there exactly as before, which is still the way to get the full toolkit.
  • fix
    The header now always names the template you're actually using — and saved work is named too
    The template name in the header could show the wrong thing: re-picking a template you'd already loaded left the previous name up there, and templates that arrived any other way (the one loaded on your first visit, a generated one, or one loaded from My creations) never updated it at all — so it could sit on "ART PROMPT" over something completely different. It now follows whatever is really loaded. Because templates now carry their name with them, anything you save to My creations is labelled with it instead of just reading "Image". Also removed a dead entry from the template picker — "Blob Simulator" had no template behind it, so choosing it quietly did nothing and left your previous template loaded.
  • fix
    Knobs fit the screen on phones, and hosted users stop being told to run a batch file
    On a narrow screen the knobs used to sit in one long row you had to scroll sideways to reach — with 13 variables, only about two were visible and there was nothing indicating the rest existed. They now wrap into a grid that fits the width, the same way they already did on desktop. Separately, the Workflows panel told everyone to start a local server with launch-all.bat when it couldn't connect, which is impossible advice on synthograsizer.com — it now says plainly that Workflows are a local-install feature. Behind the scenes, the app also stopped firing a save request on every template load that the hosted service always refused.
  • feat
    First visit now opens in Perform mode with the Knobs surface
    A fresh visit now starts in Perform (the minimal live layout) on the Knobs control surface, instead of Studio + D-Pad — a friendlier starting point for live use and MIDI. Both are now the first button in their row. This only changes the starting default: if you've ever picked a layout or control mode yourself, your choice is remembered and still wins — nothing is forced on a return visit.
  • feat
    App bar redesigned — two stacked headers become one 53px row
    Three zones by frequency of use: brand + template chip on the left, a Studio / Perform / Composer segmented control in the center (hardware theme renders it as a latching button bank with a teal-lit active cell; cel-pastel keeps each mode's signature pastel), and a utility cluster on the right — active-profile pill, ⚙ Settings, and a new ⋯ menu holding the theme picker, Taste Profile, What's New, and suite navigation. The old floating suite-navbar pill no longer loads on this page; the MODE/THEME captions, divider chips, and the "CHANGE ▾" label are gone. Content starts ~100px higher.
  • fix
    The header never wraps — labels collapse instead
    One shared control height (34px, 40px on phones) replaces the old 26–38px jumble, and a collapse ladder sheds labels progressively (template name → ellipsis → icon; wordmark hides ≤760px; profile pill becomes its status dot ≤900px) so the bar stays a single row down to 375px. Geometry now lives only in layout-options.css — the themes reskin colors and typefaces but can no longer fight the layout, which is what kept breaking the old bar. Mode buttons expose aria-pressed; edge tooltips no longer clip offscreen.
  • fix
    Connections reads as part of the instrument, not a bolted-on drawer
    The section header now uses the same teal function-label language as Output and AI Studio Tools (hardware theme), the "Hide inactive" pill follows the teal accent instead of the legacy purple, connection chips share the 34px control height, and every status LED is pinned to the chip's right edge so connection state scans as one column.
  • feat
    Videorama — prompt to a finished set of stylized Veo video clips, entirely inside the suite
    New tool at /videorama/ (hub tile added). A Brief Writer (Gemini) expands a plain-language idea into a full production brief — concept, cast, locations, per-shot camera/lighting direction, QC grading criteria — then a checkpointed pipeline (shot list → 4-clip pilot → full render → assembly) drives Veo 3.1 with automated QC grading and retakes. Local-only; ships with 6 starter templates (home-video bloopers, corporate training, mall CCTV, news remotes, public-access cable, art-competition mockumentary) plus era-correct post-processing presets (VHS, Betacam, security time-lapse, ENG news).
  • feat
    Shot Inspector — per-clip editing, keyframe reimagining, and shot extension
    Click any shot to open its Inspector: edit and re-render the prompt, pin/unpin an NB2 keyframe (fixes Veo not holding unusual camera angles), reimagine the keyframe by typed intent, request Gemini-suggested motion variations, extend a shot ~8s further, or spin off a sequel shot from its last frame. A Cast & Locations panel manages the character/location reference sheets directly — regenerate with a tweak, drag-drop upload a replacement, or reset stale keyframes after a cast change.
  • feat
    9:16 vertical format
    Every project now picks a Format (16:9 landscape or 9:16 vertical) at creation — threaded through the brief writer, Veo render calls, NB2 keyframes, and final assembly, so a Snapchat/TikTok-style set renders as genuine portrait video end to end.
  • feat
    Grow and re-cut a project after it's "done"
    Add shots… appends new shots (a new act, in a described direction) to an already-rendered project; Reassemble rebuilds the exported reel from the current shot selection/order/exclusions without re-rendering, versioning each cut (v2, v3, …) rather than overwriting.
  • fix
    Shot review grid no longer restarts playing clips every few seconds
    The dashboard's polling loop was rebuilding every video element on each refresh; it now diffs and patches shot cards in place, and slows to a 30-second idle poll once a project is done — clips keep playing, and the grid doesn't flash while idle.
  • feat
    All Gemini calls migrated to Google's Interactions API — stateless by default
    Text, chat, vision, multimodal template modes, Gemini image generation, and the entire ChatRoom server now use interactions.create (Google's GA interface, June 2026) instead of generateContent. Every request is sent with store=false — nothing is retained server-side at Google (the API's default would keep requests for 55 days). The deprecated google-generativeai / @google/generative-ai SDKs are gone; Veo, Imagen, and Lyria keep their dedicated APIs.
  • feat
    Google API mode switch — legacy generateContent as a safety escape hatch
    The Interactions API has no per-category safety thresholds — filtering is Google-managed. Settings → Backend & Safety → Google API now offers Interactions (current) and generateContent (legacy): legacy mode re-arms the threshold knobs for edgy artistic work and doubles as a wholesale behavioral rollback. The panel greys the knobs out (with an explanation) while Interactions is active; /api/health reports the mode; hosted instances pin it via SYNTH_GOOGLE_API.
  • fix
    Thinking-model output can no longer leak into streamed text
    Interactions streams thinking summaries as separate events; the new stream handlers (backend and ChatRoom) only surface text from real model output, and ChatRoom's truncation auto-continue now keys on status: incomplete. Verified live across text, streaming, JSON mode, chat history, vision, image gen, and web-search grounding in both API modes; new unit suite (tests/test_google_api.py) locks the store=false contract.
  • feat
    The hub finally goes places — and knows when you're local
    Every "Launch" button on the landing page detects a local instance and opens the full app (public/hosted visitors keep the gated demo); Taste Profile, standalone Glitcher, and Agent Chat Room got real linked cards. The shared navbar now appears on every surface (main app and Taste Profile included, as a slim dark pill), lists the full app first, and labels the demo honestly instead of calling it "main".
  • feat
    ⚙ Settings button in the header + honest API-key status
    Global Settings was only reachable through the small API chip (its dedicated button had been lost — the binding was still warning in the console). A visible ⚙ Settings button is back in the header, and the modal now says "✓ API key active on this server" instead of showing an empty field when a key is already configured.
  • perf
    Composer precompiled — no more in-browser Babel or CDN React
    Composer shipped as raw JSX transpiled in the browser via unpkg Babel, with development-build React from a CDN — slow startup, console warnings, and a hard break if the CDN was unreachable. It's now compiled ahead of time (composer.jsxcomposer.js) with production React vendored locally; Composer works fully offline.
  • fix
    Workflows explain themselves when the ChatRoom server is down
    Instead of a dead panel and console spam, the Workflows modal now shows what's wrong, names launch-all.bat as the fix, and offers a working ↻ Retry connection button.
  • feat
    Glitcher joins the family — teal-forward on the suite's dark identity
    New shared design tokens (static/shared/css/tokens.css) define the suite palette; Glitcher was remapped onto it (569 substitutions across both modes) keeping teal as its signature accent on the suite's near-black backgrounds. Also: the duplicate sidebar drop-zone is now a compact "Browse files…" tile, and the unexplained red ✕ is gone.
  • fix
    Direction & Spiral now behave like classic mode inside Studio Mode
    Studio Mode applied both effects to the whole canvas at once — spiral rendered one global swirl instead of per-region vortices, direction was a uniform shift with its smear trails clipped off, and Direction → Random did nothing at all. Both effects now consume the same animated clump regions as classic mode, trails render fully, and random direction works. Verified side-by-side against classic on identical images.
  • feat
    Local-model backend tier — run text generation on your own hardware, unrestricted
    Settings → Backend & Safety now offers two text backends: Google AI (cloud — Google's safety filters and Prohibited Use Policy apply) and Local model (any OpenAI-compatible endpoint: Ollama, LM Studio). On the local tier Synthograsizer applies no content filters of its own — your hardware, your discretion, within the Terms §6 floor. Mixed-mode v1: images, video, and music always generate via Google. Includes endpoint test-connection + model picker (GET /api/backend/local/models), JSON-mode mapping with graceful fallback for servers that reject response_format, and SSE streaming. Hosted instances are pinned to Google and reject config changes.
  • feat
    User-controlled Google safety thresholds
    Per-category selectors (Harassment / Hate speech / Sexually explicit / Dangerous content / Civic integrity) adjust Google's safety_settings within what its API permits — values pass through verbatim and Google's rejections surface honestly at generation time. Saved server-side; precedence: per-request > saved defaults > permissive baseline. Hosted instances clamp per-request settings to the operator's defaults — closing a pre-existing hole where any client could send BLOCK_NONE.
  • feat
    "Report wrongly blocked" + one-click feedback
    Safety blocks are now a typed error end-to-end (SafetyBlockedError → structured 422), so the error panel shows what was blocked and why, with a Report wrongly blocked button: prefilled GitHub issue form (wrongly_blocked.yml) and/or a local report to POST /api/feedback (JSONL on the operator's disk). Prompts are never auto-included — sharing one is an explicit checkbox. General "Send feedback" lives in the settings modal.
  • security
    Phase-1 hardening: SSRF guard, upload consent, retention, rate limiting
    synth_fetch now validates URLs and every redirect hop against private/loopback/metadata addresses with a 10s timeout and 2 MB cap (workflow-engine/urlGuard.js); ANALYZE_URL gets a scheme/private-literal pre-check. First image upload shows a one-time consent notice (images go to Google's APIs — see Terms §7). Hosted mode (SYNTH_HOSTED=1): env-only API key, per-IP rate limiting (429 + Retry-After), and an hourly retention purge (default 30 days). None of this affects a normal local install.
  • feat
    Layout now holds together across phone, tablet, and desktop widths
    The AI Studio Tools grid switched from a hard repeat(3, 1fr) to repeat(auto-fit, minmax(170px, 1fr)), so tiles reflow 3-up → 2-up → 1-up instead of squeezing. The app bar's controls are now grouped into wrap units (Mode / Links / Theme) that drop to a second row as whole groups rather than splitting mid-group, with a stacked-bar breakpoint at ≤1080px and tightened chrome below 600px. Verified clean at 1577 / 1024 / 768 / 375.
  • fix
    Theme picker no longer clips off the right edge at mid widths
    The app-bar mode container had flex-shrink: 0, pushing the Cel-Pastel button past the viewport (partially unclickable) on screens narrower than ~1620px. It now shrinks and wraps to a tidy right-aligned row; dividers that would dangle at a row edge are dropped once wrapping begins.
  • fix
    Connections panel reads as an aligned 2-up chip grid
    MIDI / Scope / Display / API were four full-width rows each hugging the right edge under a left-aligned header — lopsided and disorganized. They now pair into a wrapping grid (Display spans its row for the BG swatch), matching the treatment the Cel-Pastel theme already had.
  • fix
    D-Pad value text shrinks to fit instead of truncating
    The Hardware theme pins the center value to a fixed 38px with nowrap + ellipsis, so longer values like "razor-edge stillness" rendered as "razor-edge st…". The dormant resizeControlValueText() hook is reimplemented as a shrink-to-fit (down to a 14px floor, transition suspended during measurement) and now runs on every value change, not just window resize.
  • fix
    Glitcher Studio & Workflows tiles now carry their theme color
    .btn-glitcher-large and .btn-workflow-large were missing from the Hardware theme's accent block (and Glitcher from Cel-Pastel's icon group), so they fell back to an un-themed grey. Glitcher gets a teal tint matching its brand accent; Workflows joins its Flow-category green. Output action buttons (Copy / Like / Code / Send to Chat) were re-colored from the label tint (~1.9:1) to full text contrast (~9.7:1) so they no longer read as disabled.
  • refact
    Template / narrative / transform prompts rewritten for schema reliability + intent inference
    Every Gemini-facing prompt in backend/services/ gained an explicit "interpret the request" layer: terse user input is expanded into a specific, opinionated reading rather than a generic one, and explicit user constraints (named variables, counts, fixed phrases) are honored over defaults. Narrative generation now requires exactly one self-contained prompt per image in input order; image-variation requires exactly five; smart-transform handles the EMPTY-input and no-reference edge cases. The external-LLM authoring guides (SYSTEM_PROMPT.txt and friends) were de-duplicated against the canonical prompt and corrected — one shipped a stale flat-array schema.
  • refact
    Standalone Glitcher's 8-file CSS @import chain flattened into one file
    The accreted styles/fixes/*.css patch cascade (where .effect-module was redefined 11× across files) was inlined into effect-studio.css in exact load order — byte-identical cascade, verified in-browser. The orphaned quick-fixes.css (referenced nowhere) was deleted.
  • chore
    Trimmed stale scratch dirs, dead bundles, and a leftover design export
    Removed tmp/, scratch/, an empty presentation/ shell, a stray root node_modules/, two superseded ChatRoom build bundles, an orphan tweaks-panel.jsx, a dead generateAgentResponseSync export, and the untracked .design-handoff/ raw export (the curated design-handoff/ remains). REPO_MAP.md updated with each pass.
  • feat
    Agent Studio conversations auto-save on close
    When you close the Agent Studio modal with at least one message in the transcript, the session is persisted to JSON/Agent Studio Logs/<agent-name>-<hash>.json with the same payload shape as the manual ⤓ Export button: goal, mode, agents, messages, workflow chips, artifacts, and composer context if launched from the Composer. Empty sessions (modal opened but no chat) are skipped to keep the folder clean. Content-addressed dedup means closing/reopening the same conversation lands on the same file.
  • feat
    Workflow runs auto-save on completion
    When the Workflow Runner fires workflow_complete (success OR failure), the run is logged to JSON/Workflow Outputs/<workflow-name>-<hash>.json with the template name, run id, params used (image params stripped — they're huge base64 blobs), step results, status, and duration. Failed runs are saved too — useful for diagnostics. The run metadata is captured at _runWorkflow start time so the complete handler has everything it needs.
  • feat
    New /api/save-output generic endpoint — content-addressed JSON backup for any store
    POST {kind, content, filename_hint?}. Files land at Synthograsizer_Output/JSON/<Kind>/<slug>-<6-char sha256>.json. Server-side dedup is content-addressed (id + timestamps stripped before hashing) so repeated saves of the same logical content land on the same file. Supported kinds: agent_profile, taste_profile, agent_log, story_output, workflow_output (last three reserved for follow-ups). Sibling endpoints: GET /api/list-outputs/{kind} for picker UIs (returns lightweight per-kind summary), GET /api/get-output/{kind}/{filename} for full content, DELETE /api/delete-output/{kind}/{filename}.
  • feat
    Auto-backup wired into AgentProfileStore and TasteProfileStore
    Every .save() now fires a best-effort POST to /api/save-output alongside the local localStorage / IndexedDB write. Failures are silent (backend may be offline). Net effect: on first load of the Composer, every built-in agent gets re-saved through the store and back-filled to disk — instant historical backup. The user no longer loses agents to a wiped browser cache.
  • feat
    "Restore from Disk" modals on two surfaces
    Composer Library overflow menu () gets a "📁 Restore from disk…" item that lists every Agent Profiles/*.json with a one-click Restore button per row. The active-profile pill on the Synthograsizer app bar gets the same affordance for Taste Profiles/*.json. The pill now stays visible even when no profile is active (shows "No active profile") so Restore is always reachable.
  • feat
    "Send to Composer" now lands you in the Session room with a pre-built Welcome Session — not an empty Library
    All 4 tuned agents auto-placed in channels 1–4, session named "<profile> · First Session", goal pre-filled, three shared anchors (session_context, tone, output_rules) derived from the profile's tagline + axes + narrative inclinations. One click "Launch Session" and the crew is collaborating.
  • feat
    New TasteProfileStore — persists synthesised profiles, supports multiple personas with an active pointer
    Mirrors AgentProfileStore's shape; full CRUD + subscribe. Lives in localStorage (lightweight at this scale). An artist can keep "Neon Sirens" and "Quiet Erosion" side-by-side and switch which one their agents read from.
  • feat
    Agent bios pull dynamically from the active Taste Profile
    resolveProfileBio() now injects synthetic placeholders — {{taste_tendency}}, {{taste_narrative}}, {{taste_subject}}, {{taste_profile_name}}, {{taste_tagline}}, {{taste_palette_primary/secondary/accent}}, {{taste_axes_summary}} — resolved at render time against whichever profile is active. Switch profiles, every agent re-skins instantly. Profile-defined variables with the same name still win (no surprise overrides).
  • feat
    New Composer command bus action: openSessionFromTasteProfile
    Like openSessionFromRecipe but addresses agents by profileId (deterministic) and accepts sharedAnchors + sessionName in addition to goal. Fired from a one-shot sessionStorage handoff so the redirect from /taste-profile/ is seamless.
  • feat
    Sketch-only Remix path — surgical p5.js edits without regenerating the whole template
    New mode: "p5_edit" endpoint takes the loaded sketch + an instruction and returns RAW JavaScript (no JSON envelope, no schema overhead). The frontend merges the result back, leaving promptTemplate and variables untouched. Surfaced as an inline "Edit scope" toggle in the Remix panel — appears only when the loaded template has a p5.js sketch, defaults to "Sketch only" (the common AV case). Should dramatically reduce timeouts on Pro for visual edits since the model no longer has to re-emit the entire template every time. Includes a REQUIRES_FULL_REMIX escape hatch: if the model decides the edit needs variable / prompt changes it prepends a comment and the frontend prompts the user to switch scope.
  • feat
    Active-profile pill in the Synthograsizer app bar — visible status + one-click profile switcher
    Persistent indicator showing which Taste Profile is currently active (with a green / cherry status dot). Clicking it opens a small menu listing all saved profiles, with switch / clear / "Manage on Taste Profile" actions. Subscribes to TasteProfileStore changes so it stays in sync if the active profile is updated in another tab. Hidden in Composer mode (where the Taste-Profile shortcut already gets hidden). Styled for both Hardware and Cel-Pastel themes.
  • feat
    Second theme: 1990s DIC-animation pastels (Madeline / Care Bears) with 2.5px navy-ink outlines and offset sticker shadows
    Layered on top of the Hardware theme via body.theme-cel-pastel — Hardware remains the default and is unaffected when the picker is set to Hardware
  • feat
    Theme picker in the Synthograsizer app bar (Hardware ↔ Cel-Pastel) and on the Taste-Profile topbar (Dark ↔ Cel-Pastel)
    Persists to localStorage['synthograsizerTheme']; each page gracefully normalizes the other's vocabulary ('dark' ↔ 'hardware') so navigation stays consistent
  • feat
    Cel-Pastel overrides for Studio, Perform, and Composer modes — including the Composer "needs more room" mobile fallback
    Covers the full Taste-Profile surface (steps 1–4): dropzone, pair cards, synth spinner, stat cards, aesthetic axes, palette swatches, tag chips, agent cards, JSON preview
  • feat
    New /synthograsizer/av.html performance surface — knob grid wired for OSC dispatch to Resolume (or any OSC-aware receiver)
    Standard Synthograsizer page is unaffected at runtime; the AV hooks in app.js stay no-op unless window.SYNTH_AV_MODE is set (only by av.html)
  • feat
    Per-variable source-tag mapping — CODE / AI / BOTH
    A variable set to source: 'code' drives OSC only and is masked from the LLM prompt; set to 'ai' fills the prompt without firing OSC; 'both' does both
  • feat
    Throttled OSC dispatch (~30 fps) with per-variable diff suppression and per-knob curve / range / send-type config
    Send types: float, int, trigger. Curves: linear, exponential, logarithmic, custom. Sends only fire when the normalized value actually changes
  • feat
    AV Inspector drawer — live-edit OSC mappings, set host/port, save/load profiles
    Profiles persist via the new AVProfileStore; override edits apply to the running surface immediately without reload
  • feat
    Per-template AV variants under templates-av/ with automatic fallback to templates/
    Same template can have a performance-tuned variant (smaller knob set, OSC-wired) without forking the LLM template. Ships with AV variants for svg-flow-particles, lissajous-lab, synthograsizer-prompt
  • feat
    Resolume preset helpers — clip launch, layer opacity, blend-mode address builders
    Pre-built OSC address templates targeting Resolume's standard composition routing
  • feat
    "Both / Neither" skip button on every taste-pair axis
    Lets the artist leave an axis unconstrained instead of forcing a false choice; the marker biases to 0.5 (range 0.4–0.6) in buildProfile() and the backend prompt was hardened to honor neutral answers
  • feat
    PNG metadata extraction on upload — auto-fills the prompt-history field
    Reads tEXt, iTXt, and zTXt chunks. Knows the formats used by AUTOMATIC1111 (parameters), ComfyUI (workflow / prompt), NovelAI (Description), and generic Comment
  • feat
    GIF first-frame extraction for animated uploads
    Frame is rendered onto a canvas and resized like any still image; lets you train on a GIF without uploading the full animation
  • feat
    Thumbnail remove button — hover-reveal × on each upload preview
    Clean up mistakes without restarting the upload step
  • feat
    Hardened agent-synthesis prompt with explicit schema block + pre-emit validation checklist
    Every agent now reliably ships bioTemplate + variables + anchors; the Send-to-Composer flow has a client-side fallback that synthesizes a minimum-viable template if any field is still missing
  • feat
    Send-to-Composer flow waits for IDB writes to settle before navigating
    Saves all 4 agents, verifies each landed in the cache, then waits ~600 ms before redirecting so the Composer page's loadAllAsync() doesn't race the writes
  • feat
    Deterministic content-fingerprint filenames for auto-saved templates
    Auto-save now derives a 1–3-word slug from the template name (or first source tag) + 6-character SHA-256 of the canonical content. No more timestamp spam in the output directory
  • feat
    Directory scan on save — catches duplicates from older timestamp-named files
    If any existing file in the output directory has the same content fingerprint (even under a different name), the save returns status: exists pointing at the original instead of creating a copy
  • feat
    IndexedDB storage backend for AgentProfileStore
    Replaces synchronous 5 MB-limited localStorage; profile saves/loads are now fully async, eliminating UI jank on large agent rosters with embedded assets
  • feat
    Zero-friction auto-migration from localStorage → IndexedDB on first load
    Existing profiles are transparently moved on first run; no manual export/import step required
  • refact
    Synchronous in-memory cache maintained for backward compatibility
    Legacy call-sites using AgentProfileStore.loadAll() continue to work until they are updated to loadAllAsync()
  • feat
    Anti-repetition intelligence in agent bio resolution
    resolveProfileBio() now re-rolls weighted-random attribute picks up to 3 times to avoid choosing the same value as the previous interaction, producing more varied and dynamic agent behaviour
  • feat
    extractJSONArray() — multi-layer LLM output parser for variable generation
    Replaces fragile regex; gracefully handles markdown code fences, preamble/postamble prose, trailing commas, and single-quoted strings hallucinated by the model
  • fix
    Removed hard-coded 5-minute SSE timeout in WorkflowRunner
    The kill-switch would silently cancel complex long-running tasks (e.g. video generation) at exactly 5 minutes regardless of activity
  • feat
    Dynamic 10-minute inactivity keepalive replaces static timeout
    Timer resets automatically on every workflow_step_start / workflow_step_chunk event; connections only close if the backend goes genuinely silent for 10 minutes
  • fix
    p5.js Template Gen timeout raised to 5 minutes for Pro model
    Pro model generating a full self-contained p5 sketch (lookup maps, 4–7 variables, draw loop) was being cut off by the shared 150s frontend abort; now 300s frontend, 300s backend, 300s workflow-engine path — all three layers aligned
  • feat
    User-editable style instruction field for agent profile generation
    Structural rules (JSON format, variables, anchors) always enforced; tone and style are now customizable per-user
  • feat
    Agent profile edit-in-place — refine existing profiles instead of regenerating from scratch
    Current profile JSON sent alongside the generation prompt so the model can make targeted changes
  • feat
    Collapsible generation instructions panel in Composer Editor room
    State persisted to localStorage; factory-default reset button included
  • style
    Visual context cues when generation instructions are active
    Identity row and Bio template highlighted with gen-context-active state; taste vector bias automatically included when a vector is set
  • feat
    Multi-image reference support for Remix mode
    Attach up to 8 reference images to visually guide template evolution via multimodal prompt assembly
V0.7 Latest 2026-05-08
  • feat
    V6→V7 UI audit — unified app bar, full layout overhaul, Agent Studio re-skin
    Single persistent top bar across all modes; layout-switcher promoted to app-bar-modes; hardware theme fully applied to Agent Studio
  • feat
    Agent Composer complete — 4-room mode (Library → Editor → Session → Run) with live knob control
    Each room is a discrete workflow step; knobs in Run room control live generation parameters in real time
  • feat
    React chatroom: attach-chip CSS and gallery lightbox polish
  • fix
    Consensus quorum now counts only unmuted agents
    Previously, muted agents still counted toward quorum threshold, producing incorrect vote outcomes
  • fix
    Demo mode backend guard — non-demo routes blocked in demo context
  • fix
    Veo 3.1 duration default corrected; multimodal beat continuity restored; workflow outcome now surfaces in UI
  • refact
    Agent Studio CSS modernized — all !important overrides replaced with CSS custom properties and proper cascade ordering
  • feat
    Storyboard: beatNarrative store, hidden/classList overlay, aria-labels, CSS contract doc
  • refact
    Glitcher: removed dead selection fallback; FrameTimer guarded on frame count
V0.6 2026-05-01
  • feat
    Demo mode — Gemini Flash Lite locked in for demo sessions; CTAs route to demo.html
    Full interactive demo with no API key required; rate-limited to lightweight models
  • fix
    Vercel routing corrected — /synthograsizer/ now resolves to full app
  • feat
    Glitcher v2 embedded in Synthograsizer; comprehensive UI overhaul
    Bidirectional bridge between Synthograsizer prompt output and Glitcher effect parameters
  • style
    Storyboard panel fully redesigned to match hardware synth theme
    Cream chassis, warm brown borders, NeoBrutalism shadows, monospace labels throughout
  • fix
    Hardware theme CSS class names corrected across all storyboard components
V0.5 2026-04-25 – 2026-04-30
  • feat
    Suite-wide upgrade to Gemini 3.1 Pro Preview
    Improved output coherence, longer context window, faster multimodal responses across all generation endpoints
  • feat
    Live Gemini token streaming in Agent Studio transcripts
    Tokens appear as they arrive — no more waiting for full response before text renders
  • fix
    Imagen-only fields no longer sent on Gemini generation path
  • feat
    Codenames game template — Layer 1 secret knowledge prototype
    Multi-agent Codenames with roles (spymaster / operative); agents maintain secret layer inaccessible to opponents
  • fix
    Turn-order routing corrected; verbosity defaults tuned; Codenames protocol formalized
  • feat
    Template library, artifact panel with debug console, MIDI lazy-init, Display mode renamed
  • feat
    Beat navigator for story templates — previous/next beat controls with dot-position indicator
  • feat
    Twin Spheres p5.js generative template added
  • feat
    Glitcher Studio modal — P5 FX drawer within Synthograsizer with bidirectional bridge
  • refact
    Landing page consolidated — Synthograsizer as primary product surface
  • chore
    Repo polish — trust signals, cleaned surfaces, docs structure