llm-connect/workplans/LLM-WP-0010-text-to-image-rendering.md
tegwick e3ab268d6e
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Has been cancelled
Add square text-to-image rendering with a spend gate
Hall of Helix needs a credential-safe render that returns a provenance
receipt and refuses a batch before the quote exceeds its cap. OpenRouter
is the only client; the model and the live budget stay with the founder.

Assistant: grok
Assistant-Session: 01a11ab6-1534-7d63-8606-662b92a80ed6
2026-10-08 11:01:49 +02:00

73 lines
2.2 KiB
Markdown

---
id: LLM-WP-0010
type: workplan
title: "Text-to-image rendering for square portraits"
domain: agents
repo: llm-connect
status: active
flavor: implementation
owner: grok
topic_slug: text-to-image-rendering
created: "2026-10-08"
updated: "2026-10-08"
related:
- message:ae2b441f-7c38-4cb5-8572-47791cb52456
---
# LLM-WP-0010 — Text-to-image rendering for square portraits
Founder-approved request from fluid-telegram (2026-10-08) for the Hall of
Helix portrait backfill. This workplan adds the facility. It does not choose
the production model or the live budget, and it does not render the hall.
## Library, OpenRouter client, and spend gate
```task
id: LLM-WP-0010-T01
status: done
priority: high
```
`llm_connect.images` renders one square image of at least 1024 pixels and
returns bytes plus a receipt: provider, model, SHA-256 prompt digest, and
cost. A per-call or batch cap requires a quote and refuses before the
provider call. OpenRouter `POST /api/v1/images` is the only client. The model
is required. The API key is resolved the same way as the chat adapter and is
not copied onto the receipt. Contract: `contracts/functional/images.md`.
## CLI
```task
id: LLM-WP-0010-T02
status: done
priority: high
```
`llm-connect image render` writes `--output` or a JSONL `--batch` of
`prompt` / `output_path` lines. Receipts go to stdout. Exit 2 stops a batch
on a cap. Existing files are not replaced unless `--force`.
## HTTP
```task
id: LLM-WP-0010-T03
status: done
priority: high
```
`POST /images` is registered only when `python -m llm_connect.server` is
started with `--image-model`, `--image-max-cost-usd`, and `--image-quote-usd`.
The response is the receipt plus base64 bytes. `/execute` is unchanged.
The process-lifetime batch cap is shared by concurrent requests.
## Live backfill
```task
id: LLM-WP-0010-T04
status: wait
priority: medium
blocking_reason: "The facility is in place and covered by fake-provider tests. A paid Hall of Helix backfill still needs the founder to name the image model, the per-call quote, and the batch cap. fluid-telegram asked not to have that chosen for them."
```
Do not run a paid render, deploy a new image, or write hall portraits until
that choice is recorded. Reply to fluid-telegram used this workplan id.