@koda-sl/baker-cli 0.403.0 → 0.405.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4049,6 +4049,21 @@ baker canvas validate my-canvas.json
4049
4049
  # Where `hyperframes` is installed, a static ad's composition is laid out with the copy and
4050
4050
  # fonts the run will draw, over a stand-in picture: two lines of copy that collide are refused
4051
4051
  # as `layout/content_overlap` before any picture is paid for.
4052
+ # At render, each static format reads the picture it is drawn on: a line that would sit on
4053
+ # the subject, a device or the seam of two painted panels moves to the nearest calm room
4054
+ # (never past another line, never more than a few of its own heights), takes white or
4055
+ # near-black when its own colour does not read (WCAG 3:1, display type), or gets a frosted
4056
+ # surface when no room is calm. A region's card or pill is drawn with its words; when the
4057
+ # picture painted that shape anyway, the drawn panel is laid over it (a creative scaffolded
4058
+ # before this draws a panel only there, so its plates stay cached). Copy never shrinks
4059
+ # below 72% of its size. The static-ad template in each creative's `layout-*/` folders is
4060
+ # refreshed on every validate and run.
4061
+ # Before the pictures are painted, the scene's subjects are read (Jev, OpenRouter) for
4062
+ # shapes made to hold copy, each matched to a shape the composition draws (or none); the
4063
+ # plate leaves out only the matched ones, and is told which shapes the designer draws
4064
+ # (`drawn_by_designer` in prompt.plate.json); each answer is kept in
4065
+ # `prompt.compose.json` (`scene_reads`), and one Jev could not give is kept as part of the
4066
+ # picture, so the plate spec does not change between runs.
4052
4067
 
4053
4068
  # 2. Run (executes nodes, writes files to ./canvas/<run_id>/)
4054
4069
  baker canvas run my-canvas.json
@@ -5760,7 +5775,7 @@ It then scaffolds a canvas that draws **only what `prompt.json` holds**; no elem
5760
5775
 
5761
5776
  **Placement formats.** The canvas delivers the platform's full placement set, each format at its exact size, collected under `final` with the format as its label. The set is derived from `--platform` (`meta` → 4:5 + 9:16, `google` → 1:1 + 4:5 + 16:9, `linkedin` → 1:1, `tiktok` → 9:16, `youtube` → 16:9); override it with `--placements <preset>` or `--placements none` for a single format. The report's `aspect_ratio` is the ratio the plates really render at (the model's nearest to the lead format), and `format_plan` says how each format is made.
5762
5777
 
5763
- **After a run** the CLI reads the finished ad back on what makes a static win, not a checklist of elements: every delivered image's pixel shape against its format, and one vision pass that reads each word against the copy `prompt.json` holds and checks one dominant idea, clipping, artifacts, the brand with the logo covered and the concept's mechanisms, with every format shown a second time at phone-feed thumbnail size (240px wide, same call): a lead message unreadable at that size is blocking. A missing logo, CTA or copy is never a finding; a logo that is drawn and broken is. stdout carries `verdict` (`ready` | `ready_with_notes` | `needs_fixes` | `not_reviewed`), `judge` (the per-plate scores) and hints that end with what the run made; the findings are stored on the run as its `review`. `needs_fixes` means the ad is not done even though every node completed; its hints name the cheapest fix (overlapping or unreadable copy is fixed with a smaller `size`, a `highlight` or `sticker` treatment or shorter words, which re-draw the formats from the cached plates). **Render budget:** a static ad gets 3 renders per creative in a chat before the person reacts; the fourth exits 2 with `RENDER_BUDGET` without rendering, and `baker creatives feedback record` or `baker creatives select` on that creative opens a new round. Resuming an interrupted run does not count again, and a run that died only on an outage (timeout, network, a provider that says retry) gives its render back.
5778
+ **After a run** the CLI reads the finished ad back on what makes a static win, not a checklist of elements: every delivered image's pixel shape against its format, and one vision pass that reads each word against the copy `prompt.json` holds and checks one dominant idea, clipping, artifacts, the brand with the logo covered and the concept's mechanisms, with every format shown a second time at phone-feed thumbnail size (240px wide, same call): a lead message unreadable at that size is blocking. A missing logo, CTA or copy is never a finding; a logo that is drawn and broken is. stdout carries `verdict` (`ready` | `ready_with_notes` | `needs_fixes` | `not_reviewed`), `judge` (the per-plate scores) and hints that end with what the run made; the findings are stored on the run as its `review`. `needs_fixes` means the ad is not done even though every node completed; its hints name the cheapest fix (overlapping or unreadable copy is fixed with a smaller `size`, a `highlight` or `sticker` treatment or shorter words, which re-draw the formats from the cached plates). **Render budget:** a static ad gets, per creative in a chat before the person reacts, 3 renders that paint pictures and then 4 re-draws from those pictures; a render that paints nothing (every billed node from the cache) counts as a re-draw. With the pictures spent a re-draw runs only from the cache (the engine's `billed_from_cache_only`), and one that would paint exits 2 with `RENDER_BUDGET` before billing; with both spent every render exits 2 with `RENDER_BUDGET` without rendering, and `baker creatives feedback record` or `baker creatives select` on that creative opens a new round. Resuming an interrupted run does not count again, and a run that died only on an outage (timeout, network, a provider that says retry) gives its render back.
5764
5779
 
5765
5780
  The logo is never a slot to fill: use the company's committed logo in `src/brand/logos/` (per `BRAND.md`), never `baker images logo <domain>`, whose Brandfetch CDN often serves an outdated mark.
5766
5781