From Hand-Drawn Comic to 3D WebGL Movie in One Session: How 10 Studio Disciplines and 563 Man-Hours Were Compressed Into 6 Hours

There is a specific moment in every technological paradigm shift when abstract benchmarks stop mattering, and you stare at a finished artifact on your screen with an equal mixture of exhilaration and vertigo. We experienced that exact moment after transforming a smartphone photograph of an 8-panel hand-drawn children's pencil comic strip—“Forensics HUNT! by Ella”—into a fully rigged, keyframe-animated, voice-acted Three.js 3D WebGL Mystery Movie complete with an in-browser recording studio, 4 bespoke stylized 3D characters, 20 PBR stage and cosmic props, and a colossal ringed Saturn backdrop in a single 6-hour session.

You can experience the live, interactive 3D WebGL premiere right now at winwinhost.com/ella.html (or winwinhost.com/forensics-hunt/index.html).

Original smartphone photograph of Ella's hand-drawn 8-panel pencil comic strip 'Forensics HUNT!' on paper
Figure 1 (The Source Artifact): The original smartphone photograph of Ella's 8-panel pencil drawing on paper. Every 3D character, facial expression, wardrobe detail, bedroom prop, fingerprint card, and detective note in the final WebGL movie traces directly to this sheet of paper.

What makes this project both thrilling and terrifying is not merely that an AI assistant wrote JavaScript or generated an image. It is that a single human architect directing an autonomous agent equipped with live Model Context Protocol (MCP) bindings to Blender, Poly Haven, subagent image editors, Web Audio synthesizers, and bare-metal Linux servers executed the coordinated work of 10 distinct studio and engineering disciplines—compressing an estimated 480 to 646 traditional studio man-hours (563 hours midpoint, or ~3.35 full-time months) into 6 hours of elapsed wall-clock time.

Blender 3D render showcasing the colossal ringed Saturn backdrop, Detective Clipboard, Poly Haven Magnifying Glass, turned-walnut Rubber Stamp, and cosmic crystals built for Forensics HUNT!
Figure 2: Live Blender viewport showcase of the custom 3D Saturn backdrop (with procedural banded atmosphere and translucent Cassini Division rings), Act 6 Detective Notes clipboard, Poly Haven magnifying glass, walnut-and-brass rubber stamp, and 3D cosmic orbiters.

1. The Executive Ledger: 10 Studio Roles & 563 Man-Hours Quantified

In a conventional creative technology agency or animation game studio, taking a hand-drawn 8-panel pencil storyboard on paper and turning it into an interactive, browser-playable 3D animated production with custom characters, skeletal rigs, keyframe acting loops, PBR environment props, multi-character voiceovers, and a custom recording studio requires a cross-functional pipeline of specialists. Each handoff between departments—from 2D concept inking and continuity cleanup to 3D modeling, rigging, animation, LookDev, WebGL engine programming, audio design, and DevOps—introduces days of scheduling overhead and format translation.

Below is the itemized engineering and studio breakdown of every skill domain captured in Forensics HUNT! by Ella, compared against conservative industry man-hour norms for mid-to-senior specialists:

# Studio / Engineering Discipline Concrete Technical Deliverables Executed in Project Traditional Studio Hours (Low–High) Midpoint Estimate
1 2D Storyboard Continuity & Digital Restoration Artist Translating Ella's raw 8-panel pencil drawing on paper (Figure 1) into a vibrant inked and colored comic strip while applying 5 surgical continuity edits (removing Panel 1's floating open door on the wall, removing Panel 3's spoiler “guilty” arrow on Lizzy, separating Panel 5's Crime Scene fingerprint from Mom/Amy/Lizzy's suspect cards, shortening Lizzy's hair in Panel 7 to match her Panel 3 chin-length bob, and updating Panel 8 to “8. by Ella”), perspective alignment, and slicing 8 high-resolution stage textures (panel_1.png–panel_8.png). 16 – 24 hrs 20 hrs
2 3D Stylized Character Modeler & Digital Sculptor Sculpting 4 bespoke stylized female characters from the official Blender Studio all-quad base mesh (GEO-body_female_stylized, 9,150+ quads each): Katey (long espresso hair, lavender V-neck sweater, raycasted 3D velvet choker), Katey's Mom (pulled-up crown hair + high top-knot bun, pearl stud earrings, sculpted “biting lip” lower-lip tuck + upper tooth edge, pink crew-neck shirt, raycasted denim overalls with bib, patch pocket, straps & silver buckles), Amy (long wavy chestnut hair, open-teeth nervous smile with sculpted cheek dimples, olive-charcoal short-sleeve T-shirt with 3D extruded 5-pointed yellow chest star), and Lizzy (wavy chin-length bob, upturned worried eyebrows, plum crop top, olive cargo pants with 3D side pockets, chunky sneakers). 120 – 160 hrs 140 hrs
3 3D Rigging Technical Director (Rigging TD) Constructing 4 hierarchical 19+ bone humanoid armatures; performing programmatic connected-component topological island surgery on Amy's right hand to split fused mitten fingers into 4 discrete finger islands along the Y-axis; binding dedicated peace_fingers.R (Index + Middle) and fingers.R (Ring + Pinky) bones for Amy's articulated 3D V-Peace Sign (✌️); distance-weighted envelope skinning; and stripping base-mesh vertex-color attributes that darkened PBR clothing shaders. 48 – 64 hrs 56 hrs
4 3D Character Animator (4 × 120-Frame Acting Loops) Authoring 4 custom 120-frame (60 FPS) skeletal acting performances in Blender exported as GLTF AnimationClips: Katey_Room_Discovery (scanning her empty room in disbelief), Mom_Biting_Lip_Interrogation (nervous weight shift & lip-biting hand gesture), Amy_Forced_Peace_Interrogation (raising right arm to flash her articulated ✌️ peace sign with a rhythmic wrist wave), and Lizzy_Nervous_Interrogation (downcast head tilt, hunched shoulders, fidgeting hands, and rapid jaw/head micro-oscillations for “mumbling”). 60 – 80 hrs 70 hrs
5 3D Environment, Hard-Surface Prop & LookDev Artist Assembling the 20-prop 3D asset library (scene_props_3d.glb, 45.16 MB): importing, scaling, and configuring 9 Poly Haven CC0 PBR models (magnifying_glass_01 with translucent optical lens, clipboard + yellow legal pad, stationery_supplies_pen_fancy, office_notepads_sticky_stack, stationery_supplies_pencilcup, potted_plant_04, binder_notebook, hanging_picture_frame_02, SchoolChair_01, moon_rock_04) plus modeling 11 custom beveled Blender props including Prop_Saturn_Backdrop (procedural banded atmosphere, Cassini Division rings & moons Titan/Enceladus/Rhea), Prop_Rubber_Stamp, Prop_Wooden_Dresser, Prop_Swivel_Chair, Prop_Headphones, Prop_Interrogation_Spotlight, and 4 cosmic meshes. 80 – 110 hrs 95 hrs
6 Creative Technologist / Three.js WebGL Engine Architect Engineering the 2,025-line real-time Three.js application (public/app.js): circular 8-act carousel soundstage (STAGE_RADIUS = 28), 360° Cosmic Nebula & Milky Way Sky Dome, 160 orbiting 3D Blender cosmic mesh instances replacing 2D point sprites, SkeletonUtils.clone() character instancing across 14 stage slots, real-time prop choreography (Act 1 scanning magnifying glass, Act 5 laser fingerprint scanner, Act 6 writing pen + magnifying lens + physically slamming “Mom is Safe!” rubber stamp), and interactive “3D Cast Close-Up” orbit camera mode. 80 – 100 hrs 90 hrs
7 Voice Director, Neural TTS & Procedural Audio Composer Multi-character neural voiceover production (scene_1.mp3–scene_8.mp3) with distinct character voices for Detective Ella, Mom, Amy, and Lizzy, paired with a real-time Web Audio API procedural mystery soundtrack synthesizer (MysterySoundtrack generating a minor-key walking bassline, celesta/vibraphone arpeggios, woodblock percussion, and an Act 8 major-key finale). 24 – 36 hrs 30 hrs
8 Frontend Web Audio & IndexedDB Application Engineer Designing the responsive cinema HUD (public/styles.css, public/index.html), letterbox framing, 8-act interactive storyboard timeline scrubber, comic comparison modal, and in-browser Voiceover Recording Studio (MediaRecorder API, live AnalyserNode frequency bar visualizer, scene-by-scene teleprompter script cards, and persistent IndexedDB audio blob storage). 24 – 32 hrs 28 hrs
9 Systems & Network Performance Engineer Refactoring 76.8 MB of sequential .glb downloads into a parallel Promise.all streaming pipeline; diagnosing Nginx HTTP/2 Brotli (Content-Encoding: br) omission of Content-Length headers (which causes xhr.lengthComputable === false in Three.js GLTFLoader) and engineering decompressed expectedBytes progress telemetry, module-relative import.meta.url path resolution, and incremental per-model scene mounting (mountLoadedAsset). 16 – 24 hrs 20 hrs
10 Multi-Tenant CMS & Bare-Metal DevOps Engineer Dual-write CMS integration into multipleDomainCMS on winwinhost.com, entrypoint routing (/forensics-hunt/, /ella.html, /forensics-hunt.html), Open Graph social card synthesis (og_preview.png), rsync deployment of 83.9 MB of production assets to bare-metal production (192.168.11.32), and empirical HTTP 200 verification across every HTML, JS, CSS, MP3, PNG, and GLB resource. 12 – 16 hrs 14 hrs
TOTAL 10 Specialized Disciplines Complete 8-Act 3D WebGL Movie, 4 Rigged Characters, 20 3D Props & Recording Studio 480 – 646 hrs 563 Man-Hours

