v0.20.0
Images are generated and browsed in the Console itself, every running session fits on one screen, and the inference engine’s instance is bought by the Control Plane from a list of offers — one of which can be Spot.
- Image generation has a pane of its own. Pick a family and a model, add LoRAs and their trigger words, write the prompt and queue the work without going through an agent; the results land in the session’s folder and the usage screen counts the images and the pixels produced. On a deployment with no image engine the pane and its buttons stay hidden.
- An image gallery pane lays a folder’s images out as cards, newest first, with a lightbox that pages through them and folders you can walk. A session’s generated images are one press away, from the operations bar, the layout map, the files tree and a session’s own menu.
- A “Sessions overview” pane shows every session as a card — grouped under its repository,
in family order, carrying its state, its last utterance and, while it runs, the mirror’s
context gauge and token graph. Stopped sessions are shown on request, and the leader keys
g sands lopen it. - An inference engine can be borrowed from another Agent Fleet deployment. The lending side’s super administrator issues a token and records whose GPU it is; the borrowing deployment declares the row and its panel shows it as borrowed from another fleet rather than as an instance of its own. Models stay the lender’s to manage.
- A ComfyUI on the LAN can serve image generation for a native or Docker deployment
(
AF_COMFY_URL). The row is shown as externally managed, without the state and the controls that only mean something for an instance this deployment starts. - The image engine’s instance is chosen from a list of offers, and one of them can be Spot.
ImageOffersinparams/60-enginesdeclares what may be bought and in which order; the Control Plane buys them in turn and falls through to the next when no instance arrives, so a Spot row that cannot be filled no longer means an engine that does not start. Declare nothing and everything is on demand, exactly as before. The llm role takes no Spot row on purpose — a termination notice mid-conversation would cost a cold start. - Settings › Engines shows the offer list, the offer the engine is running on, and the order tried this time. Choosing a class pins the engine to that offer; “Automatic” lets it fall through again.
- Checkpoints published without a VAE are found, and fixed in one press. Some SDXL-family
checkpoints ship the UNet and the text encoders alone: such a row passed every declaration
check, paid the 1-2.5 minute checkpoint switch, and then failed every generation inside
the engine. The deployment now reads the file’s own header, marks the row, refuses to enable
it, and offers one button that takes the family’s VAE in (
stabilityai/sdxl-vaefor SDXL) and attaches it as--vae— without downloading anything when the file is already in the bucket. A row whose header could not be read is left unmarked: “nobody looked” is not “it has none”. - Taking a model in is now four questions, in a pane. What for (a new model / add a part / replace a file), where from, which file, confirm — one question per screen. The row a part joins is chosen from a list, and only the slots that act can use are offered. When the next button is grey, the reason is beside it. The pane can be left open while the download runs and ends where the work ends: the enable press, with any refusal explained there.
- The inference-engine screen is now two: “Inference engines” (mode, state, the GPU rung, uptime) and “Inference engine models” (the catalogue, the ingest, the upstream search). The models screen has tabs for the role (text / image) and for models / LoRAs, and a LoRA’s row leads with the family it was trained against. Tenant settings’ “Inference engine models” is the same screen.
- Searching for a model now shows what you may not do with it, before it is taken in: a Civitai file handed only to logged-in accounts (13 of the top 20 were), non-commercial, credit required, paid / early access, NSFW, scan warnings — and a Hugging Face gate now says which kind it is (“accept the terms” or “the author approves”). Searching for a LoRA lists LoRAs.
- The family and the suggested parameters arrive filled in. The upstream’s own name (“SDXL 1.0”, “Illustrious”) is translated into this deployment’s family and pre-selected, and the Steps / CFG / sampler the author published are put in the form with the sentence they were read from. The values are stored on the model’s row and replace the family’s own recipe field by field at generation time (an empty field keeps the default). Nothing is guessed when the name is not recognised.
- A catalogue row can be kept in order after the fact: where every file came from is recorded and linked per file, a file can be replaced with another, a row can be rebuilt from what is already in the bucket, the context window and the measured VRAM can be edited, a LoRA’s trigger words corrected, and a line of the ingest history removed. Whether a model fits the card is shown before it is taken in.
- A reply can be translated in the mirror without spending a turn, and a turn that used tools can be marked on its final answer.
- Model pickers show each model’s vendor by its brand mark, and no longer raise the phone’s keyboard when they open.
- A managed Codex session resumes by itself once the usage limit resets, as a Claude one already did.
- Image requests can carry a negative prompt, and an edit can say how far from the original it may go.
Improved
Section titled “Improved”- The mirror costs a phone much less. A session that is not moving is no longer redrawn on every poll, the interval widens while nothing changes, and a running turn stops re-sending what has not changed.
- Gallery thumbnails are prepared in advance, asked for only as their cards come into view, and carry a version in their URL, so coming back to a tab does not fetch them again.
- Deleting a working copy is a screen that clears what sits underneath it, and a memo can be copied from its row menu.
- The skills picker listed skills from the wrong directory; it now builds the list from the session’s own working directory.
generate_image’s description said nothing about which route and which checkpoint the request would actually take.
Upgrade notes
Section titled “Upgrade notes”For an ECS deployment running the inference engines, this release moves who buys the GPU instance: the Control Plane buys it directly, and the engine roles’ capacity providers are deleted.
- 🔴 Put this release’s Control Plane image on before the engine stack. The previous Control Plane looks for a capacity provider that the new stack no longer creates.
- 🔴 Update the engine stack with both roles at
mode: offand no engine instance standing, and do it as the round trip the procedure describes: deploy withLlmEnabled=false ImageEnabled=false, deploy this template, then bring them back with=truewhile holding both services at--desired-count 0from a second shell, and finish with oneupdate-service --force-new-deploymenton the Control Plane. Skipping the round trip fails the update on a service name collision and rolls back — cleanly, but the engine table is empty until the Control Plane is redeployed.deploy/aws/ecs/cfn/PARAMETERS-60-engines.md, “Migrating a deployment that is on Managed Instances”, has the commands and the timings. - Eight parameters are retired —
<Role>AllowedInstanceTypes,AcceleratorMemMinMiB,VCpuMin,VCpuMax,MemMinMiB,MemMaxMiB,UseLocalStorage,ScaleInAfter— because the offer carries all of it.standup.shdrops them from a capturedparams/60-engines; a hand-runaws cloudformation deployneeds them removed, since the CLI refuses a key the template does not declare. - Two parameters mean something new.
<Role>StorageGiBnow sizes the instance’s root volume (models land on the instance store when the type has one), and<Role>OfferBudgetSecnow bounds how long the instance that was bought may take to register with the cluster — default 180 → 300.standup.shandupdate.shrepair exactly the old default and leave any other value alone; a hand-run deploy should passLlmOfferBudgetSec=300 ImageOfferBudgetSec=300itself. ImageCapacityOptionTypeis gone; offers replace it. Coming from a deployment that setSPOT, there is nothing to do first — every capacity provider is deleted in this release, so no name is asked for twice. Remove the line fromparams/60-engines.- Spot is opt-in, through a
spotrow inImageOffers. Before writing one: create the Spot service-linked role (AWSServiceRoleForEC2Spot) if the account has never launched a Spot instance, check the Spot quota (L-3819A6DF, whose default is 0), and name more than one instance type in the row — one type alone was refused for capacity.deploy/aws/ecs/cfn/PARAMETERS-60-engines.md, “The offers”, has the format. - Coming from 0.18.0 or earlier: 0.19.0’s notes still apply — every role you use needs
<Role>Enabled=trueinparams/60-enginesbefore the update, and the firstupdate.shon that release also updates20-platform.
Agent CLI pins are unchanged from 0.19.0.