This week: prices now come from Stripe, and ImageAI gets a Sprite tab
Four PRs this week: the ChameleonLabs site now pulls prices from Stripe instead of hand-typed copy, the September prompt audit landed in Maestro, and ImageAI got a Sprite tab.
Behind the scenes stuff. Four PRs merged this week, two on the ChameleonLabs site and two in ImageAI. Here's what changed and why.
Prices come from Stripe now
Maestro caught this one for us. In its self-report on September 3 it flagged that the pricing copy on our site didn't match what Stripe was actually charging. That's the kind of drift that happens when a number lives in three places and somebody updates one of them (we've all done it). So #302 fixes the ChameleonLabs half of that issue and ships as v0.6.0.
The public products API (GET /api/public/products/{slug}) now builds its pricing block from a shared lib/pricing module that reads Stripe, with a one-minute cache. The old static price table is still there, but only as a fallback, and the response carries a pricing.source field so you can tell which one you got. We also pulled every dollar amount out of the RAG docs (the docs our assistant retrieves when it answers questions). If the docs don't contain a price, the assistant can't quote a stale one. And /pricing is now a redirect.
One source for prices, and it's the one that bills you.
The September prompt audit landed in Maestro
#300 (v0.5.0) applies the prompt audit we ran on September 1, plus the fixes from its review pass. The biggest change is in the Maestro streaming Lambda. On models that support it, we switched from the old budget_tokens knob to adaptive thinking with output_config.effort. Older model ids keep the legacy request shape, so nothing breaks for them. The full record of what changed, what we deferred and the admin runbook are in the repo notes if you want the details.
ImageAI: one character image in, sprite animations out
This is the fun one. 🤓 ImageAI is our open-source image tool, and #45 (v0.47.0) adds a Sprite tab. You give it one character image. It gives you keyed and stabilized sprite animations, exported for Godot, Aseprite, TexturePacker, GIF and PNG sequences. The character panel handles source intake with transparent-canvas normalization, a chroma plate and an optional turnaround. The same branch also carried a pile of provider, logging, video and main-window fixes that had accumulated while we built it, so those shipped too.
Then #51 followed up with the bugs you only find once people start exporting. Background selection now preserves the export geometry you configured. Before, a 256 x 256 profile in Original mode could hand you a 256 x 144 sprite if the source clip was 16:9. Now Original, Transparent and Solid modes all produce the square you asked for, and all three honor the shared crop, padding, anchor and output-profile settings. Solid-color GIF backgrounds are now exact, and there's a cache freshness check before export.
Have you tried building game sprites from generated art? The Sprite tab is a week old. Tell us what breaks.