The Compression Ratio: At a midpoint of 563 billable studio hours (~3.35 full-time months on a 40-hour work week, or 2 full months of 70-hour/week non-stop startup crunch, valued at $67,500–$95,000 at standard $120–$170/hr creative engineering rates), executing the entire artistic, 3D modeling, skeletal rigging, WebGL programming, audio synthesis, and deployment lifecycle in 6 hours represents a 93.8× compression of human-capital time.

2. Phase I: From Pencil on Paper to Restored 8-Panel Digital Storyboard

Every great animated adaptation begins by respecting the creator's original storyboard. Looking closely at Ella's original pencil drawing on paper (Figure 1), you can see how rich her visual storytelling already is: in Panel 1 (“1. Forensics HUNT!”), she drew a rolling swivel office chair on caster wheels, over-the-ear headphones and a friendship necklace on the round rug, a chest of drawers with a potted plant, cup of pens, and open notebook on top, sticky notes on the wall, a framed portrait, and a door with a “Katey” nameplate.

Across the remaining panels, Katey lines up three suspects—Mom, Amy, and her sister Lizzy—conducts an interrogation (“3. IMARAGATION”) with detailed behavioral callout arrows, records their alibis, compares inked thumbprints to clear Amy, cross-examines her detective notes on Mom vs. Lizzy, and exposes Lizzy in cargo pants under the banner “7. She Was GUILTY”.

Forensics HUNT! 8-Panel Colored Comic Strip by Ella with all 5 continuity edits applied
Figure 3: The digitally inked and colored 8-panel comic strip after applying 5 non-destructive continuity restorations while preserving Ella's original composition, character expressions, and dialogue.

