Skip to content

feat: finished-page comic pipeline as default - #29

Merged
phaethix merged 13 commits into
mainfrom
feat/finished-page-pipeline
Jul 30, 2026
Merged

feat: finished-page comic pipeline as default#29
phaethix merged 13 commits into
mainfrom
feat/finished-page-pipeline

Conversation

@phaethix

Copy link
Copy Markdown
Owner

Summary

  • Default render path is now finished pages: plan_comic_pages → deterministic page prompt → one image per page → PDF/webtoon bind (dynamic manga-style pages instead of 2×2 panel collage).
  • Keep legacy panel compose behind INKSTONE_RENDER_MODE=panel_compose / render_mode= for recovery and A/B.
  • Schemas/state (ComicPagePlan*, GeneratedPage, page resume fields), stricter one-shot retry, web progress seeding, and honesty notes in README/ROADMAP.

Test plan

  • ruff check core tests web utils scripts && ruff format --check core tests web utils scripts
  • pytest -q
  • Smoke: generate a short sample with default mode; confirm pages/page_c*_p*.png and comic.pdf
  • Smoke: INKSTONE_RENDER_MODE=panel_compose still produces layout collage PDF
  • Resume mid-run; web job JSON shows render_mode / pages_done / skipped_pages

Made with Cursor

phaethix and others added 13 commits July 30, 2026 15:14
Capture the approved whole-page default path (schema-first plans,
deterministic prompts, explicit panel fallback) without copying the
external studio's agent/file workflow.

Co-authored-by: Cursor <cursoragent@cursor.com>
Break the approved design into TDD tasks for schemas, prompt render,
page planning, pipeline default path, and docs/web wiring.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add the finished_page render path to creative_comic: after extract +
portraits, plan_comic_pages() replaces the storyboard/panel loop, one
image is generated per ComicPagePlan and saved to pages/page_cXXXX_pYYYY.png
(position-derived, not a running counter, so a stale/missing page always
regenerates to the same file instead of risking collision with another
page's filename on partial resume). PDF export runs ExportEngine directly
over the pages dir (no LayoutEngine 2x2 collage). panel_compose keeps the
existing storyboard -> panels -> LayoutEngine path unchanged behind an
explicit render_mode= kwarg (falls back to config.render_mode()).

- _render_fingerprint now includes render_mode + finished_page_size so
  switching modes (or page size) soft-invalidates rendered assets, now
  also clearing pages_done/stale_pages/generated.pages. No
  _PIPELINE_STATE_VERSION bump: that guards the structure fingerprint
  (extract/storyboard cache), which this change does not affect.
- estimate_progress/_progress_label prefer page-based counts when
  state.render_mode == "finished_page"; content-policy rejections land
  in skipped_pages (no L3 on this path, per design).
- tests/conftest.py opts the whole suite into panel_compose by default
  (core.config.render_mode() now defaults to finished_page), since most
  existing FakeChat/FakeImage fixtures assume the storyboard/panel
  contract; tests/test_finished_page_pipeline.py overrides this locally.

Co-authored-by: Cursor <cursoragent@cursor.com>
- Add dark ink-stone hero SVG with comic-panel motif
- Add numbered section header SVGs (Proof → What → Why → How → Use)
- Add pipeline flow diagram SVG
- Restructure content sequence: Proof before claims
- Unify color palette derived from logo (#1B212C ink / #C0412B seal red)
- Replace table of contents with visual section rhythm

Co-Authored-By: Claude <noreply@anthropic.com>
When switching render modes, stale page_01.png files from LayoutEngine
could pollute finished-page PDF export. Scope export to page_c*_p*.png
and remove leftover panel-compose page sheets before calling ExportEngine.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
_start_job now loads render_mode, pages_done, and skipped_pages from
ProjectState when resuming, matching progress seeding behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Cross-chunk page_id collisions no longer skip generation; finished_page
webtoon mode stacks page PNGs; README pipeline blurb updated.

Co-authored-by: Cursor <cursoragent@cursor.com>
@phaethix
phaethix merged commit e2aeefe into main Jul 30, 2026
4 checks passed
@phaethix
phaethix deleted the feat/finished-page-pipeline branch July 30, 2026 16:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant