Changelog
v1.14.0
2026-07-16
Cinematic 16:9 gallery, a new image and motion pipeline, two new heroes.
- Widescreen gallery. Scene images are now 16:9 cinematic, matching the video.
- New look. A more detailed cel style (Legend of Vox Machina) with real cinematic camera framing per scene.
- Two new party members. Cartman Sandiego (white dragonborn paladin) and Wrathgar (mountain-man ranger) join the roster; Shirley retired after his heroic death.
- First animated scene. Scene 3 of the July 2 gallery plays a motion clip on hover, our first storyboard-animated card.
- July 2 session with a full gallery and a "Previously on..." recap over a new graveyard-exploration music track.
v1.13.4
2026-06-04
Changelog page rendering fixes.
- Entries without bullet items (like v1.13.3) now render their lede line as a subtitle.
- Inline
boldand `code` markdown renders properly instead of showing literal asterisks.
v1.13.3
2026-06-04
Oggy crop touch-up. Tighter zoom + a bit of breathing room above his dreadlocks.
v1.13.2
2026-06-04
Portrait crop final pass.
- Caelum's hair no longer clips against the top of his card.
- Orion and Oggy zoomed a touch tighter so their faces match the rest of the roster.
v1.13.1
2026-06-04
Homepage portrait retune + hero Kimber-sword fix.
- Uniform face size across all 6 portraits. First pass kept Shirley's face dominant while the others looked zoomed-out. Crops retuned so all faces fill a similar share of each card.
- Hero regenerated. v3 gave Kimber a sword; v4 explicitly reserves the Shadow Blade to Oggy. Kimber's hands now swirl bardic sigils.
v1.13.0
2026-06-04
Oggy locked, uniform homepage portraits, mobile hero fix.
- Oggy is officially LOCKED (Jesse-approved). The canonical reference is now the full-body pantless variant because the no-pants gag is canon and full-body framing gives scene gen more to anchor on. Illusion-pants variant kept as a secondary for town scenes.
- Homepage portraits unified. All 6 characters now use the same tight Shirley-style bust crop. Caelum noticeably tighter. References stay full-body, homepage portraits are decoupled bust crops via a new
scripts/crop-homepage-portraits.mjs. - Removed portrait card bottom-fade gradient. The overlay was eating detail without adding anything.
- Mobile hero autoplay fixed. iOS Low Power Mode auto-reports reduced-motion, which used to hide the cinemagraph entirely. The hide rule is gone (the ambient loop isn't motion-reduce-worthy) and a JS
.play()safety call handles iOS Safari's autoplay race. - Hero regenerated with new Oggy. New
group-action-v3.webp+ new cinemagraph loop. Oggy visible in the back-left with his purple-black Shadow Blade. - May 21 gallery refreshed. Scenes 4, 6, and 7 (the three with Oggy) regenerated as both still images and videos using the new locked reference.
v1.12.0
2026-05-23
6-character cinematic hero + cleaner party grid.
- Homepage hero now features all 6 main party characters (was 4) in a 16:9 cinematic banner. Cinemagraph: Voltedge lightning crawls, Destone runes pulse, Kimber's bardic sigils swirl, embers drift, fur and cloth micro-drift.
image == end_imageloop anchor keeps the seam invisible. - Hero container: 4:3 → 16/9. More banner-y, less of a square block.
- Diego (Maxi) hidden from party grid while on hiatus. Clean 3×2 of the 6 active characters.
v1.11.0
2026-05-23
Portrait-forward party roster + image-generation style consistency.
- Homepage party section redesigned: full 2:3 portrait cards replace the tiny avatar circles (3×2 grid on desktop, 2-col tablet, 1-col mobile). Each card features the character's portrait with accent-colored top border, hover lift + scale + glow keyed to their accent color.
- New
/portraits/directory: WebP portraits for Caelum, Orion, Kimber, Idril, Shirley, Oggy. Diego placeholder card while his portrait is pending. - Image generation style consistency:
scripts/generate-images.jsnow auto-includes locked character portraits as input refs to GPT Image 2'simages.editendpoint whenever a scene mentions a registered character. Anchors both style AND likeness across sessions. Newscripts/lib/style.jsis the canonical source of the v4 style block and locked-portrait registry. - Orion portrait LOCKED (David-approved). Oggy v2 generated using locked Orion + Idril as style refs (pending Jesse's approval).
v1.10.0
2026-05-21
Animated hero.
- Homepage hero swapped from the static d20 image to a looping cinemagraph of the four canon-locked party members mid-combat. Source: GPT Image 2 group portrait → Seedance 2.0 i2v with
imageandend_imageboth pointing at the same frame to anchor the loop. Cinemagraph motion-only prompt (lightning crawling on Voltedge, embers, magical sigils swirling) keeps the seam invisible. - Video assets:
/video/hero-loop.mp4(2.2 MB, audio stripped, H.264 CRF 26, +faststart),/hero-poster.webp(179 KB first-frame poster). - Hero markup:
<video autoplay muted loop playsinline preload="metadata">with the poster image as fallback.prefers-reduced-motion: reduceusers see the static poster only. - New canon: player-approved visual descriptions locked for Caelum, Kimber, and Shirley.
- New scripts:
scripts/generate-portraits.jsandscripts/generate-group-portrait.js.
v1.9.1
2026-05-21
Cinematic recap on the Recap page.
- Recap page now embeds the stitched session video at the top as a "Cinematic Recap" section (no autoplay, uses the first scene image as poster). The "Previously on..." narration audio stays below it, both sections labeled and described.
- Gallery page gets a "Watch the full cinematic recap →" link below the grid that deep-links to the recap page.
- New optional
recapVideofield on the player-summary frontmatter (string path). When unset, both surfaces hide gracefully. - May 7 session is the first session with a published recap (
/video/sessions/2026-05-07/recap-full.mp4, 49 MB, 1:40).
v1.9.0
2026-05-21
Animated session gallery.
- Session gallery cards now play their Seedance i2v video clips on hover (muted, looped) and open the full clip with audio in the GLightbox lightbox on click. Backward-compatible: cards without a
video:frontmatter field still render as still images. - "Click for sound" badge in the top-right of each animated card. Keyboard focus, touch tap-and-hold, and mouse hover all trigger the preview.
- New
scripts/stitch-video.jsfor local recap stitching:node scripts/stitch-video.js YYYY-MM-DDconcats everyscene-XX.mp4into a single.video/stitched/YYYY-MM-DD-recap-full.mp4via ffmpeg stream-copy (re-encode fallback if codecs ever drift). Local-only, not shipped to the site. - May 7 session shipped as the first fully animated gallery (10 scenes × 10s at 720p with synchronized audio via
infsh app run falai/seedance-2-i2v). - Schema: optional
videofield added to the image entry insite/src/content.config.ts..gitignoreextended to cover.video/and*.mp4/*.mov/*.webmso video assets ship to Vercel via the CLI like audio. - CLAUDE.md Future Improvements updated: Seedance i2v marked VALIDATED, and a new "narrated video recap" idea captured for a stitched + voiceover cinematic recap.
v1.8.0
2026-05-21
Pipeline infrastructure overhaul.
- New
/process-audioslash command wrappingscripts/process-audio.shfor consistency with/process-sessionand/narrate - Mono 16kHz audio compression in process-audio.sh and transcribe-cloud.sh (down from 48kHz stereo). 4x smaller files, more reliable for
gpt-4o-transcribe, native format for both Whisper and GPT-4o - Transcription research doc (
docs/mechanics/transcription-research.md), full A/B testing of whisper-1 vs gpt-4o-transcribe vs gpt-4o-mini-transcribe vs WhisperX. Documented gpt-4o-transcribe's repetition hallucination loops, WhisperX's prompt-injection hallucinations, and silent failure modes. Reverted default to whisper-1. - Open SDK migration:
openai6.29.0 → 6.38.0,dotenv17.3.1 → 17.4.2 - Google SDK migration: deprecated
@google/generative-ai→@google/genai^2.5.0 - OpenAI image model:
gpt-image-1→gpt-image-2in scripts/generate-images.js (released April 21, 2026) - Animation style R&D complete (
.audio/test-style/README.md): v4 prompt validated for western fantasy animation key-frame aesthetic via GPT Image 2 + Seedance 2.0 i2v - Character reference workflow introduced: per-character locked refs in
docs/characters/image-references/. Idril locked as the first (April 16, 2026, Cary's approval). Process documented for the remaining characters. - May 7 session shipped with the new animation style as the first session in the new aesthetic
- Mexoz Valaryn lore canonized: corrected from "Mexos" + added the full DM-read backstory: Serath-Kul empire origin, Black Pilgrimage 40-year wandering, The Ebon Gospel fragments with missing final pages
- Session gallery cleanup: removed the NB2 / GPT Image 2 model toggle from
site/src/components/ImageGallery.astro. Sessions now ship a single set of images in the animation style. The--model nb2|proflags remain inscripts/generate-images.jsfor ad-hoc use. Legacysrc_nb2field kept on the schema as optional so older session frontmatter (Mar 12, Apr 9) still parses without error.
v1.7.1
2026-04-14
- Background ambient music mixed into narration via ElevenLabs Music API + ffmpeg
- New mix-narration.js script with configurable volume, intro/outro delay, fade in/out
- Voice-only narration preserved as backup (*-narration-voice.mp3)
- April 9 narration updated with mixed version (dark medieval ambient track at 30%)
- ElevenLabs client timeout bumped to 120s for longer scripts
v1.7.0
2026-04-14
- Narration recap promoted to first-class UI: Recap tab in session navigation (conditional, like Gallery)
- "Previously, on Mostly Mortals..." featured card on homepage above session listing
- Headphones badge on session cards linking directly to recap page
- Recap page now uses Session layout with full tab navigation (was standalone Base layout)
- Recap page is now discoverable (removed noindex, shareable URL)
- New LatestRecap.astro component auto-selects most recent narrated session
- Session card markup refactored to support independent badge link
v1.6.2
2026-04-10
- Structured image prompt recipe (INPUTS, CHARACTER REFERENCES, CORE COMPOSITION, VISUAL EFFECTS, COLOR SYSTEM, STYLING, LAYOUT DETAILS, CONSTRAINTS, NEGATIVE)
- Recipe documented in docs/mechanics/image-prompt-recipe.md
- generate-images.js updated to parse recipe format (backwards compatible with legacy)
- All 9 session images regenerated with recipe prompts (GPT + NB2)
- Storytelling captions replace technical descriptions in gallery
- /process-session updated to use recipe format and separate captions from prompts
v1.6.1
2026-04-10
- Phased validation in /process-session (3 phases: Combat & Events, Items & Quests, Best Moments & Images)
- Deep banter pass: best moments now explicitly extracted as Quotable Quotes, D&D Highlights, and Table Culture
- Audio pipeline auto-detects garbled Whisper chunks and retries with WhisperX fallback
- Unified audio pipeline script (process-audio.sh) with .audio/ directory structure
- WhisperX venv rebuilt for current project path
v1.6.0
2026-04-06
- Added Session Stats bar to player summary page (crits, fails, kills with Lucide icons)
- Stats extracted from transcript during /process-session with validation pass
- Stats stored as optional frontmatter in player-summary files
- DM stats section shown only when DM rolled crits or fails
- Cleaned up duplicate site/openspec directory and added working directory rules to CLAUDE.md
v1.5.0
2026-03-21
- Every present character now guaranteed inclusion in Player Summary, Session Gallery (8-10 images), and narration recap
- Image prompt count bumped from 6-8 to 8-10 to ensure full party coverage
- Pipeline instructions updated to flag missing characters during validation
v1.4.2
2026-03-16
- Added collapsible "Read the narration" transcript on recap page
- Narration text cleaned of Audio Tags and SFX markers for readable display
v1.4.1
2026-03-16
- Fixed dark mode audio player visibility on recap page (inverted controls for contrast)
v1.4.0
2026-03-16
- Added "Previously on Mostly Mortals..." AI narration via ElevenLabs v3
- Custom "Old Adventurer" voice designed in ElevenLabs Voice Design for v3
/narratecommand generates dramatic recap scripts with v3 Audio Tags ([excited], [sarcastic], [curious], [sighs], [whispers], [clears throat])- Three voices available: Old Adventurer (default), Clint, Oxley via
--voiceflag - Hidden
/recappage for sharing narrations with players (noindex, not linked) - NarrationPlayer component with Grimoire-themed audio player
- Script review and approval step before audio generation
v1.3.2
2026-03-16
- Extended left page edge effect (spine line + gradient) through footer for seamless visual flow
- Updated site URL to custom domain mostly-mortals.bydom.io
v1.3.1
2026-03-15
- Added MM shield logo to site navigation bar
- Added favicon, apple-touch-icon, and PWA icons generated from logo
- Added web manifest for mobile "Add to Home Screen"
- Added OG and Twitter card meta tags using hero image for link previews
v1.3.0
2026-03-15
- Added Quest Log with accordion UI, Lucide icons, status badges, progress fractions
- Added "Current" quest highlighting with gold glow
- Added manual sort order for quests via
sortOrderfield - Added Hooks & Leads section with CircleHelp icons
- Added section navigation (Party / Quests / Hooks / Sessions) with smooth scrolling
- Added completed quests section at 50% opacity
- Migrated 7 quests from knowledgebase to structured content collection
- Updated
/process-sessionwith quest extraction, validation, and dual-file updates
v1.1.0
2026-03-15
- Added AI image generation pipeline (
scripts/generate-images.js) - Added GPT Image 1.5 (default), Nano Banana 2, and Nano Banana Pro model support
- Added
--compareflag for side-by-side model testing - Added Session Gallery page with GLightbox for full-size viewing
- Added GPT Image 1.5 / Nano Banana 2 model toggle on gallery
- Added image prompt extraction with framing types (wide/closeup/extreme) to
/process-session - Updated content schema with optional
imagesarray - Generated 6 images for March 12 cemetery/Mexoz session
v1.0.0
2026-03-14
- Initial release of the Mostly Mortals campaign website
- Astro static site with "The Grimoire" parchment theme (dark/light toggle)
- Homepage with hero banner, party roster, and session list
- Player Summary, Best Moments, and hidden DM Summary pages
- Session Timeline and Detailed DM Timeline sections
- Content collections with Zod schema validation
- Manual deploy to Vercel via CLI