Before slicing the comic panels into high-resolution textures for our 3D soundstage frames, we delegated to specialized image-editing subagents to perform five surgical continuity fixes requested during review:

  1. Panel 1 (“1. Forensics HUNT!”): Removed an accidental floating cream-colored open door shape on the upper-right lavender bedroom wall above the wooden dresser.
  2. Panel 3 (“3. INTERROGATION”): Removed the premature spoiler label “guilty” and its curved arrow pointing at Lizzy (visible on the right margin of Panel 3 in Ella's pencil drawing) so the audience can solve the mystery alongside Katey using the behavioral clues (“scared”, “answering slowly and thinking”, “looking down”, “mumbling”).
  3. Panel 5 (“5. Let's Narrow this Down! By Fingerprints!”): Separated the “Crime scene:” fingerprint box on the left from the three individual suspect fingerprint cards (“Mom”, “Amy”, and “Lizzy”) side-by-side on the right.
  4. Panel 7 (“7. She Was GUILTY!”): Shortened Lizzy's hair into a chin-length chestnut-brown bob to maintain strict visual continuity with her short hair in Panel 3.
  5. Panel 8 (“8. by Ella”): Replaced the top header with “8. by Ella” above the hand-drawn red heart, smiley face, and star.

3. Phase II: Sculpting & Rigging 4 Stylized 3D Characters in Blender via MCP

Early prototypes of browser-based 3D scenes often fall into the trap of assembling characters out of primitive spheres, cylinders, and cones—an approach that immediately reads as programmer art. To honor Ella's characters properly, we connected directly to a live Blender 4.x instance via the Model Context Protocol (MCP) and built all four characters on top of the official Blender Studio Human Base Meshes v1.4.1 (GEO-body_female_stylized) all-quad topology.

Rather than stopping at a generic mannequin, each of the four characters underwent custom mesh sculpting, wardrobe extraction, surface raycasting, skeletal rigging, and 120-frame keyframe animation inside Blender:

1. Lizzy — The Guilty Sister (lizzy_3d.glb, 7.62 MB)

Lizzy appears across Acts 2, 3, 4, 6, 7, and 8. Matching Ella's drawings in Panels 3 and 7, we sculpted her chin-length wavy chestnut-brown bob with a center part, upturned worried eyebrows, a charcoal-plum long-sleeve crop top (Mat_Studio_CropTop), wide-leg olive-green cargo pants with extruded 3D side pockets, and chunky white sneakers. Her 120-frame Lizzy_Nervous_Interrogation skeletal loop tilts her head downward in shame, hunches her shoulders, fidgets her hands in front of her waist, and drives a rapid micro-oscillation on her jaw and head to enact her “mumbling” clue from Panel 3.

Blender 3D render of Stylized Lizzy showing front, three-quarter, and side views of her chin-length brown bob, crop top, olive cargo pants, and nervous interrogation pose
Figure 4: Stylized 3D Lizzy (lizzy_3d.glb) built on the Blender Studio all-quad base mesh, rigged and posed in her 120-frame Lizzy_Nervous_Interrogation loop.

2. Katey's Mom — The Lip-Biting Suspect (mom_3d.glb, 8.07 MB)

In Ella's pencil sketch of Panel 3, Mom wears a shirt underneath strapped overalls with her hair pulled up into a high bun, and her callout arrow points directly to her mouth with the label: “biting lip”. Using Blender's Python API over MCP, we sculpted a pulled-up crown hair shell topped with a voluminous top-knot bun (Mom_Studio_Hair), added pearl stud earrings, and sculpted a subtle lower-lip tuck with an upper tooth edge (Mom_Studio_EarringsAndTeeth). For her denim overalls (Mom_Studio_Overalls), we used BVH surface raycasting (scene.ray_cast) against her torso mesh to project a form-fitting 3D front bib, front patch pocket, over-the-shoulder straps, and metallic silver overall clasps (Mom_Overalls_Buckles) with zero mesh intersection.

Blender 3D render of Katey's Mom with pulled-up bun, pearl earrings, biting-lip expression, pink crew-neck shirt, and raycasted blue denim overalls
Figure 5: Stylized 3D Katey's Mom (mom_3d.glb) featuring BVH-raycasted denim overall bib, straps, silver buckles, and her 120-frame Mom_Biting_Lip_Interrogation animation.

3. Amy — The Friend & Topological Finger Surgery for the ✌️ Peace Sign (amy_3d.glb, 7.98 MB)

In Ella's original pencil drawing of Panel 3, Amy wears a star T-shirt, flashes a wide toothy grin labeled “nervous smile”, and holds up her hand with an arrow labeled “forced peace”. Recreating that V-Peace Sign (✌️) in 3D presented a classic character rigging challenge: in the Blender Studio GEO-body_female_stylized mesh, the four fingers of each hand are modeled as separate topological shells within the same mesh object, initially weighted as a single mitten group.

To make Amy physically articulate a true 3D ✌️ peace sign without mesh tearing, we wrote a topological graph-traversal script inside Blender MCP that:

  1. Extracted all vertices in the right-hand finger region (X < -0.58) and built an edge-adjacency graph via bmesh.
  2. Executed breadth-first connected-component clustering to isolate the 4 discrete finger mesh islands.
  3. Sorted the 4 islands along the Y-axis (anterior-to-posterior: Index, Middle, Ring, Pinky).
  4. Assigned Index + Middle to a dedicated peace_fingers.R bone (spread ±0.24 rad apart, fully extended upward) while binding Ring + Pinky to a separate fingers.R bone curled 1.35 rad into her palm!
Blender 3D render of Stylized Amy with long wavy brown hair, wide open-teeth nervous smile, olive star tee, and articulated 3D V-Peace sign
Figure 6: Stylized 3D Amy (amy_3d.glb) showcasing topological 4-island finger separation for her articulated 3D V-Peace sign (✌️), sculpted open-teeth nervous smile, and 3D yellow chest star.

4. Katey — The Detective Protagonist (katey_3d.glb, 8.00 MB)

To complete the 4-character cast, we sculpted and rigged Katey herself (from the framed portrait in Panel 1) for Act 1 (“1. Forensics HUNT!”) and the Act 8 finale curtain call. She features sleek long dark espresso-brown hair framing her shoulders, a lavender-violet V-neck long-sleeve sweater (Mat_Katey_Sweater), a raycasted 3D dark velvet choker necklace (Katey_Choker), fitted denim jeans, and a 120-frame Katey_Room_Discovery animation where she scans her empty bedroom in disbelief with her hands raised.

Blender 3D render of Stylized Katey with long dark brown hair, velvet choker necklace, lavender V-neck sweater, and denim jeans
Figure 7: Stylized 3D Katey (katey_3d.glb) in her lavender V-neck sweater and raycasted velvet choker, performing her 120-frame Katey_Room_Discovery animation.

LookDev Diagnostic Lesson — Vertex Color Bleed in GLTF Exports: During shader verification, we discovered that the Blender Studio base mesh ships with a built-in sculpt mask/cavity vertex color attribute (COLOR_0). When exported to GLTF and rendered in Three.js, Three.js automatically multiplies material.color by COLOR_0 whenever vertex colors are present on a geometry primitive—causing vibrant pink, lavender, and olive shirts to render almost black in areas where clothing was extracted from torso faces. Explicitly stripping vertex color layers in Blender and setting node.material.vertexColors = false in Three.js restored 100% accurate PBR studio colors.

4. Phase III: Replacing Every 3D Placeholder with 20 Real Blender & Poly Haven Props

In our initial Three.js scene prototype, environmental background items—such as Katey's ransacked bedroom furniture from Panel 1, the interrogation chairs and spotlights, the detective's magnifying glass, the Act 6 detective notes, and floating background particles—were represented by simple geometric primitives and 2D THREE.Points sprites.

We systematically eliminated those placeholders by building a unified, 20-prop 3D Blender library (scene_props_3d.glb, 45.16 MB) combining curated Poly Haven CC0 3D PBR assets with bespoke beveled hard-surface Blender models:

Blender 3D render of bedroom and interrogation stage props including walnut dresser with open drawers, purple rolling swivel chair, Poly Haven succulent, open binder notebook, interrogation chair, and theatrical spotlight
Figure 8: First batch of 3D stage props in scene_props_3d.glb: walnut dresser with hollow pulled-out drawers & spilled papers, purple 5-caster swivel chair, Poly Haven potted haworthia succulent, binder notebook, interrogation chair, and barn-door theatrical spotlight.
  • Act 1 Bedroom Crime Scene Props (Directly From Ella's Panel 1 Drawing): Custom 3D walnut chest of drawers with hollow pulled-out drawer boxes, brass knobs, and spilled papers (Prop_Wooden_Dresser); custom 3D purple ergonomic rolling swivel chair on a 5-star caster base (Prop_Swivel_Chair); custom 3D over-ear headphones & friendship necklace on the rug (Prop_Headphones); plus Poly Haven CC0 potted_plant_04 (zebra haworthia succulent), binder_notebook, stationery_supplies_pencilcup, hanging_picture_frame_02, office_notepads_sticky_stack, and a hovering Poly Haven 3D Magnifying Glass (Prop_Magnifying_Glass) with a translucent optical glass lens scanning the clues.
  • Act 3 & Act 7 Interrogation Stage Props: Three Poly Haven 3D Interrogation Chairs (Prop_Interrogation_Chair) and three overhead 3D Theatrical Barn-Door Spotlights (Prop_Interrogation_Spotlight) complete with ceiling pipe clamps, U-shaped mounting yokes, cooling fins, 4 flared barn-door flaps, and glowing Fresnel lenses.
  • Act 6 Detective Notes & Slamming Rubber Stamp Station: Previously, Act 6 only displayed a simple “Mom is Safe!” stamp animation, which felt like half the story was missing. We rebuilt Act 6 into a complete forensic desk featuring a Poly Haven 3D Masonite Clipboard & Lined Yellow Legal Pad (Prop_Detective_Clipboard), itemized multi-line Detective Notes plaques comparing Mom (“Mom: Biting lip — ✓ Just nervous, Alibi checks out!”) against Lizzy (“Lizzy: Scared, answering slowly, and thinking long, looking down in shame, mumbling.”), an animated Poly Haven 3D Executive Pen (Prop_Detective_Pen) actively writing across the legal pad, a scanning 3D Magnifying Glass, and a custom 3D Turned-Walnut & Brass Rubber Stamp (Prop_Rubber_Stamp) that physically cocks back and slams down onto the “Mom is Safe!” stamp impression!
  • Colossal 3D Saturn Backdrop & 160 3D Cosmic Orbiters: To give the circular 8-stage round-robin carousel a true cosmic atmosphere, we replaced the dark studio void with a 360° Cosmic Nebula & Milky Way Sky Dome, a colossal 3D Ringed Saturn (Prop_Saturn_Backdrop) with a 512×256 procedural banded golden-amber atmosphere, translucent UV-mapped A/B/C/F rings featuring the Cassini Division and Encke Gap, and orbiting 3D moons Titan, Enceladus, and Rhea. Finally, we deleted all 2D THREE.Points particle sprites and replaced them with 160 real 3D Blender Mesh Instances (Prop_Cosmic_Star, Prop_Cosmic_Sparkle, Prop_Cosmic_Crystal, Prop_Cosmic_Asteroid from Poly Haven's moon_rock_04, and Prop_Cosmic_Planet) gently orbiting and tumbling in 3D space around the carousel.

5. Phase IV: Diagnosing Parallel GLTF Streaming Under Nginx Brotli Compression

With 4 rigged character models and a 20-prop library totaling 76,836,912 bytes (73.3 MB) of uncompressed .glb binary geometry and 1K PBR textures, loading assets sequentially or without visual feedback is a non-starter. We engineered an initial startup loader overlay featuring a celestial spinner, live MB telemetry, and parallel stream multiplexing via Promise.all.

Immediately after deploying to production, we encountered a classic real-world systems bug: the loader appeared frozen at 0% on production before jumping straight to completion, and visiting /ella.html never started the loader at all. Empirical inspection via curl -I uncovered two distinct root causes:

  1. Nginx Brotli Compression (Content-Encoding: br) Omits Content-Length: When Nginx compresses .glb responses on the fly using Brotli streaming, it omits the HTTP Content-Length response header because the total compressed stream size is unknown until compression finishes. Consequently, inside Three.js GLTFLoader's onProgress(xhr) callback, xhr.lengthComputable is always false and xhr.total is 0—even though xhr.loaded accurately reports the decompressed byte count received on every network chunk!
  2. Root Alias Path Resolution (/ella.html vs. /forensics-hunt/): Because THREE.FileLoader resolves relative URLs (./katey_3d.glb) against document.baseURI rather than the ES module script's own directory, an entrypoint at the domain root requires both <base href="/forensics-hunt/" /> in <head> and module-relative URL resolution via new URL(filename, import.meta.url).href.
// Module-relative URL resolution + exact uncompressed byte manifest for Brotli streams
const resolveAssetUrl = (filename) => new URL(filename, import.meta.url).href;
const ASSET_SPECS = [
  { id: 'katey', label: 'Katey (Protagonist)',     url: resolveAssetUrl('./katey_3d.glb'),       expectedBytes: 8002912 },
  { id: 'mom',   label: "Katey's Mom",             url: resolveAssetUrl('./mom_3d.glb'),         expectedBytes: 8066276 },
  { id: 'amy',   label: 'Amy (Friend ✌️)',         url: resolveAssetUrl('./amy_3d.glb'),         expectedBytes: 7981260 },
  { id: 'lizzy', label: 'Lizzy (Sister)',          url: resolveAssetUrl('./lizzy_3d.glb'),       expectedBytes: 7622252 },
  { id: 'props', label: '3D Saturn & Scene Props', url: resolveAssetUrl('./scene_props_3d.glb'), expectedBytes: 45164212 }
];

// Inside GLTFLoader onProgress(xhr): fallback to spec.expectedBytes when Content-Encoding: br omits Content-Length
(xhr) => {
  const loadedBytes = xhr && typeof xhr.loaded === 'number' ? xhr.loaded : 0;
  const totalBytes =
    xhr && xhr.lengthComputable && xhr.total > 0 ? xhr.total : spec.expectedBytes;
  const item = assetProgressMap.get(spec.id);
  if (item && !item.done) {
    item.loaded = loadedBytes;
    item.total = totalBytes;
    item.ratio = Math.max(item.ratio, Math.min(0.98, loadedBytes / Math.max(1, totalBytes)));
  }
  updateLoaderUI(spec.label);
}

With this fix in place, all 5 .glb streams download concurrently over HTTP/2, mounting each character and prop into the 3D scene the instant its individual stream resolves while smoothly incrementing the progress bar from 3% to 100% across all 73.3 MB.

6. Why This Is Both Exciting and Terrifying

Stepping back to look at what transpired between Figure 1 (a pencil drawing on paper) and the live 3D WebGL movie at winwinhost.com/ella.html provokes two simultaneous, seemingly contradictory reactions:

Why It Is Exciting: The Democratization of Studio-Grade Storytelling

Until very recently, if a child drew an 8-panel comic strip in pencil on paper and imagined seeing her characters come alive in a 3D animated movie—with her sister Lizzy looking down and mumbling under an interrogation spotlight, her friend Amy flashing a 3D peace sign, her mom biting her lip in denim overalls, a detective clipboard and rubber stamp slamming down on “Mom is Safe!”, and Saturn rotating in a cosmic sky—turning that vision into reality required a studio budget of $65,000 to $95,000 and three months of specialized labor. Today, a parent and child can sit together, direct an architectural loop, and watch that exact 3D movie premiere in their browser the same evening—and even open the built-in Voiceover Studio so the child can record her own voice for every scene.

Why It Is Terrifying: The Collapse of Departmental Silos

For the software engineering, 3D modeling, animation, and digital agency industries, the implications are sobering. The traditional moat protecting specialized digital production agencies was multi-disciplinary coordination friction: a WebGL programmer rarely knew how to sculpt a stylized face or separate topological finger islands in Blender; a 3D character rigger rarely debugged HTTP/2 Brotli Content-Length headers or configured Nginx edge proxies; an audio engineer rarely built IndexedDB persistence layers.

When an autonomous agent operates with direct programmatic tool execution across Blender's Python API (via MCP), Three.js WebGL, Web Audio DSP synthesis, and Linux production infrastructure, those departmental boundaries dissolve into a single unified feedback loop. A single Principal Architect who understands how to direct, critique, and verify across all 10 layers can now out-produce an entire 6-person creative studio by nearly two orders of magnitude.

The future belongs to the architects who embrace this convergence—refusing to settle for placeholder abstractions, demanding studio-grade craftsmanship at every layer of the stack, and turning human imagination into interactive reality at the speed of thought.