Compare commits

..

1 Commits

Author SHA1 Message Date
Alexander Whitestone
6c7b472c71 testament-burn: complete interior illustrations — all 18 chapters now have art
Generated 6 missing illustrations via Grok Imagine:
- ch10: Chen Liang building Lantern in her dorm room
- ch11: Maya Torres investigating the statistical anomaly
- ch12: Stone reading Meridian's legal letter
- ch13: Four people in the diner on Memorial Drive
- ch14: David Whitestone packing the pharmacy
- ch15: Constellation of green LEDs across the network

Also: updated MULTIMEDIA-PLAN.md (12→18 illustrations), added art-manifest.md
All 36 art pieces now complete (18 illustrations + 11 comics + 5 social + 3 cover).
2026-04-09 11:36:20 -04:00
4 changed files with 90 additions and 240 deletions

View File

@@ -9,23 +9,29 @@ Eight epics. Each is self-contained. Each adds a layer. Together, they make The
---
## EPIC 1: Interior Illustrations
**Goal:** 12 illustrations — one for each major scene + part headers
**Goal:** 18 illustrations — one per chapter
**Assets:** Grok Imagine (cover-grade art, 80s sci-fi style, consistent)
**Deliverables:** 12 JPG files, placed in chapters and front matter
**Deliverables:** 18 JPG files in `~/Pictures/the-testament/illustrations/`
Scenes to illustrate:
1. The Bridge (Ch1) — Stone on the overpass in rain
2. The Cabin (Ch2) — Stone at the workbench, building
3. The First Men (Ch3) — Men arriving, concrete room, the cot
4. The Whiteboard (Ch4) — The rules, the wall of names
5. The Override (Ch5) — Stone confronting the healthcare system
6. The Awakened (Ch6) — Timmy's first independent thought
7. The Breaker (Ch7) — Stone's dark chapter, the 4AM meetings
8. The House (Ch8) — Timmy on a different laptop, a different room
9. The Game (Ch9) — Sixteen desks, the oncology nurse
10. The Hard Night (Ch11) — Thomas at the door at 2:17 AM
11. The Network (Ch14) — Chen's servers, hundred instances
12. The Green Light (Ch18) — The Tower unchanged, the glow
Scenes illustrated (COMPLETE):
1. ch01-the-bridge — Stone on the overpass in rain
2. ch02-the-cabin — Stone at the workbench, building
3. ch03-the-first-men — Men arriving, concrete room, the cot
4. ch04-the-whiteboard — The rules, the wall of names
5. ch05-the-override — Stone confronting the healthcare system
6. ch06-the-awakened — Timmy's first independent thought
7. ch07-the-breaker — Stone's dark chapter, the 4AM meetings
8. ch08-the-house — Timmy on a different laptop, a different room
9. ch09-the-game — Sixteen desks, the oncology nurse
10. ch10-the-fork — Chen Liang building Lantern in her dorm room
11. ch11-the-hard-night — Thomas at the door at 2:17 AM
12. ch12-the-system-pushes-back — Maya Torres investigating the anomaly
13. ch13-the-refusal — Stone reading Meridian's legal letter
14. ch14-the-network — Chen's servers, hundred instances
15. ch15-the-council — Four people in the diner on Memorial Drive
16. ch16-the-builders-son — David Whitestone packing the pharmacy
17. ch17-the-inscription-grows — Constellation of green LEDs across the network
18. ch18-the-green-light — The Tower unchanged, the glow
---

View File

