From 760da569cff09bd2ea4ca92b2af14c643505d98e Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 4 Apr 2026 13:32:46 +0300 Subject: feat: use photography-only style pool for ultra-realistic mode, update README Ultra-realistic mode now picks from a dedicated realisticStyles pool (DSLR photography, cinematic stills, hyper-realistic) instead of the comicStyles pool. This prevents "comic strip" language from dominating the model's output when photorealistic rendering is requested. README updated: 12-page comic count (5 gallery pages), rendering mode description clarified to show both pools and the 50/50 random default. Co-Authored-By: Claude Sonnet 4.6 --- internal/story/artist.go | 22 +++++++++++++++++++--- internal/version.go | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'internal') diff --git a/internal/story/artist.go b/internal/story/artist.go index 04f459a..8236d2e 100644 --- a/internal/story/artist.go +++ b/internal/story/artist.go @@ -68,8 +68,16 @@ const ( "and environment. NOT a drawing, painting, or illustration. Real-world photo quality.\n" ) -// comicStyles is the pool from which the page style is drawn each run. -// Ultra realistic is selected 90% of the time. +// realisticStyles is the style pool used when ultra-realistic mode is active. +// These descriptions avoid "comic strip" / "illustration" language so the image +// model produces photographic output rather than comic-book artwork. +var realisticStyles = []string{ + "ultra-realistic DSLR photography, cinematic 35mm lens, natural lighting, hyper-detailed textures", + "cinematic still photography, golden-hour lighting, shallow depth of field, photojournalism quality", + "hyper-realistic photography, studio-quality lighting, sharp focus, true-to-life colours and textures", +} + +// comicStyles is the pool used when standard comic style is active. var comicStyles = []string{ "ultra realistic comic strip with photographic detail and dramatic lighting", "classic American comic book with bold ink outlines, halftone dots, and primary colors", @@ -180,7 +188,15 @@ func NewArtist(config *ArtistConfig) *Artist { func (a *Artist) DrawComicPages(storyText, prebuiltBible, titleSlug string, entries []batch.WordEntry) ([]string, error) { style := a.style if style == "" { - style = pickStyle() + // Ultra-realistic mode uses photography-only language so the image model + // produces photographic output. The comicStyles pool contains "comic strip" + // which dominates the model's style interpretation even when the + // renderingRequirement const is present — hence a separate pool is needed. + if a.ultraRealistic { + style = realisticStyles[rand.IntN(len(realisticStyles))] + } else { + style = pickStyle() + } } fmt.Printf(" Comic style: %s\n", style) if a.ultraRealistic { diff --git a/internal/version.go b/internal/version.go index 2350872..9f7173a 100644 --- a/internal/version.go +++ b/internal/version.go @@ -1,3 +1,3 @@ package internal -const Version = "0.16.0" +const Version = "0.17.0" -- cgit v1.2.3