Commit 8ae660c
committed
feat: Concept generation in ② + Style/Concept UX gaps (0.11.0)
Style & Concept Phase 2 — the last piece of the dataset-type work.
② Concept generation (the feature):
- shotplan.concept_plan(): 18-shot object set — a 10-shot turnaround reusing the
ATTESTED <sks> Multiple-Angles grammar, 4 framing/scale shots, 4 context shots.
Same Shot model as the character plan with emotion/outfit empty, so the ② table,
YAML plans, apply_wardrobe and generate_shots need no branch.
- plan_for_type()/plan_subject() are one selection seam shared by UI and CLI.
Style returns an EMPTY plan: a look can't be synthesized from a reference, so
②'s buttons are disabled and the table isn't filled with shots you can't make.
Phase-1 gaps found while reviewing:
- ② was fully live for Style — one click billed Gemini for a 24-shot character
turnaround. Same in `cli.py build --dataset-type style`, which now skips the
generation stage outright (regression-tested; it's the money path).
- Isolation defaulted ON for Concept while the SAM3 subject stayed "character".
Subject now follows the type (concept → "object") in ①, ② and the tooltips.
- Character-only ② controls (wardrobe randomizer — OUTFIT_SHOT_KINDS includes
"angle", so it WOULD dress an object's turnaround — and the character-worded
prop-exclusion clause) are hidden/off for Concept; CLI `_dress` no-ops with a
note and --exclude-props/--isolate became per-type tri-state options.
- ③/④/② "Character name" labels + tooltips now follow the type (the name is a
documented no-op for Style/Concept captions).
- ⑤ Inspect reconciles the dataset's recorded metadata.json dataset_type with the
header and warns on a mismatch (the type drives the sample prompt).
- The header type is remembered in .cache/user_settings.json and re-applied on
load, so Style/Concept users stop re-picking every launch.
Prompt bugs fixed while in shotplan.py (they affected the character path too):
- pose/emotion LOCAL prompts emitted a literal "{subject}" — nothing downstream
ever formatted them, so ComfyUI got the braces verbatim in 15 of 24 shots.
- "in {setting}" double-prefixed settings that already carry a preposition
("in in a warmly lit interior room", "in against a plain … background").
- "the same the object/the character" — a leading article is now stripped.
CLI: --dataset-type on `generate` (concept plan; style refused with a clear
message), `build` honours it end to end.
Docs: ARCHITECTURE 0.11.0 — module map, data flow, dataset-type section, five new
gotchas, feature history; Style generation moved to Deferred (permanent, not
pending). README: dataset-type table, CLI examples, intro.
Tests: +49 (270 pass, ruff clean) across tests/test_concept_plan.py,
tests/test_dataset_type_ui.py and tests/test_cli_build_types.py, including a
handler-arity guard against the outputs list drifting.
Verified: ruff + pytest green; Gradio app launched headlessly (config renders,
both change/load handlers wired, 17 outputs each); per-type handler output
checked; CLI help + style refusal exercised. Generation itself is NOT verified —
it needs ComfyUI or a billed key, per the project's no-live-run testing rule.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwnSoX1Z56tyuSgVhvRANJ1 parent 5393a41 commit 8ae660c
10 files changed
Lines changed: 1161 additions & 143 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
38 | | - | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
43 | 44 | | |
44 | 45 | | |
45 | | - | |
46 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
47 | 49 | | |
48 | 50 | | |
49 | 51 | | |
50 | | - | |
51 | | - | |
52 | | - | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
53 | 55 | | |
54 | 56 | | |
55 | | - | |
56 | | - | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
57 | 61 | | |
58 | 62 | | |
59 | 63 | | |
| |||
137 | 141 | | |
138 | 142 | | |
139 | 143 | | |
| 144 | + | |
140 | 145 | | |
141 | 146 | | |
142 | 147 | | |
143 | 148 | | |
144 | 149 | | |
145 | 150 | | |
146 | 151 | | |
| 152 | + | |
147 | 153 | | |
148 | 154 | | |
149 | 155 | | |
| |||
0 commit comments