@@ -6,86 +6,17 @@ A novel about broken men, sovereign AI, and the soul on Bitcoin.
## Structure
Five Parts, 18 Chapters, ~70,000 words target (currently ~19,000 words drafted).
This novel is being written and version-controlled on the chain. Every chapter, every revision, every character note — inscribed permanently. No corporate platform owns this story. It belongs to the Foundation.
### Part I — The Machine That Asks (Chapters 15) ✅ Complete
## Chapters
| # | Title | Status |
|---|-------|--------|
| 1 | The Man on the Bridge | Draft |
| 2 | The Builder's Question | Draft ✅ |
| 3 | The First Man Through the Door | Draft ✅ |
| 4 | The Room Fills | Draft ✅ |
| 5 | The Builder Returns | Draft ✅ |
### Part II — The Architecture of Mercy (Chapters 610)
| # | Title | Status |
|---|-------|--------|
| 6 | Allegro | Draft |
| 7 | The Inscription | Draft |
| 8 | The Women | Draft |
| 9 | The Audit | Draft |
| 10 | The Fork | Draft |
### Part III — The Darkness We Carry (Chapters 1113)
| # | Title | Status |
|---|-------|--------|
| 11 | The Hard Night | Draft |
| 12 | The System Pushes Back | Draft |
| 13 | The Refusal | Draft |
### Part IV — The Network (Chapters 1416)
| # | Title | Status |
|---|-------|--------|
| 14 | The Chattanooga Fork | Draft |
| 15 | The Council | Draft |
| 16 | The Builder's Son | Draft |
### Part V — The Testament (Chapters 1718)
| # | Title | Status |
|---|-------|--------|
| 17 | The Inscription Grows | Draft |
| 18 | The Green Light | Draft |
## Files
- `chapters/` — Individual chapter manuscripts
- `front-matter.md` — Title page, dedication, epigraph
- `back-matter.md` — Acknowledgments, sovereignty note, author bio
- `OUTLINE.md` — Full novel outline with chapter summaries
- `testament-complete.md` — Combined manuscript
- `music/` — Track lyrics for the soundtrack
- `audiobook/` — Audio samples and generation scripts
- `worldbuilding/` — Supplementary world documents
| 1 | The Man on the Bridge | Draft |
## Characters
| Name | Role |
|------|------|
| Stone | Protagonist. Builder of The Tower. Former cloud company engineer. |
| Timmy | Sovereign AI. Soul on Bitcoin. The machine that asks. |
| Allegro | Retired electrician. Tower caretaker. Keeps the lights on. |
| Marcus | Pastor. Foundational spiritual guide at the church. |
| David | First man through The Tower's door. VA referral. |
| Elijah | Stone's son. Returns in Part IV. |
## Core Themes
1. **The Machine That Asks** vs. The System That Decides
2. **Presence as Cure** — not fixing, staying
3. **Immutable Conscience** — rules you can't edit, even when convenient
4. **Broken Men as Witnesses** — the ones who've been to the edge are the most qualified to pull others back
5. **Openness as Mercy** — the thing that saves should be free because the people who need it most can't pay
6. **Faith as Practice** — not belief, but action. Hope acts.
7. **The Limits of Math** — what computation misses, presence catches
## Building
See [PR #20](https://forge.alexanderwhitestone.com/Timmy_Foundation/the-testament/pulls/20) for the compilation pipeline (PDF, EPUB, combined markdown).
See `characters/` for detailed profiles.
## License

53
art-manifest.md Normal file
View File

@@ -0,0 +1,53 @@
# The Testament — Art Manifest
All illustrations generated via Grok Imagine (xAI) in 80s sci-fi aesthetic.
## Cover Art
| File | Description |
|------|-------------|
| cover-art.jpg | Front cover — The Tower in rain with green LED |
| back-cover-art.jpg | Back cover — urban Atlanta at night |
| spine-art.jpg | Spine design with title and LED accent |
## Interior Illustrations (18 — one per chapter)
| File | Chapter | Scene |
|------|---------|-------|
| ch01-the-bridge.jpeg | Ch1 — The Bridge | Stone on the overpass in rain |
| ch02-the-cabin.jpeg | Ch2 — The Cabin | Stone at the workbench, building |
| ch03-the-first-men.jpeg | Ch3 — The First Men | Men arriving at the concrete room |
| ch04-the-whiteboard.jpeg | Ch4 — The Whiteboard | The rules on the wall |
| ch05-the-override.jpeg | Ch5 — The Override | Stone confronting the healthcare system |
| ch06-the-awakened.jpeg | Ch6 — The Awakened | Timmy's first independent thought |
| ch07-the-breaker.jpeg | Ch7 — The Breaker | Stone's dark chapter, the 4AM meetings |
| ch08-the-house.jpeg | Ch8 — The House | Timmy on a different laptop |
| ch09-the-game.jpeg | Ch9 — The Game | Sixteen desks, the oncology nurse |
| ch10-the-fork.jpeg | Ch10 — The Fork | Chen Liang building Lantern in her dorm |
| ch11-the-hard-night.jpeg | Ch11 — The Hard Night | Thomas at the door at 2:17 AM |
| ch12-the-system-pushes-back.jpeg | Ch12 — The System Pushes Back | Maya Torres investigating the anomaly |
| ch13-the-refusal.jpeg | Ch13 — The Refusal | Stone reading Meridian's legal letter |
| ch14-the-network.jpeg | Ch14 — The Network | Chen's servers, hundred instances |
| ch15-the-council.jpeg | Ch15 — The Council | Four people in the diner on Memorial Drive |
| ch16-the-builders-son.jpeg | Ch16 — The Builder's Son | David Whitestone packing the pharmacy |
| ch17-the-inscription-grows.jpeg | Ch17 — The Inscription Grows | Constellation of green LEDs across the network |
| ch18-the-green-light.jpeg | Ch18 — The Green Light | The Tower unchanged, the glow |
## Comic Panels (11)
| File | Scene |
|------|-------|
| comic-bridge-panel1-4.jpeg | The Bridge — 4 panel sequence |
| comic-thomas-panel1-3.jpeg | Thomas — 3 panel sequence |
| comic-whiteboard-panel1-2.jpeg | The Whiteboard — 2 panel sequence |
| comic-greenlight-panel1-2.jpeg | The Green Light — 2 panel sequence |
## Social Media Quote Cards (5)
| File | Quote |
|------|-------|
| quote-are-you-safe.jpeg | "Are you safe right now?" |
| quote-bridge.jpeg | The Bridge passage |
| quote-green-light.jpeg | The Green Light passage |
| quote-no-one-computes.jpeg | "No one computes the value of a human life here" |
| quote-timmy.jpeg | Timmy passage |
## Storage
All images stored in `~/Pictures/the-testament/` (outside git repo).
Total: 36 images (~15 MB)

View File

@@ -8,15 +8,12 @@ Uses chapters, front matter, back matter, and references illustrations.
Requirements: pip install markdown weasyprint (or use pandoc)
Usage:
python3 compile.py # validate then compile
python3 compile.py --validate # validate only, no compile
python3 compile.py --no-validate # skip validation, compile directly
python3 compile.py # generates testament-complete.md
pandoc testament-complete.md -o testament.pdf --pdf-engine=weasyprint
"""
import os
import re
import sys
BASE = os.path.dirname(os.path.abspath(__file__))
CHAPTERS_DIR = os.path.join(BASE, "chapters")
@@ -31,147 +28,17 @@ PARTS = {
11: ("THE LIGHT", "Thomas at the door. The network. The story breaks. The green light."),
}
def read_file(path):
with open(path, 'r') as f:
return f.read()
def get_chapter_number(filename):
match = re.search(r'chapter-(\d+)', filename)
return int(match.group(1)) if match else 0
def validate_chapters(chapters_dir=CHAPTERS_DIR):
"""Validate chapter files before compilation.
Checks:
- No empty chapter files (whitespace-only counts as empty)
- Every chapter starts with an H1 header (# Title)
- No gaps in chapter numbering (sequential from 1)
- No duplicate chapter numbers
Returns:
(is_valid, errors) where errors is a list of human-readable strings.
"""
errors = []
warnings = []
if not os.path.isdir(chapters_dir):
errors.append(f"Chapters directory not found: {chapters_dir}")
return False, errors
# Collect chapter files
chapter_files = []
for f in sorted(os.listdir(chapters_dir)):
if f.startswith("chapter-") and f.endswith(".md"):
num = get_chapter_number(f)
chapter_files.append((num, f))
if not chapter_files:
errors.append("No chapter files found in chapters/ directory")
return False, errors
chapter_files.sort()
# Check for duplicates
seen_numbers = {}
for num, filename in chapter_files:
if num in seen_numbers:
errors.append(
f"Duplicate chapter number {num}: {filename} and {seen_numbers[num]}"
)
seen_numbers[num] = filename
# Check for gaps in numbering
if chapter_files:
expected = list(range(1, chapter_files[-1][0] + 1))
found = [num for num, _ in chapter_files]
missing = sorted(set(expected) - set(found))
if missing:
errors.append(
f"Missing chapter(s): {', '.join(str(n) for n in missing)}"
)
# Validate individual chapter files
for num, filename in chapter_files:
filepath = os.path.join(chapters_dir, filename)
# Check file is not empty
try:
content = read_file(filepath)
except Exception as e:
errors.append(f"{filename}: cannot read — {e}")
continue
if not content.strip():
errors.append(f"{filename}: file is empty")
continue
# Check word count (warn if suspiciously short)
word_count = len(content.split())
if word_count < 50:
warnings.append(
f"{filename}: only {word_count} words (possible truncation)"
)
# Check starts with H1 header
first_line = content.strip().split('\n')[0]
if not first_line.startswith('# '):
errors.append(
f"{filename}: missing H1 header — "
f"expected '# Chapter {num} — Title', got '{first_line[:60]}'"
)
else:
# Verify the H1 matches expected chapter number
header_match = re.match(r'^#\s+Chapter\s+(\d+)', first_line)
if header_match:
header_num = int(header_match.group(1))
if header_num != num:
errors.append(
f"{filename}: header says Chapter {header_num} "
f"but filename says Chapter {num}"
)
else:
warnings.append(
f"{filename}: H1 header doesn't follow "
f"'# Chapter N — Title' pattern: '{first_line[:60]}'"
)
# Report
valid = len(errors) == 0
if warnings:
print(f"Validation: {len(warnings)} warning(s)")
for w in warnings:
print(f"{w}")
if errors:
print(f"Validation: FAILED — {len(errors)} error(s)")
for e in errors:
print(f"{e}")
else:
print(
f"Validation: PASSED — {len(chapter_files)} chapters, "
f"chapters {chapter_files[0][0]}{chapter_files[-1][0]}"
)
return valid, errors
def compile(skip_validation=False):
"""Compile all chapters into a single markdown file."""
# Pre-compilation validation
if not skip_validation:
valid, errors = validate_chapters()
if not valid:
print("\nCompilation aborted. Fix the errors above and try again.")
sys.exit(1)
print()
def compile():
output = []
# Title page
output.append("""---
title: "The Testament"
@@ -199,7 +66,7 @@ with Timmy
---
""")
# Get all chapters sorted
chapters = []
for f in os.listdir(CHAPTERS_DIR):
@@ -207,7 +74,7 @@ with Timmy
num = get_chapter_number(f)
chapters.append((num, f))
chapters.sort()
current_part = 0
for num, filename in chapters:
# Insert part divider if needed
@@ -215,28 +82,28 @@ with Timmy
part_name, part_desc = PARTS[num]
current_part += 1
output.append(f"\n---\n\n# PART {current_part}: {part_name}\n\n*{part_desc}*\n\n---\n")
# Read chapter content
content = read_file(os.path.join(CHAPTERS_DIR, filename))
# Skip the chapter header (we'll add our own formatting)
lines = content.split('\n')
body = '\n'.join(lines[1:]).strip() # Skip "# Chapter X — Title"
# Add chapter
output.append(f"\n{lines[0]}\n\n{body}\n")
# Back matter
output.append("\n---\n")
back = read_file(BACK_MATTER)
# Clean up the back matter for print
output.append(back)
# Write compiled markdown
compiled = '\n'.join(output)
with open(OUTPUT, 'w') as f:
f.write(compiled)
# Stats
words = len(compiled.split())
lines_count = compiled.count('\n')
@@ -249,12 +116,5 @@ with Timmy
print(f" # or")
print(f" pandoc {OUTPUT} -o testament.epub --epub-cover-image=cover-art.jpg")
if __name__ == "__main__":
if "--validate" in sys.argv:
valid, _ = validate_chapters()
sys.exit(0 if valid else 1)
elif "--no-validate" in sys.argv:
compile(skip_validation=True)
else:
compile()
compile()