summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-03 23:02:41 +0300
committerPaul Buetow <paul@buetow.org>2026-04-03 23:02:41 +0300
commitb9ee95a66b94c8dc7fca946a2d464ed5d3ad86b1 (patch)
tree1170581406c1bd461430e85d749573152a6596c8
parentb0e8ccfebc5094829054021250f08ddb93c9978e (diff)
feat: comic pipeline v0.10.0 — iterative chaining, title slugs, comics subfolder, 16:9v0.10.0
- Iterative image chaining: each page receives cover + prev page as pixel-level reference (multimodal) so the model copies appearance directly, not from text alone - --story-theme flag overrides random genre pick per run - Gemini now generates a short comic title (---COMIC TITLE--- separator) used as the output slug; all files named <slug>_cover.png, <slug>_page_1.png, etc. - All comic output stored under comics/<slug>/ subdirectory - Aspect ratio changed to 16:9 (ThinkPad X1 Gen 9 screen fit; 16:10 not supported) - Bulgarian language rule moved to top of every prompt for stronger compliance - Dynamic story-specific cover masthead + publisher logo badge matching story genre - --story-theme "a thrilling space..." forces genre without touching random pool Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-rw-r--r--cmd/totalrecall/main.go1
-rw-r--r--comic.pdfbin0 -> 11777107 bytes
-rw-r--r--comic_back.pngbin0 -> 2855395 bytes
-rw-r--r--comic_back_attribution.txt16
-rw-r--r--comic_cover.pngbin0 -> 3169595 bytes
-rw-r--r--comic_cover_attribution.txt16
-rw-r--r--comic_page_1.pngbin0 -> 3061147 bytes
-rw-r--r--comic_page_1_attribution.txt16
-rw-r--r--comic_page_2.pngbin0 -> 3070403 bytes
-rw-r--r--comic_page_2_attribution.txt16
-rw-r--r--comic_page_3.pngbin0 -> 3064316 bytes
-rw-r--r--comic_page_3_attribution.txt16
-rw-r--r--comic_strip_attribution.txt15
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield.pdfbin0 -> 12901628 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_back.pngbin0 -> 3390411 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_back_attribution.txt16
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_cover.pngbin0 -> 3048070 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_cover_attribution.txt16
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_narration.mp3bin0 -> 2360828 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_page_1.pngbin0 -> 3304135 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_page_1_attribution.txt16
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_page_2.pngbin0 -> 3236448 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_page_2_attribution.txt16
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_page_3.pngbin0 -> 3347609 bytes
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_page_3_attribution.txt16
-rw-r--r--comics/astra-stellar-shield/astra-stellar-shield_story.txt25
-rw-r--r--comics/galactic-shield/galactic-shield_narration.mp3bin0 -> 2051396 bytes
-rw-r--r--comics/galactic-shield/galactic-shield_story.txt18
-rw-r--r--comics/void-cats-apple/void-cats-apple.pdfbin0 -> 10911515 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_back.pngbin0 -> 3015626 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_back_attribution.txt16
-rw-r--r--comics/void-cats-apple/void-cats-apple_cover.pngbin0 -> 3007071 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_cover_attribution.txt16
-rw-r--r--comics/void-cats-apple/void-cats-apple_narration.mp3bin0 -> 2452892 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_page_1.pngbin0 -> 2775565 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_page_1_attribution.txt16
-rw-r--r--comics/void-cats-apple/void-cats-apple_page_2.pngbin0 -> 2611038 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_page_2_attribution.txt16
-rw-r--r--comics/void-cats-apple/void-cats-apple_page_3.pngbin0 -> 2635224 bytes
-rw-r--r--comics/void-cats-apple/void-cats-apple_page_3_attribution.txt16
-rw-r--r--comics/void-cats-apple/void-cats-apple_story.txt27
-rw-r--r--internal/cli/command.go1
-rw-r--r--internal/cli/flags.go1
-rw-r--r--internal/image/nanobanana.go66
-rw-r--r--internal/image/search.go9
-rw-r--r--internal/story/artist.go175
-rw-r--r--internal/story/generator.go244
-rw-r--r--internal/story/pdf.go5
-rw-r--r--internal/story/runner.go76
-rw-r--r--internal/version.go2
-rw-r--r--story.txt17
-rw-r--r--story_image_attribution.txt16
-rw-r--r--story_narration.mp3bin0 -> 2485628 bytes
-rw-r--r--story_tts_todo.txt10
54 files changed, 849 insertions, 99 deletions
diff --git a/cmd/totalrecall/main.go b/cmd/totalrecall/main.go
index 5363190..d6abcf5 100644
--- a/cmd/totalrecall/main.go
+++ b/cmd/totalrecall/main.go
@@ -68,6 +68,7 @@ func runCommand(cmd *cobra.Command, args []string, flags *cli.Flags) error {
ImageTextModel: flags.NanoBananaTextModel,
OutputDir: ".",
Style: flags.StoryStyle,
+ Theme: flags.StoryTheme,
NarratorVoice: flags.NarratorVoice,
})
return runner.Run(flags.StoryFile)
diff --git a/comic.pdf b/comic.pdf
new file mode 100644
index 0000000..02b4bf4
--- /dev/null
+++ b/comic.pdf
Binary files differ
diff --git a/comic_back.png b/comic_back.png
new file mode 100644
index 0000000..f97f5f8
--- /dev/null
+++ b/comic_back.png
Binary files differ
diff --git a/comic_back_attribution.txt b/comic_back_attribution.txt
new file mode 100644
index 0000000..fd16f28
--- /dev/null
+++ b/comic_back_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 896x1200
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. All visible text (blurb box, labels, banners) MUST be in Bulgarian Cyrillic script. English text anywhere on the back cover is STRICTLY FORBIDDEN.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (back cover — follow exactly, do NOT change clothing):
+Captain Elara, a middle-aged woman (early 40s), has dark brown hair tied back in a neat, practical ponytail, with a few loose strands framing her face. Her eyes are sharp, intelligent hazel, and her skin tone is light olive, slightly tanned. She possesses an athletic, lean, and agile build. Elara wears a functional dark grey (almost black) fitted spacesuit with subtle dark blue piping along the seams and collar. The suit features a high stand-up collar, long sleeves, and zips up the front with the zipper visible. It has no visible pockets, patches, or emblems. Her footwear consists of...
+
+Generated at: 2026-04-03 22:39:29
diff --git a/comic_cover.png b/comic_cover.png
new file mode 100644
index 0000000..de6cb20
--- /dev/null
+++ b/comic_cover.png
Binary files differ
diff --git a/comic_cover_attribution.txt b/comic_cover_attribution.txt
new file mode 100644
index 0000000..c898574
--- /dev/null
+++ b/comic_cover_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 896x1200
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. All text on the cover (cover lines, banners, labels) MUST be in Bulgarian Cyrillic script. The masthead title must also be rendered in a striking comic-book font.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (cover — follow exactly, do NOT change clothing):
+Captain Elara, a middle-aged woman (early 40s), has dark brown hair tied back in a neat, practical ponytail, with a few loose strands framing her face. Her eyes are sharp, intelligent hazel, and her skin tone is light olive, slightly tanned. She possesses an athletic, lean, and agile build. Elara wears a functional dark grey (almost black) fitted spacesuit with subtle dark blue piping along the seams and collar. The suit features a high stand-up collar, long sleeves, and zips up the front with the zipper visible. It has no visible pockets, patches, or emblems. Her footwear ...
+
+Generated at: 2026-04-03 22:38:20
diff --git a/comic_page_1.png b/comic_page_1.png
new file mode 100644
index 0000000..cff7872
--- /dev/null
+++ b/comic_page_1.png
Binary files differ
diff --git a/comic_page_1_attribution.txt b/comic_page_1_attribution.txt
new file mode 100644
index 0000000..b75b9e0
--- /dev/null
+++ b/comic_page_1_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 896x1200
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. Every word of text inside speech bubbles, thought bubbles, caption boxes, and panel labels MUST be written in Bulgarian Cyrillic script (например: Здравей! Какво правиш? Побързай!). English text anywhere in the panels is STRICTLY FORBIDDEN — use ONLY Bulgarian.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (story page 1 of 3 — follow exactly, do NOT change clothing):
+Captain Elara, a middle-aged woman (early 40s), has dark brown hair tied back in a neat, practical ponytail, with a few loose strands framing her face. Her eyes are sharp, intelligent hazel, and her skin tone is light olive, slightly tanned. She possesses an athletic, lean, and agile build. Elara wears a functional dark grey (almost black) fitted spacesuit with subtle dark blue piping along the seams and collar. The suit features...
+
+Generated at: 2026-04-03 22:38:37
diff --git a/comic_page_2.png b/comic_page_2.png
new file mode 100644
index 0000000..ca18c9f
--- /dev/null
+++ b/comic_page_2.png
Binary files differ
diff --git a/comic_page_2_attribution.txt b/comic_page_2_attribution.txt
new file mode 100644
index 0000000..6bb716c
--- /dev/null
+++ b/comic_page_2_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 896x1200
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. Every word of text inside speech bubbles, thought bubbles, caption boxes, and panel labels MUST be written in Bulgarian Cyrillic script (например: Здравей! Какво правиш? Побързай!). English text anywhere in the panels is STRICTLY FORBIDDEN — use ONLY Bulgarian.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (story page 2 of 3 — follow exactly, do NOT change clothing):
+Captain Elara, a middle-aged woman (early 40s), has dark brown hair tied back in a neat, practical ponytail, with a few loose strands framing her face. Her eyes are sharp, intelligent hazel, and her skin tone is light olive, slightly tanned. She possesses an athletic, lean, and agile build. Elara wears a functional dark grey (almost black) fitted spacesuit with subtle dark blue piping along the seams and collar. The suit features...
+
+Generated at: 2026-04-03 22:38:50
diff --git a/comic_page_3.png b/comic_page_3.png
new file mode 100644
index 0000000..a896766
--- /dev/null
+++ b/comic_page_3.png
Binary files differ
diff --git a/comic_page_3_attribution.txt b/comic_page_3_attribution.txt
new file mode 100644
index 0000000..b3d7ef0
--- /dev/null
+++ b/comic_page_3_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 896x1200
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. Every word of text inside speech bubbles, thought bubbles, caption boxes, and panel labels MUST be written in Bulgarian Cyrillic script (например: Здравей! Какво правиш? Побързай!). English text anywhere in the panels is STRICTLY FORBIDDEN — use ONLY Bulgarian.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (story page 3 of 3 — follow exactly, do NOT change clothing):
+Captain Elara, a middle-aged woman (early 40s), has dark brown hair tied back in a neat, practical ponytail, with a few loose strands framing her face. Her eyes are sharp, intelligent hazel, and her skin tone is light olive, slightly tanned. She possesses an athletic, lean, and agile build. Elara wears a functional dark grey (almost black) fitted spacesuit with subtle dark blue piping along the seams and collar. The suit features...
+
+Generated at: 2026-04-03 22:39:11
diff --git a/comic_strip_attribution.txt b/comic_strip_attribution.txt
new file mode 100644
index 0000000..a5c09a5
--- /dev/null
+++ b/comic_strip_attribution.txt
@@ -0,0 +1,15 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 768x1376
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+A single tall comic strip with 3 vertically stacked panels showing the beginning, middle, and end of the story. Keep all characters visually consistent across panels. Scene based on this Bulgarian vocabulary story:
+
+Всяка сутрин в къщата на баба Елица се събуждаше с едно приятно гъделичкане. Не беше слънцето, което я будеше, а нейната любима 1. котка, Мурка. Мурка обичаше да се катери по завивките, да мърка силно и да бута с глава ръката на Елица, докато момиченцето не отвори очи. "Добро утро, Мурка," прошепна Елица, протягайки се с усмивка. 1. Котето се изви грациозно, разтегна лапи и скочи от легл...
+
+Generated at: 2026-04-03 13:28:31
diff --git a/comics/astra-stellar-shield/astra-stellar-shield.pdf b/comics/astra-stellar-shield/astra-stellar-shield.pdf
new file mode 100644
index 0000000..9c14dbf
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield.pdf
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_back.png b/comics/astra-stellar-shield/astra-stellar-shield_back.png
new file mode 100644
index 0000000..6c273d3
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_back.png
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_back_attribution.txt b/comics/astra-stellar-shield/astra-stellar-shield_back_attribution.txt
new file mode 100644
index 0000000..769bcb9
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_back_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 1376x768
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. All visible text (blurb box, labels, banners) MUST be in Bulgarian Cyrillic script. English text anywhere on the back cover is STRICTLY FORBIDDEN.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (back cover — follow exactly, do NOT change clothing):
+Astra: Middle-aged, long flowing dark brown hair often styled in a high ponytail or half-up, determined emerald green eyes, warm olive skin tone, very athletic and muscular build. She wears a golden armored breastplate with ornate eagle-wing motifs, red form-fitting leggings, golden knee-high boots, and golden wrist gauntlets. A deep blue cape with gold trim flows from her shoulders. Zara: Young adult, short spiky bright purple hair, sharp sky blue eyes, pale skin tone, lean and agile build. Her uniform is a fitted dark grey flight suit with bright cyan accents on the shoulders and cu...
+
+Generated at: 2026-04-03 23:00:03
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_cover.png b/comics/astra-stellar-shield/astra-stellar-shield_cover.png
new file mode 100644
index 0000000..bd7b10a
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_cover.png
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_cover_attribution.txt b/comics/astra-stellar-shield/astra-stellar-shield_cover_attribution.txt
new file mode 100644
index 0000000..01bea79
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_cover_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 1376x768
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. All text on the cover (cover lines, banners, labels) MUST be in Bulgarian Cyrillic script. The masthead title must also be rendered in a striking comic-book font.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (cover — follow exactly, do NOT change clothing):
+Astra: Middle-aged, long flowing dark brown hair often styled in a high ponytail or half-up, determined emerald green eyes, warm olive skin tone, very athletic and muscular build. She wears a golden armored breastplate with ornate eagle-wing motifs, red form-fitting leggings, golden knee-high boots, and golden wrist gauntlets. A deep blue cape with gold trim flows from her shoulders. Zara: Young adult, short spiky bright purple hair, sharp sky blue eyes, pale skin tone, lean and agile build. Her uniform is a fitted dark grey flight suit with bright cyan accents on the shoul...
+
+Generated at: 2026-04-03 22:58:32
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_narration.mp3 b/comics/astra-stellar-shield/astra-stellar-shield_narration.mp3
new file mode 100644
index 0000000..872fcd1
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_narration.mp3
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_page_1.png b/comics/astra-stellar-shield/astra-stellar-shield_page_1.png
new file mode 100644
index 0000000..ce7ae13
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_page_1.png
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_page_1_attribution.txt b/comics/astra-stellar-shield/astra-stellar-shield_page_1_attribution.txt
new file mode 100644
index 0000000..af6ad50
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_page_1_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 1376x768
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. Every word of text inside speech bubbles, thought bubbles, caption boxes, and panel labels MUST be written in Bulgarian Cyrillic script (например: Здравей! Какво правиш? Побързай!). English text anywhere in the panels is STRICTLY FORBIDDEN — use ONLY Bulgarian.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (story page 1 of 3 — follow exactly, do NOT change clothing):
+Astra: Middle-aged, long flowing dark brown hair often styled in a high ponytail or half-up, determined emerald green eyes, warm olive skin tone, very athletic and muscular build. She wears a golden armored breastplate with ornate eagle-wing motifs, red form-fitting leggings, golden knee-high boots, and golden wrist gauntlets. A deep blue cape with gold trim flows from her shoulders. Zara: Young adult, short spiky bright purple h...
+
+Generated at: 2026-04-03 22:58:51
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_page_2.png b/comics/astra-stellar-shield/astra-stellar-shield_page_2.png
new file mode 100644
index 0000000..ce8d549
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_page_2.png
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_page_2_attribution.txt b/comics/astra-stellar-shield/astra-stellar-shield_page_2_attribution.txt
new file mode 100644
index 0000000..26c95b2
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_page_2_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 1376x768
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. Every word of text inside speech bubbles, thought bubbles, caption boxes, and panel labels MUST be written in Bulgarian Cyrillic script (например: Здравей! Какво правиш? Побързай!). English text anywhere in the panels is STRICTLY FORBIDDEN — use ONLY Bulgarian.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (story page 2 of 3 — follow exactly, do NOT change clothing):
+Astra: Middle-aged, long flowing dark brown hair often styled in a high ponytail or half-up, determined emerald green eyes, warm olive skin tone, very athletic and muscular build. She wears a golden armored breastplate with ornate eagle-wing motifs, red form-fitting leggings, golden knee-high boots, and golden wrist gauntlets. A deep blue cape with gold trim flows from her shoulders. Zara: Young adult, short spiky bright purple h...
+
+Generated at: 2026-04-03 22:59:14
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_page_3.png b/comics/astra-stellar-shield/astra-stellar-shield_page_3.png
new file mode 100644
index 0000000..4081140
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_page_3.png
Binary files differ
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_page_3_attribution.txt b/comics/astra-stellar-shield/astra-stellar-shield_page_3_attribution.txt
new file mode 100644
index 0000000..3bb6541
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_page_3_attribution.txt
@@ -0,0 +1,16 @@
+Image generated by Google Gemini Nano Banana
+
+Model: gemini-3.1-flash-image-preview
+Text model: gemini-2.5-flash
+Aspect ratio: 4:3
+Size: 1376x768
+Result: Generated educational image for vocabulary story
+
+Prompt used:
+ЗАДЪЛЖИТЕЛНО / MANDATORY LANGUAGE RULE: This is a BULGARIAN comic book. Every word of text inside speech bubbles, thought bubbles, caption boxes, and panel labels MUST be written in Bulgarian Cyrillic script (например: Здравей! Какво правиш? Побързай!). English text anywhere in the panels is STRICTLY FORBIDDEN — use ONLY Bulgarian.
+
+Art style: ultra realistic comic strip with photographic detail and dramatic lighting.
+CHARACTER & SETTING REFERENCE (story page 3 of 3 — follow exactly, do NOT change clothing):
+Astra: Middle-aged, long flowing dark brown hair often styled in a high ponytail or half-up, determined emerald green eyes, warm olive skin tone, very athletic and muscular build. She wears a golden armored breastplate with ornate eagle-wing motifs, red form-fitting leggings, golden knee-high boots, and golden wrist gauntlets. A deep blue cape with gold trim flows from her shoulders. Zara: Young adult, short spiky bright purple h...
+
+Generated at: 2026-04-03 22:59:42
diff --git a/comics/astra-stellar-shield/astra-stellar-shield_story.txt b/comics/astra-stellar-shield/astra-stellar-shield_story.txt
new file mode 100644
index 0000000..baec415
--- /dev/null
+++ b/comics/astra-stellar-shield/astra-stellar-shield_story.txt
@@ -0,0 +1,25 @@
+Командир Астра стоеше на мостика на звездния си кораб „Зора“, оглеждайки безкрайната космическа шир. Нейната екипажна, състояща се от пилота Зара и техник Лео, работеха в синхрон, подготвяйки се за скок през хиперпространството. Астра, с нейната внушителна осанка и поглед, изпълнен с решителност, беше жива легенда – защитник на галактиката, известна с несравнимата си сила и безстрашие.
+
+„Скок след трийсет секунди, командир“, докладва Зара, докато пръстите ѝ танцуваха по контролния панел.
+„Разбрано, Зара. Лео, всички системи ли са зелени?“
+„Да, командир. Всичко е стабилно“, отвърна Лео, без да откъсва поглед от холографските дисплеи пред него.
+Внезапно аларма прониза тишината на мостика. Екраните присветнаха в червено.
+„Нещо излиза от хиперпространството точно пред нас!“ извика Лео. „Множество кораби, командир! Неизвестна формация!“
+
+Преди Астра да успее да реагира, мощна енергийна вълна разтърси „Зора“. Корабът се затресе. „Ксениди!“ процеди Астра, вече поемайки контрол. Тя знаеше тези същества – агресивни, технологично напреднали извънземни, които се появяваха от нищото, за да унищожават.
+Астра моментално се преобрази. Нейният брониран боен костюм, украсен със златни символи и светещ щит, се появи, заменяйки обикновената ѝ униформа. Тя грабна своето енергийно копие. „Зара, защитни щитове на максимум! Лео, открий им слабост!“
+
+Докато битката бушуваше, една малка, черна 1. котка се стрелна от вентилационния отвор и се сви до краката на Лео, търсейки утеха. Луна, корабното талисманче, бе свикнала с битките, но все пак предпочиташе спокойствието. Лео галеше успокоително главата ѝ, докато продължаваше да анализира тактиката на врага.
+
+Ксенидите бяха безмилостни, корабите им бяха бързи и смъртоносни. Един от вражеските кораби се приближи опасно и започна да стреля по мостика. Част от енергийния щит на „Зора“ отслабна.
+„Те ще се опитат да ни абордират!“ извика Зара.
+„Не и докато аз съм тук!“ прогърмя гласът на Астра. Тя се изправи пред вратата на мостика, копието ѝ излъчваше синя светлина. Когато първите Ксениди пробиха бронята на кораба и се появиха, тя ги посрещна с безмилостна точност и сила. Всяко движение беше прецизно, всеки удар – фатален.
+
+Докато Астра отблъскваше вълна след вълна от нападатели, Лео най-накрая извика: „Командир! Открих слабост в техните основни кораби! Енергийните им ядра са уязвими, когато преминават в нападателен режим!“
+„Зара, приготви торпедата! Фокусирай огъня върху основния им флагман! Лео, насочи я!“
+Астра се върна на бойния си пост, избърсвайки капка пот от челото си. Зара ѝ подаде голяма, червена 2. ябълка. „За енергия, командир. Нужна ни е на всички.“
+Астра отхапа от ябълката, усещайки освежаващия вкус. „Благодаря, Зара. Всички оставаме съсредоточени! Почти сме готови!“
+
+С новата информация и подновена сила, екипажът на „Зора“ започна контраатака. Торпедата, насочени прецизно от Лео и изстреляни от Зара, пробиха щитовете на флагмана на Ксенидите. Експлозия разтърси вражеския кораб. Останалите Ксенидски кораби, обезкуражени от загубата на лидера си, започнаха да се оттеглят обратно в хиперпространството.
+„Успех!“ възкликна Зара.
+Астра свали щита си, но запази копието в ръка. „Не е свършило, Зара. Те ще се върнат. Но и ние ще сме готови.“ Тя погледна към безкрайното пространство, истински пазител на реда в хаотична галактика.
diff --git a/comics/galactic-shield/galactic-shield_narration.mp3 b/comics/galactic-shield/galactic-shield_narration.mp3
new file mode 100644
index 0000000..f93d619
--- /dev/null
+++ b/comics/galactic-shield/galactic-shield_narration.mp3
Binary files differ
diff --git a/comics/galactic-shield/galactic-shield_story.txt b/comics/galactic-shield/galactic-shield_story.txt
new file mode 100644
index 0000000..2ab9fba
--- /dev/null
+++ b/comics/galactic-shield/galactic-shield_story.txt
@@ -0,0 +1,18 @@
+Звездолетът „Аврора“ прорязваше безкрайния космос, блестящ като диамант сред чернотата. На мостика, капитан Атала стоеше изправена, със стоманена решимост в погледа си. Мускулестата ѝ фигура, обвита в бойна броня, излъчваше непоклатима сила, а лицето ѝ, белязано от безброй битки, носеше мъдростта на воин. До нея, с елегантна стъпка, се промъкна Луна – нейната вярна черна **1. котка**. Животното се настани до командния панел, очите му с цвят на кехлибар наблюдаваха звездите, сякаш разбираха всяка променяща се опасност в дълбините на пространството. Луна беше повече от домашен любимец; тя беше талисман на „Аврора“, неин тих пазител.
+
+Внезапно червени аларми закрещяха. „Капитане, неидентифицирани кораби! Множество! Идват бързо!“ – извика пилотът Кай, млад мъж с остър ум и бързи рефлекси.
+„Щитове на максимум! Отворете огън по моя команда!“ – заповяда Атала, гласът ѝ ехтеше с авторитет.
+На екраните се появиха зловещите силуети на корабите на Зоргарите – безпощадна извънземна раса, която от векове тероризираше галактиката. Те бяха по-многобройни от очакваното.
+
+Битката започна. Енергийни лъчи разсичаха мрака, експлозии осветяваха бойното поле. Атала се движеше сред екипажа си, давайки указания, вдъхвайки кураж. Един от главните двигатели беше ударен. Корабът се разтресе. Луна изсъска, козината ѝ настръхна, но остана на място, наблюдавайки с тревожност.
+
+„Трябва да пробием защитата им, Кай! Фокусирай огъня върху флагмана!“ – извика Атала.
+В този момент, инженера Зора, жена с лъскава черна плитка и очи, пълни с решителност, подаде на Атала хрупкава **2. ябълка**. „За енергия, капитане. Нуждаем се от теб във върхова форма.“
+Атала отхапа от свежия плод, вкусът му беше ободряващ на фона на хаоса. За момент, тази проста `ябълка` я заземи, напомняйки ѝ за дома, за всичко, което защитава.
+
+С възвърната сила, Атала грабна своя енергиен ласо и изрича: „Всички да ме следват! Ще ги ударим в сърцето!“
+Тя не беше просто командир; тя беше предводител. С невероятна грация и сила, Атала поведе десантен екип към абордаж на най-големия вражески кораб, пробивайки път през гъмжащи орди от Зоргари с всеки замах. Енергийното ѝ ласо пулсираше със синя светлина, неутрализирайки врагове, които се осмеляваха да застанат на пътя ѝ. Нейната смелост беше заразителна, вдъхновявайки екипа ѝ да се бори с още по-голяма решителност.
+
+Обратно на „Аврора“, Кай и Зора успяха да пренасочат енергията и да нанесат критичен удар по фл