{
 "narration": [
  {
   "stage": "S1",
   "media": "audio/narration_S1.mp3",
   "model": "Gemini 3.8 Flash TTS"
  },
  {
   "stage": "S2",
   "media": "audio/narration_S2.mp3",
   "model": "Gemini 3.8 Flash TTS"
  },
  {
   "stage": "S3",
   "media": "audio/narration_S3.mp3",
   "model": "Gemini 3.8 Flash TTS"
  },
  {
   "stage": "S4",
   "media": "audio/narration_S4.mp3",
   "model": "Gemini 3.8 Flash TTS"
  },
  {
   "stage": "S5",
   "media": "audio/narration_S5.mp3",
   "model": "Gemini 3.8 Flash TTS"
  },
  {
   "stage": "S6",
   "media": "audio/narration_S6.mp3",
   "model": "Gemini 3.8 Flash TTS"
  }
 ],
 "making": [
  {
   "id": "sources",
   "title": "Sources first",
   "text": "Open textbooks fixed every valve, flow and signal for each of the six stages before any modelling (OpenStax Anatomy and Physiology 2e, the Wiggers diagram, NIH NHLBI). A script checks the model against that table: 43 checks, 0 failures.",
   "image": "making/step_sources.webp",
   "models": [],
   "tools": [
    "automated table check"
   ],
   "calls": 0,
   "cu": 0,
   "prompts": []
  },
  {
   "id": "model",
   "title": "One heart model, in code",
   "text": "A signed distance model of a typical adult heart: four chambers, four valves, the great vessels and the conduction path. Stage parameters change chamber volumes, wall thickness, valve states and the valve plane.",
   "image": "making/step_model.webp",
   "models": [],
   "tools": [
    "numpy signed distance model",
    "marching cubes"
   ],
   "calls": 0,
   "cu": 0,
   "prompts": []
  },
  {
   "id": "tissue",
   "title": "Tissue materials",
   "text": "PATINA Material generated the seamless epicardium and cut-muscle maps (colour, normal, roughness, height) that the renders project onto the model.",
   "image": "making/step_tissue.webp",
   "models": [
    {
     "id": "model_patina-material",
     "name": "PATINA Material"
    }
   ],
   "tools": [],
   "calls": 2,
   "cu": 30,
   "prompts": [
    {
     "label": "PBR tissue material: epicardium",
     "model": "PATINA Material",
     "prompt": "heart muscle surface, epicardium: smooth moist living tissue, fine parallel muscle fibre striations under a thin glossy membrane, faint tiny capillaries, soft pink-red with subtle warm variation, no fat, no blood pools, anatomical specimen quality, evenly lit, seamless"
    },
    {
     "label": "PBR tissue material: myocardium cut face",
     "model": "PATINA Material",
     "prompt": "cross-section of heart muscle (myocardium) cut with a clean blade: dense deep red muscle fibre bundles in varying directions, fine connective tissue lines between bundles, moist satin surface, no blood pools, no fat, anatomical specimen quality, evenly lit, seamless"
    }
   ]
  },
  {
   "id": "renders",
   "title": "Renders from one locked camera",
   "text": "Every stage, layer and overlay renders from the same camera and meshes, in real time on the CPU with three.js: 48 stills. Blender Cycles rendered the key-stage hero stills (right).",
   "image": "making/step_renders.webp",
   "models": [],
   "tools": [
    "three.js on the CPU (SwiftShader)",
    "Blender 5.2 Cycles"
   ],
   "calls": 0,
   "cu": 0,
   "prompts": []
  },
  {
   "id": "plates",
   "title": "A medical plate for every still",
   "text": "An advisory review by the Scenario LLM rated the medical plate 8 out of 10, against 3.5 to 6 for the renders. GPT Image 2.5 Sunburst then redrew the anatomy-only renders (left) as atlas plates (right), six stages per call, with one plate as the style reference.",
   "image": "making/step_plates.webp",
   "models": [
    {
     "id": "model_scenario-llm",
     "name": "Scenario LLM (asset analyze, claude-opus-4-8)"
    },
    {
     "id": "model_openai-gpt-image-2-5-sunburst",
     "name": "GPT Image 2.5 Sunburst"
    }
   ],
   "tools": [],
   "calls": 6,
   "cu": 104.75,
   "prompts": [
    {
     "label": "medical plates L3: six stages in one 3x2 grid (anatomy only)",
     "model": "GPT Image 2.5 Sunburst",
     "prompt": "Image 1 is a 3 by 2 grid of six separate panels: the same heart at six stages of one heartbeat, from the same camera. Redraw every panel in place as a flat, clean medical textbook illustration printed in an anatomy atlas, exactly in the style of image 2 (same palette, line work, hatching and white paper). The whole grid becomes one white sheet; keep the six panels at the same positions and sizes, each heart covering the same pixels as in image 1. The panels differ on purpose and every difference must stay: chamber sizes, wall thickness, and which valves are open or closed. Do not copy anything from one panel to another. Draw no arrows and no glowing lines; image 1 has none. Keep every structure exactly as in image 1: the four chambers, the four valves, the great vessels and their number (superior and inferior vena cava, pulmonary trunk with its arteries, aorta with three arch branches, four pulmonary veins), papillary muscles, chordae, coronary vessels, camera angle and framing. Do not add, remove, move or invent any anatomy. No text, no labels, no letters, no numbers, no panel borders, no watermark."
    }
   ]
  },
  {
   "id": "overlays",
   "title": "Arrows and signal from the model",
   "text": "The first plate pass drew the arrows too, and turned the pulmonary vein arrows around (left). Since then the arrows, the conduction path and the gold wash come from the model's own overlay passes, laid over each aligned plate (right). The cost of that first pass is in the step above.",
   "image": "making/step_overlays.webp",
   "models": [],
   "tools": [
    "overlay passes from the model"
   ],
   "calls": 0,
   "cu": 0,
   "prompts": []
  },
  {
   "id": "longaxis",
   "title": "A second section for the aortic valve",
   "text": "A cut through the apex, the mitral valve and the aortic valve shows the outflow of the left ventricle and the aortic valve, open at ejection. It adds a fourth layer to all six stages.",
   "image": "making/step_longaxis.webp",
   "models": [],
   "tools": [
    "a second cut plane in the model"
   ],
   "calls": 0,
   "cu": 0,
   "prompts": []
  },
  {
   "id": "treatments",
   "title": "Three art treatments of the key stage",
   "text": "Medical illustration, watercolour and glass, by GPT Image 2.5 Sunburst. It won a shoot-out against Gemini 3.0 Pro on the same render (edge F-score 0.878 against 0.681), and each result was scored against the render's own edges.",
   "image": "making/step_treatments.webp",
   "models": [
    {
     "id": "model_openai-gpt-image-2-5-sunburst",
     "name": "GPT Image 2.5 Sunburst"
    },
    {
     "id": "model_google-gemini-pro-image-editing",
     "name": "Gemini 3.0 Pro"
    }
   ],
   "tools": [],
   "calls": 14,
   "cu": 181,
   "prompts": [
    {
     "label": "treatment: medical, stage 3 section (L3) flow",
     "model": "GPT Image 2.5 Sunburst",
     "prompt": "Redraw this exact heart as a flat, clean medical textbook illustration printed in an anatomy atlas, on a plain white background: matte airbrushed colour fills with soft tonal gradients, crisp thin dark contour lines around every structure, fine hatching on the cut muscle, no glossy highlights, no photographic lighting, no reflections, no glow, no dark background. Atlas palette: muscle brick red, chamber linings pale pink, cut muscle crimson, valves cream, great vessels pale; flow arrows become flat solid vector arrows in blue and red with the same paths and directions. Keep every structure exactly as in the input image: the same outline and silhouette, the same four chambers, the same four valves and their open or closed state, the same great vessels and their number (superior and inferior vena cava, pulmonary trunk with left and right pulmonary arteries, aorta with three arch branches, four pulmonary veins), the same coronary vessels, the same position, size, camera angle and framing (do not zoom, crop or recentre: the heart covers the same pixels as in the input, with the same margins). Keep every flow arrow and every glowing conduction line exactly where it is, with the same colour and direction. Do not add, remove, move or invent any anatomy. No text, no labels, no letters, no numbers, no watermark."
    },
    {
     "label": "treatment: watercolour, stage 3 section (L3) flow",
     "model": "GPT Image 2.5 Sunburst",
     "prompt": "Repaint this exact heart as a loose hand-painted watercolour anatomical study by an illustrator, on warm off-white cold-press paper that fills the whole background. Wet-on-wet washes in a few simplified colour areas, visible brush strokes and pigment granulation, hard-edged blooms, white paper left bare for the highlights, a light sepia pen line drawn freely over the forms. No photographic texture, no fine net or web pattern, no glossy highlights, no dark background, no 3D rendering look. Flow arrows become translucent painted strokes in ultramarine and crimson along the same paths. Keep every structure exactly as in the input image: the same outline and silhouette, the same four chambers, the same four valves and their open or closed state, the same great vessels and their number (superior and inferior vena cava, pulmonary trunk with left and right pulmonary arteries, aorta with three arch branches, four pulmonary veins), the same coronary vessels, the same position, size, camera angle and framing (do not zoom, crop or recentre: the heart covers the same pixels as in the input, with the same margins). Keep every flow arrow and every glowing conduction line exactly where it is, with the same colour and direction. Do not add, remove, move or invent any anatomy. No text, no labels, no letters, no numbers, no watermark."
    },
    {
     "label": "treatment: glass, stage 3 section (L3) flow",
     "model": "GPT Image 2.5 Sunburst",
     "prompt": "Remake this exact heart as a sculpture of clear hand-blown glass photographed in a dark museum vitrine: fully transparent and refractive, the tissue in clear glass with a faint ruby tint, the right-heart structures in faint cobalt glass, valves in frosted white glass, bright specular edges and caustics, the chambers visible through the glass walls; flow arrows become solid glowing neon glass tubes in blue and red along the same paths; deep black background. Keep every structure exactly as in the input image: the same outline and silhouette, the same four chambers, the same four valves and their open or closed state, the same great vessels and their number (superior and inferior vena cava, pulmonary trunk with left and right pulmonary arteries, aorta with three arch branches, four pulmonary veins), the same coronary vessels, the same position, size, camera angle and framing (do not zoom, crop or recentre: the heart covers the same pixels as in the input, with the same margins). Keep every flow arrow and every glowing conduction line exactly where it is, with the same colour and direction. Do not add, remove, move or invent any anatomy. No text, no labels, no letters, no numbers, no watermark."
    }
   ]
  },
  {
   "id": "narration",
   "title": "Six narrations",
   "text": "Gemini 3.8 Flash TTS voices the six stages. It won a three-voice shoot-out on the same two lines against Minimax Speech 2.8 HD and ElevenLabs 3; every take was transcribed and checked word by word.",
   "image": "making/step_narration.webp",
   "models": [
    {
     "id": "model_google-gemini-3-8-flash-tts",
     "name": "Gemini 3.8 Flash TTS"
    },
    {
     "id": "model_minimax-speech-2-8-hd",
     "name": "Minimax Speech 2.8 HD"
    },
    {
     "id": "model_elevenlabs-tts-v3",
     "name": "ElevenLabs 3"
    },
    {
     "id": "model_google-gemini-3-5-transcribe",
     "name": "Gemini 3.5 Transcribe"
    }
   ],
   "tools": [],
   "calls": 12,
   "cu": 71,
   "prompts": [
    {
     "label": "narration S1",
     "model": "Gemini 3.8 Flash TTS",
     "prompt": "Stage one. A signal starts in the sinoatrial node, high in the right atrium, and spreads across both atria. They contract and push the last part of the filling into the ventricles."
    }
   ]
  },
  {
   "id": "howto",
   "title": "The how-to film",
   "text": "The film follows the path of the blood through one beat on the see-through plate: every stop is a step, every valve a check, and one ECG beat per Scenario call. The same voice reads 13 lines over a score in sections by ElevenLabs Music Advanced v2.5. A first, template-look version was voiced and scored, then replaced before rendering; its calls are counted here.",
   "image": "making/step_howto.webp",
   "models": [
    {
     "id": "model_google-gemini-3-8-flash-tts",
     "name": "Gemini 3.8 Flash TTS"
    },
    {
     "id": "model_elevenlabs-music-advanced-v2-5",
     "name": "ElevenLabs Music Advanced v2.5"
    }
   ],
   "tools": [],
   "calls": 19,
   "cu": 155,
   "prompts": [
    {
     "label": "how-to v2 (The Circuit) score: six sections timed to the route (right heart, lungs, left heart, out), 5 s coda",
     "model": "ElevenLabs Music Advanced v2.5",
     "prompt": "[\n {\n  \"text\": \"[Intro] {a single soft felt piano motif of four notes over a very low, muted double pulse at 60 BPM, like a calm resting heartbeat; lots of air}\",\n  \"durationSeconds\": 11\n },\n {\n  \"text\": \"[Right heart] {the same four-note piano motif, warm sustained strings enter underneath, the soft double pulse continues; steady and curious}\",\n  \"durationSeconds\": 43\n },\n {\n  \"text\": \"[Lungs] {airy and lighter: the motif alone over soft sustained strings, the pulse slows but stays present; never silent}\",\n  \"durationSeconds\": 19\n },\n {\n  \"text\": \"[Left heart] {the double pulse returns, strings and piano together, fuller and warm, gently building}\",\n  \"durationSeconds\": 30\n },\n {\n  \"text\": \"[Close] {the piano motif one last time over a held string chord}\",\n  \"durationSeconds\": 9\n },\n {\n  \"text\": \"[Coda] {a single low piano note and the last soft pulse, fading to silence}\",\n  \"durationSeconds\": 5\n }\n]"
    }
   ]
  }
 ],
 "downloads": [
  {
   "label": "Recipe (RECIPE.md, prompts.json, models.json, manifest)",
   "file": "downloads/inside-a-heartbeat-recipe.zip",
   "href": "downloads/inside-a-heartbeat-recipe.zip",
   "bytes": 22036
  },
  {
   "label": "Reproduction skill for your agent",
   "file": "downloads/scenario-anatomy-explainer-skill.zip",
   "href": "downloads/scenario-anatomy-explainer-skill.zip",
   "bytes": 9322
  },
  {
   "label": "3D heart, stage 3 (GLB)",
   "file": "3d/heart_S3.glb",
   "href": "pack/3d/heart_S3.glb",
   "bytes": 1894676
  }
 ],
 "howto": {
  "media": "howto/inside-a-heartbeat-howto-titles-web.mp4",
  "poster": "howto/inside-a-heartbeat-howto-poster.webp",
  "chapters": [
   {
    "t": 0.0,
    "name": "The Circuit"
   },
   {
    "t": 10.97,
    "name": "Sources first"
   },
   {
    "t": 20.67,
    "name": "The heart in code"
   },
   {
    "t": 28.84,
    "name": "Tissue maps"
   },
   {
    "t": 36.38,
    "name": "One locked camera"
   },
   {
    "t": 45.4,
    "name": "The shoot-out"
   },
   {
    "t": 54.08,
    "name": "Three finishes"
   },
   {
    "t": 63.13,
    "name": "The review"
   },
   {
    "t": 72.58,
    "name": "Plates, anatomy only"
   },
   {
    "t": 80.96,
    "name": "A second section"
   },
   {
    "t": 86.68,
    "name": "The voices"
   },
   {
    "t": 94.56,
    "name": "Word checks"
   },
   {
    "t": 102.73,
    "name": "Out into the world"
   }
  ]
 },
 "heroes": [
  {
   "key": "S3_L1_base",
   "media": "stills/hero_S3_L1_base.webp",
   "model": "Blender 5.2 Cycles (CPU)",
   "layer": "L1"
  },
  {
   "key": "S3_L3_base",
   "media": "stills/hero_S3_L3_base.webp",
   "model": "Blender 5.2 Cycles (CPU)",
   "layer": "L3"
  }
 ],
 "labels": {
  "S1_L1": [
   {
    "name": "Right atrium",
    "x": 0.2228,
    "y": 0.4952,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4876,
    "y": 0.7248,
    "side": "left"
   },
   {
    "name": "Left ventricle",
    "x": 0.7755,
    "y": 0.7329,
    "side": "right"
   },
   {
    "name": "Left auricle",
    "x": 0.6716,
    "y": 0.457,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.2489,
    "y": 0.2619,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.4039,
    "y": 0.282,
    "side": "left"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5638,
    "y": 0.4004,
    "side": "right"
   },
   {
    "name": "Pulmonary veins",
    "x": 0.7778,
    "y": 0.4053,
    "side": "right"
   },
   {
    "name": "Anterior interventricular artery",
    "x": 0.731,
    "y": 0.7074,
    "side": "right"
   },
   {
    "name": "Right coronary artery",
    "x": 0.2853,
    "y": 0.5975,
    "side": "left"
   }
  ],
  "S1_L3": [
   {
    "name": "Right atrium",
    "x": 0.3018,
    "y": 0.4684,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.49,
    "y": 0.741,
    "side": "left"
   },
   {
    "name": "Left atrium",
    "x": 0.5903,
    "y": 0.451,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.6687,
    "y": 0.7053,
    "side": "right"
   },
   {
    "name": "Interventricular septum",
    "x": 0.6102,
    "y": 0.7391,
    "side": "left"
   },
   {
    "name": "Tricuspid valve",
    "x": 0.3874,
    "y": 0.5558,
    "side": "left"
   },
   {
    "name": "Mitral valve",
    "x": 0.5715,
    "y": 0.5254,
    "side": "right"
   },
   {
    "name": "Pulmonary valve",
    "x": 0.5245,
    "y": 0.4487,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.3073,
    "y": 0.3146,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.5345,
    "y": 0.2593,
    "side": "right"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5533,
    "y": 0.3853,
    "side": "right"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6386,
    "y": 0.7117,
    "side": "right"
   }
  ],
  "S1_L4": [
   {
    "name": "Left atrium",
    "x": 0.6025,
    "y": 0.4584,
    "side": "right"
   },
   {
    "name": "Mitral valve",
    "x": 0.5667,
    "y": 0.5404,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.584,
    "y": 0.734,
    "side": "right"
   },
   {
    "name": "Aortic valve",
    "x": 0.4606,
    "y": 0.4924,
    "side": "left"
   },
   {
    "name": "Ascending aorta",
    "x": 0.4104,
    "y": 0.374,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4122,
    "y": 0.7355,
    "side": "left"
   },
   {
    "name": "Interventricular septum",
    "x": 0.5018,
    "y": 0.7449,
    "side": "left"
   },
   {
    "name": "Right atrium",
    "x": 0.4026,
    "y": 0.4419,
    "side": "left"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6246,
    "y": 0.7181,
    "side": "right"
   }
  ],
  "S2_L1": [
   {
    "name": "Right atrium",
    "x": 0.2247,
    "y": 0.4986,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.49,
    "y": 0.7293,
    "side": "left"
   },
   {
    "name": "Left ventricle",
    "x": 0.7774,
    "y": 0.7364,
    "side": "right"
   },
   {
    "name": "Left auricle",
    "x": 0.6716,
    "y": 0.457,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.2489,
    "y": 0.2619,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.4039,
    "y": 0.282,
    "side": "left"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5657,
    "y": 0.4036,
    "side": "right"
   },
   {
    "name": "Pulmonary veins",
    "x": 0.7778,
    "y": 0.4053,
    "side": "right"
   },
   {
    "name": "Anterior interventricular artery",
    "x": 0.7323,
    "y": 0.711,
    "side": "right"
   },
   {
    "name": "Right coronary artery",
    "x": 0.2886,
    "y": 0.5987,
    "side": "left"
   }
  ],
  "S2_L3": [
   {
    "name": "Right atrium",
    "x": 0.3036,
    "y": 0.4718,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4924,
    "y": 0.7453,
    "side": "left"
   },
   {
    "name": "Left atrium",
    "x": 0.5918,
    "y": 0.4536,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.6706,
    "y": 0.7087,
    "side": "right"
   },
   {
    "name": "Interventricular septum",
    "x": 0.6124,
    "y": 0.743,
    "side": "left"
   },
   {
    "name": "Tricuspid valve",
    "x": 0.3911,
    "y": 0.5626,
    "side": "left"
   },
   {
    "name": "Mitral valve",
    "x": 0.5752,
    "y": 0.5321,
    "side": "right"
   },
   {
    "name": "Pulmonary valve",
    "x": 0.5263,
    "y": 0.4518,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.3073,
    "y": 0.3146,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.5345,
    "y": 0.2593,
    "side": "right"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.555,
    "y": 0.3884,
    "side": "right"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6382,
    "y": 0.713,
    "side": "right"
   }
  ],
  "S2_L4": [
   {
    "name": "Left atrium",
    "x": 0.6028,
    "y": 0.4613,
    "side": "right"
   },
   {
    "name": "Mitral valve",
    "x": 0.5675,
    "y": 0.5477,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.5844,
    "y": 0.7376,
    "side": "right"
   },
   {
    "name": "Aortic valve",
    "x": 0.461,
    "y": 0.4965,
    "side": "left"
   },
   {
    "name": "Ascending aorta",
    "x": 0.4104,
    "y": 0.374,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4127,
    "y": 0.7402,
    "side": "left"
   },
   {
    "name": "Interventricular septum",
    "x": 0.5022,
    "y": 0.749,
    "side": "left"
   },
   {
    "name": "Right atrium",
    "x": 0.403,
    "y": 0.4456,
    "side": "left"
   },
   {
    "name": "Papillary muscle",
    "x": 0.626,
    "y": 0.7187,
    "side": "right"
   }
  ],
  "S3_L1": [
   {
    "name": "Right atrium",
    "x": 0.2344,
    "y": 0.5166,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.5004,
    "y": 0.7544,
    "side": "left"
   },
   {
    "name": "Left ventricle",
    "x": 0.7879,
    "y": 0.7548,
    "side": "right"
   },
   {
    "name": "Left auricle",
    "x": 0.6716,
    "y": 0.457,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.2489,
    "y": 0.2619,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.4039,
    "y": 0.282,
    "side": "left"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5753,
    "y": 0.4206,
    "side": "right"
   },
   {
    "name": "Pulmonary veins",
    "x": 0.7778,
    "y": 0.4053,
    "side": "right"
   },
   {
    "name": "Anterior interventricular artery",
    "x": 0.7253,
    "y": 0.6967,
    "side": "right"
   },
   {
    "name": "Right coronary artery",
    "x": 0.301,
    "y": 0.6181,
    "side": "left"
   }
  ],
  "S3_L3": [
   {
    "name": "Right atrium",
    "x": 0.3134,
    "y": 0.4897,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.502,
    "y": 0.7697,
    "side": "left"
   },
   {
    "name": "Left atrium",
    "x": 0.5997,
    "y": 0.4677,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.6808,
    "y": 0.7269,
    "side": "right"
   },
   {
    "name": "Interventricular septum",
    "x": 0.6224,
    "y": 0.7644,
    "side": "left"
   },
   {
    "name": "Tricuspid valve",
    "x": 0.411,
    "y": 0.5989,
    "side": "left"
   },
   {
    "name": "Mitral valve",
    "x": 0.5953,
    "y": 0.5678,
    "side": "right"
   },
   {
    "name": "Pulmonary valve",
    "x": 0.5356,
    "y": 0.4684,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.3073,
    "y": 0.3146,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.5345,
    "y": 0.2593,
    "side": "right"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5644,
    "y": 0.405,
    "side": "right"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6512,
    "y": 0.7252,
    "side": "right"
   }
  ],
  "S3_L4": [
   {
    "name": "Left atrium",
    "x": 0.6045,
    "y": 0.4768,
    "side": "right"
   },
   {
    "name": "Mitral valve",
    "x": 0.5717,
    "y": 0.5869,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.5865,
    "y": 0.7572,
    "side": "right"
   },
   {
    "name": "Aortic valve",
    "x": 0.4634,
    "y": 0.5181,
    "side": "left"
   },
   {
    "name": "Ascending aorta",
    "x": 0.4104,
    "y": 0.374,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4114,
    "y": 0.7653,
    "side": "left"
   },
   {
    "name": "Interventricular septum",
    "x": 0.5027,
    "y": 0.7715,
    "side": "left"
   },
   {
    "name": "Right atrium",
    "x": 0.4051,
    "y": 0.4653,
    "side": "left"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6206,
    "y": 0.7365,
    "side": "right"
   }
  ],
  "S4_L1": [
   {
    "name": "Right atrium",
    "x": 0.2362,
    "y": 0.52,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.502,
    "y": 0.7593,
    "side": "left"
   },
   {
    "name": "Left ventricle",
    "x": 0.7899,
    "y": 0.7583,
    "side": "right"
   },
   {
    "name": "Left auricle",
    "x": 0.6716,
    "y": 0.457,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.2489,
    "y": 0.2619,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.4039,
    "y": 0.282,
    "side": "left"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5771,
    "y": 0.4238,
    "side": "right"
   },
   {
    "name": "Pulmonary veins",
    "x": 0.7778,
    "y": 0.4053,
    "side": "right"
   },
   {
    "name": "Anterior interventricular artery",
    "x": 0.7155,
    "y": 0.6878,
    "side": "right"
   },
   {
    "name": "Right coronary artery",
    "x": 0.3029,
    "y": 0.6214,
    "side": "left"
   }
  ],
  "S4_L3": [
   {
    "name": "Right atrium",
    "x": 0.3152,
    "y": 0.493,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.5033,
    "y": 0.7744,
    "side": "left"
   },
   {
    "name": "Left atrium",
    "x": 0.6012,
    "y": 0.4703,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.6827,
    "y": 0.7303,
    "side": "right"
   },
   {
    "name": "Interventricular septum",
    "x": 0.624,
    "y": 0.7685,
    "side": "left"
   },
   {
    "name": "Tricuspid valve",
    "x": 0.4148,
    "y": 0.6058,
    "side": "left"
   },
   {
    "name": "Mitral valve",
    "x": 0.5991,
    "y": 0.5746,
    "side": "right"
   },
   {
    "name": "Pulmonary valve",
    "x": 0.5374,
    "y": 0.4716,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.3073,
    "y": 0.3146,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.5345,
    "y": 0.2593,
    "side": "right"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5662,
    "y": 0.4081,
    "side": "right"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6541,
    "y": 0.7267,
    "side": "right"
   }
  ],
  "S4_L4": [
   {
    "name": "Left atrium",
    "x": 0.6048,
    "y": 0.4797,
    "side": "right"
   },
   {
    "name": "Mitral valve",
    "x": 0.5725,
    "y": 0.5943,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.5869,
    "y": 0.7609,
    "side": "right"
   },
   {
    "name": "Aortic valve",
    "x": 0.4638,
    "y": 0.5222,
    "side": "left"
   },
   {
    "name": "Ascending aorta",
    "x": 0.4104,
    "y": 0.374,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4106,
    "y": 0.7701,
    "side": "left"
   },
   {
    "name": "Interventricular septum",
    "x": 0.5025,
    "y": 0.7758,
    "side": "left"
   },
   {
    "name": "Right atrium",
    "x": 0.4055,
    "y": 0.469,
    "side": "left"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6185,
    "y": 0.7397,
    "side": "right"
   }
  ],
  "S5_L1": [
   {
    "name": "Right atrium",
    "x": 0.2283,
    "y": 0.5053,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4939,
    "y": 0.7387,
    "side": "left"
   },
   {
    "name": "Left ventricle",
    "x": 0.7813,
    "y": 0.7433,
    "side": "right"
   },
   {
    "name": "Left auricle",
    "x": 0.6716,
    "y": 0.457,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.2489,
    "y": 0.2619,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.4039,
    "y": 0.282,
    "side": "left"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5693,
    "y": 0.41,
    "side": "right"
   },
   {
    "name": "Pulmonary veins",
    "x": 0.7778,
    "y": 0.4053,
    "side": "right"
   },
   {
    "name": "Anterior interventricular artery",
    "x": 0.7326,
    "y": 0.7042,
    "side": "right"
   },
   {
    "name": "Right coronary artery",
    "x": 0.2936,
    "y": 0.6072,
    "side": "left"
   }
  ],
  "S5_L3": [
   {
    "name": "Right atrium",
    "x": 0.3073,
    "y": 0.4785,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4959,
    "y": 0.7545,
    "side": "left"
   },
   {
    "name": "Left atrium",
    "x": 0.5947,
    "y": 0.4589,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.6744,
    "y": 0.7155,
    "side": "right"
   },
   {
    "name": "Interventricular septum",
    "x": 0.6161,
    "y": 0.751,
    "side": "left"
   },
   {
    "name": "Tricuspid valve",
    "x": 0.3986,
    "y": 0.5762,
    "side": "left"
   },
   {
    "name": "Mitral valve",
    "x": 0.5828,
    "y": 0.5455,
    "side": "right"
   },
   {
    "name": "Pulmonary valve",
    "x": 0.5298,
    "y": 0.458,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.3073,
    "y": 0.3146,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.5345,
    "y": 0.2593,
    "side": "right"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5585,
    "y": 0.3947,
    "side": "right"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6443,
    "y": 0.7183,
    "side": "right"
   }
  ],
  "S5_L4": [
   {
    "name": "Left atrium",
    "x": 0.6035,
    "y": 0.4671,
    "side": "right"
   },
   {
    "name": "Mitral valve",
    "x": 0.5691,
    "y": 0.5624,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.5852,
    "y": 0.745,
    "side": "right"
   },
   {
    "name": "Aortic valve",
    "x": 0.4619,
    "y": 0.5046,
    "side": "left"
   },
   {
    "name": "Ascending aorta",
    "x": 0.4104,
    "y": 0.374,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4122,
    "y": 0.7496,
    "side": "left"
   },
   {
    "name": "Interventricular septum",
    "x": 0.5024,
    "y": 0.7575,
    "side": "left"
   },
   {
    "name": "Right atrium",
    "x": 0.4038,
    "y": 0.453,
    "side": "left"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6231,
    "y": 0.7268,
    "side": "right"
   }
  ],
  "S6_L1": [
   {
    "name": "Right atrium",
    "x": 0.224,
    "y": 0.4975,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4889,
    "y": 0.7279,
    "side": "left"
   },
   {
    "name": "Left ventricle",
    "x": 0.7768,
    "y": 0.7352,
    "side": "right"
   },
   {
    "name": "Left auricle",
    "x": 0.6716,
    "y": 0.457,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.2489,
    "y": 0.2619,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.4039,
    "y": 0.282,
    "side": "left"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5651,
    "y": 0.4025,
    "side": "right"
   },
   {
    "name": "Pulmonary veins",
    "x": 0.7778,
    "y": 0.4053,
    "side": "right"
   },
   {
    "name": "Anterior interventricular artery",
    "x": 0.7313,
    "y": 0.7095,
    "side": "right"
   },
   {
    "name": "Right coronary artery",
    "x": 0.2871,
    "y": 0.5999,
    "side": "left"
   }
  ],
  "S6_L3": [
   {
    "name": "Right atrium",
    "x": 0.303,
    "y": 0.4707,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4913,
    "y": 0.744,
    "side": "left"
   },
   {
    "name": "Left atrium",
    "x": 0.5913,
    "y": 0.4528,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.67,
    "y": 0.7076,
    "side": "right"
   },
   {
    "name": "Interventricular septum",
    "x": 0.6115,
    "y": 0.7418,
    "side": "left"
   },
   {
    "name": "Tricuspid valve",
    "x": 0.3898,
    "y": 0.5603,
    "side": "left"
   },
   {
    "name": "Mitral valve",
    "x": 0.574,
    "y": 0.5298,
    "side": "right"
   },
   {
    "name": "Pulmonary valve",
    "x": 0.5257,
    "y": 0.4508,
    "side": "right"
   },
   {
    "name": "Superior vena cava",
    "x": 0.3073,
    "y": 0.3146,
    "side": "left"
   },
   {
    "name": "Aorta",
    "x": 0.5345,
    "y": 0.2593,
    "side": "right"
   },
   {
    "name": "Pulmonary trunk",
    "x": 0.5544,
    "y": 0.3874,
    "side": "right"
   },
   {
    "name": "Papillary muscle",
    "x": 0.64,
    "y": 0.7131,
    "side": "right"
   }
  ],
  "S6_L4": [
   {
    "name": "Left atrium",
    "x": 0.6027,
    "y": 0.4603,
    "side": "right"
   },
   {
    "name": "Mitral valve",
    "x": 0.5672,
    "y": 0.5453,
    "side": "right"
   },
   {
    "name": "Left ventricle",
    "x": 0.5843,
    "y": 0.7364,
    "side": "right"
   },
   {
    "name": "Aortic valve",
    "x": 0.4609,
    "y": 0.4951,
    "side": "left"
   },
   {
    "name": "Ascending aorta",
    "x": 0.4104,
    "y": 0.374,
    "side": "left"
   },
   {
    "name": "Right ventricle",
    "x": 0.4121,
    "y": 0.7387,
    "side": "left"
   },
   {
    "name": "Interventricular septum",
    "x": 0.5019,
    "y": 0.7477,
    "side": "left"
   },
   {
    "name": "Right atrium",
    "x": 0.4028,
    "y": 0.4444,
    "side": "left"
   },
   {
    "name": "Papillary muscle",
    "x": 0.6241,
    "y": 0.72,
    "side": "right"
   }
  ]
 },
 "title": "Inside a Heartbeat",
 "slug": "inside-a-heartbeat",
 "key_stage": "S3",
 "stages": [
  {
   "key": "S1",
   "n": 1,
   "name": "Atrial systole",
   "wiggers": "A",
   "ecg": "P wave",
   "ecg_seg": "P",
   "valves": {
    "tricuspid": "open",
    "mitral": "open",
    "pulmonary": "closed",
    "aortic": "closed"
   },
   "signal": "The SA node fires. The wave spreads across both atria (internodal pathways, Bachmann's bundle to the left atrium) and reaches the AV node, where it is held for about 100 ms.",
   "flow": "The atria contract and push the last 20 to 30 percent of filling into the ventricles.",
   "chambers": "Atria contract; the ventricles reach their largest volume.",
   "sources": [
    "OS2",
    "OS3",
    "WK1",
    "NH1"
   ]
  },
  {
   "key": "S2",
   "n": 2,
   "name": "Isovolumic contraction",
   "wiggers": "B",
   "ecg": "QRS complex",
   "ecg_seg": "QRS",
   "valves": {
    "tricuspid": "closed",
    "mitral": "closed",
    "pulmonary": "closed",
    "aortic": "closed"
   },
   "signal": "The signal runs down the bundle of His, the left and right bundle branches and the Purkinje fibers; the ventricles depolarise.",
   "flow": "All four valves are closed, so no blood crosses a valve. The relaxed atria begin to refill from the veins.",
   "chambers": "The ventricles contract at constant volume and pressure rises. The closing tricuspid and mitral valves give the first heart sound.",
   "sources": [
    "OS2",
    "OS3",
    "WK1"
   ]
  },
  {
   "key": "S3",
   "n": 3,
   "name": "Ventricular ejection",
   "wiggers": "C1 + C2",
   "ecg": "ST segment, T wave begins",
   "ecg_seg": "ST",
   "valves": {
    "tricuspid": "closed",
    "mitral": "closed",
    "pulmonary": "open",
    "aortic": "open"
   },
   "signal": "The ventricles stay depolarised; repolarisation begins toward the end of this stage.",
   "flow": "The right ventricle ejects into the pulmonary trunk and arteries, the left ventricle into the aorta. The veins keep filling the atria.",
   "chambers": "The ventricles shrink and the valve plane moves toward the apex, which stretches the atria as they fill.",
   "sources": [
    "OS3",
    "WK1",
    "WK2"
   ]
  },
  {
   "key": "S4",
   "n": 4,
   "name": "Isovolumic relaxation",
   "wiggers": "D",
   "ecg": "End of T wave",
   "ecg_seg": "T",
   "valves": {
    "tricuspid": "closed",
    "mitral": "closed",
    "pulmonary": "closed",
    "aortic": "closed"
   },
   "signal": "The ventricles have repolarised; the conduction path is at rest.",
   "flow": "All four valves are closed again. The atria keep filling.",
   "chambers": "The ventricles are at their smallest and relax. The closing pulmonary and aortic valves give the second heart sound.",
   "sources": [
    "OS3",
    "WK1"
   ]
  },
  {
   "key": "S5",
   "n": 5,
   "name": "Rapid filling",
   "wiggers": "E1",
   "ecg": "Isoelectric",
   "ecg_seg": "TP1",
   "valves": {
    "tricuspid": "open",
    "mitral": "open",
    "pulmonary": "closed",
    "aortic": "closed"
   },
   "signal": "At rest.",
   "flow": "The tricuspid and mitral valves open and blood rushes passively from the atria into the ventricles; most of the 70 to 80 percent passive filling happens here.",
   "chambers": "The ventricles expand quickly as the atria empty.",
   "sources": [
    "OS3",
    "WK1"
   ]
  },
  {
   "key": "S6",
   "n": 6,
   "name": "Diastasis",
   "wiggers": "E2",
   "ecg": "Isoelectric",
   "ecg_seg": "TP2",
   "valves": {
    "tricuspid": "open",
    "mitral": "open",
    "pulmonary": "closed",
    "aortic": "closed"
   },
   "signal": "SA node cells slowly depolarise on their own toward threshold; the next beat starts again at stage 1.",
   "flow": "Slow passive flow from the veins through the atria into the ventricles.",
   "chambers": "All four chambers are relaxed and the ventricles are nearly full.",
   "sources": [
    "OS2",
    "OS3",
    "WK2"
   ]
  }
 ],
 "layers": [
  {
   "key": "L1",
   "name": "Surface",
   "desc": "Epicardium, coronary arteries (red) and cardiac veins (blue), the great vessels."
  },
  {
   "key": "L2",
   "name": "See-through",
   "desc": "The wall made transparent: blood volumes, the four valves and the conduction path inside."
  },
  {
   "key": "L3",
   "name": "Section",
   "desc": "A cut through the four chambers: valves, papillary muscles and chordae, the septum and wall thickness."
  },
  {
   "key": "L4",
   "name": "Long axis",
   "desc": "A cut through the apex, the mitral valve and the aortic valve: the left atrium, the left ventricle, its outflow and the aortic valve."
  }
 ],
 "overlays": [
  {
   "key": "flow",
   "name": "Blood flow",
   "desc": "Blue marks oxygen-poor blood and red oxygen-rich blood, a teaching convention (blood is red on both sides). Thicker arrows mean faster flow."
  },
  {
   "key": "signal",
   "name": "Electrical signal",
   "desc": "Gold marks the part of the conduction path active in this stage and the muscle it has just depolarised."
  }
 ],
 "items": [
  {
   "key": "S1_L1_flow",
   "stage": "S1",
   "layer": "L1",
   "overlay": "flow",
   "title": "1 Atrial systole: Surface, blood flow",
   "media": "stills/S1_L1_flow.webp",
   "plate": "stills/plate_S1_L1_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L1_signal",
   "stage": "S1",
   "layer": "L1",
   "overlay": "signal",
   "title": "1 Atrial systole: Surface, electrical signal",
   "media": "stills/S1_L1_signal.webp",
   "plate": "stills/plate_S1_L1_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L2_flow",
   "stage": "S1",
   "layer": "L2",
   "overlay": "flow",
   "title": "1 Atrial systole: See-through, blood flow",
   "media": "stills/S1_L2_flow.webp",
   "plate": "stills/plate_S1_L2_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L2_signal",
   "stage": "S1",
   "layer": "L2",
   "overlay": "signal",
   "title": "1 Atrial systole: See-through, electrical signal",
   "media": "stills/S1_L2_signal.webp",
   "plate": "stills/plate_S1_L2_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L3_flow",
   "stage": "S1",
   "layer": "L3",
   "overlay": "flow",
   "title": "1 Atrial systole: Section, blood flow",
   "media": "stills/S1_L3_flow.webp",
   "plate": "stills/plate_S1_L3_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L3_signal",
   "stage": "S1",
   "layer": "L3",
   "overlay": "signal",
   "title": "1 Atrial systole: Section, electrical signal",
   "media": "stills/S1_L3_signal.webp",
   "plate": "stills/plate_S1_L3_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L4_flow",
   "stage": "S1",
   "layer": "L4",
   "overlay": "flow",
   "title": "1 Atrial systole: Long axis, blood flow",
   "media": "stills/S1_L4_flow.webp",
   "plate": "stills/plate_S1_L4_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S1_L4_signal",
   "stage": "S1",
   "layer": "L4",
   "overlay": "signal",
   "title": "1 Atrial systole: Long axis, electrical signal",
   "media": "stills/S1_L4_signal.webp",
   "plate": "stills/plate_S1_L4_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L1_flow",
   "stage": "S2",
   "layer": "L1",
   "overlay": "flow",
   "title": "2 Isovolumic contraction: Surface, blood flow",
   "media": "stills/S2_L1_flow.webp",
   "plate": "stills/plate_S2_L1_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L1_signal",
   "stage": "S2",
   "layer": "L1",
   "overlay": "signal",
   "title": "2 Isovolumic contraction: Surface, electrical signal",
   "media": "stills/S2_L1_signal.webp",
   "plate": "stills/plate_S2_L1_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L2_flow",
   "stage": "S2",
   "layer": "L2",
   "overlay": "flow",
   "title": "2 Isovolumic contraction: See-through, blood flow",
   "media": "stills/S2_L2_flow.webp",
   "plate": "stills/plate_S2_L2_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L2_signal",
   "stage": "S2",
   "layer": "L2",
   "overlay": "signal",
   "title": "2 Isovolumic contraction: See-through, electrical signal",
   "media": "stills/S2_L2_signal.webp",
   "plate": "stills/plate_S2_L2_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L3_flow",
   "stage": "S2",
   "layer": "L3",
   "overlay": "flow",
   "title": "2 Isovolumic contraction: Section, blood flow",
   "media": "stills/S2_L3_flow.webp",
   "plate": "stills/plate_S2_L3_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L3_signal",
   "stage": "S2",
   "layer": "L3",
   "overlay": "signal",
   "title": "2 Isovolumic contraction: Section, electrical signal",
   "media": "stills/S2_L3_signal.webp",
   "plate": "stills/plate_S2_L3_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L4_flow",
   "stage": "S2",
   "layer": "L4",
   "overlay": "flow",
   "title": "2 Isovolumic contraction: Long axis, blood flow",
   "media": "stills/S2_L4_flow.webp",
   "plate": "stills/plate_S2_L4_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S2_L4_signal",
   "stage": "S2",
   "layer": "L4",
   "overlay": "signal",
   "title": "2 Isovolumic contraction: Long axis, electrical signal",
   "media": "stills/S2_L4_signal.webp",
   "plate": "stills/plate_S2_L4_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L1_flow",
   "stage": "S3",
   "layer": "L1",
   "overlay": "flow",
   "title": "3 Ventricular ejection: Surface, blood flow",
   "media": "stills/S3_L1_flow.webp",
   "plate": "stills/plate_S3_L1_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L1_signal",
   "stage": "S3",
   "layer": "L1",
   "overlay": "signal",
   "title": "3 Ventricular ejection: Surface, electrical signal",
   "media": "stills/S3_L1_signal.webp",
   "plate": "stills/plate_S3_L1_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L2_flow",
   "stage": "S3",
   "layer": "L2",
   "overlay": "flow",
   "title": "3 Ventricular ejection: See-through, blood flow",
   "media": "stills/S3_L2_flow.webp",
   "plate": "stills/plate_S3_L2_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L2_signal",
   "stage": "S3",
   "layer": "L2",
   "overlay": "signal",
   "title": "3 Ventricular ejection: See-through, electrical signal",
   "media": "stills/S3_L2_signal.webp",
   "plate": "stills/plate_S3_L2_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L3_flow",
   "stage": "S3",
   "layer": "L3",
   "overlay": "flow",
   "title": "3 Ventricular ejection: Section, blood flow",
   "media": "stills/S3_L3_flow.webp",
   "plate": "stills/plate_S3_L3_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L3_signal",
   "stage": "S3",
   "layer": "L3",
   "overlay": "signal",
   "title": "3 Ventricular ejection: Section, electrical signal",
   "media": "stills/S3_L3_signal.webp",
   "plate": "stills/plate_S3_L3_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L4_flow",
   "stage": "S3",
   "layer": "L4",
   "overlay": "flow",
   "title": "3 Ventricular ejection: Long axis, blood flow",
   "media": "stills/S3_L4_flow.webp",
   "plate": "stills/plate_S3_L4_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S3_L4_signal",
   "stage": "S3",
   "layer": "L4",
   "overlay": "signal",
   "title": "3 Ventricular ejection: Long axis, electrical signal",
   "media": "stills/S3_L4_signal.webp",
   "plate": "stills/plate_S3_L4_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L1_flow",
   "stage": "S4",
   "layer": "L1",
   "overlay": "flow",
   "title": "4 Isovolumic relaxation: Surface, blood flow",
   "media": "stills/S4_L1_flow.webp",
   "plate": "stills/plate_S4_L1_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L1_signal",
   "stage": "S4",
   "layer": "L1",
   "overlay": "signal",
   "title": "4 Isovolumic relaxation: Surface, electrical signal",
   "media": "stills/S4_L1_signal.webp",
   "plate": "stills/plate_S4_L1_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L2_flow",
   "stage": "S4",
   "layer": "L2",
   "overlay": "flow",
   "title": "4 Isovolumic relaxation: See-through, blood flow",
   "media": "stills/S4_L2_flow.webp",
   "plate": "stills/plate_S4_L2_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L2_signal",
   "stage": "S4",
   "layer": "L2",
   "overlay": "signal",
   "title": "4 Isovolumic relaxation: See-through, electrical signal",
   "media": "stills/S4_L2_signal.webp",
   "plate": "stills/plate_S4_L2_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L3_flow",
   "stage": "S4",
   "layer": "L3",
   "overlay": "flow",
   "title": "4 Isovolumic relaxation: Section, blood flow",
   "media": "stills/S4_L3_flow.webp",
   "plate": "stills/plate_S4_L3_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L3_signal",
   "stage": "S4",
   "layer": "L3",
   "overlay": "signal",
   "title": "4 Isovolumic relaxation: Section, electrical signal",
   "media": "stills/S4_L3_signal.webp",
   "plate": "stills/plate_S4_L3_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L4_flow",
   "stage": "S4",
   "layer": "L4",
   "overlay": "flow",
   "title": "4 Isovolumic relaxation: Long axis, blood flow",
   "media": "stills/S4_L4_flow.webp",
   "plate": "stills/plate_S4_L4_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S4_L4_signal",
   "stage": "S4",
   "layer": "L4",
   "overlay": "signal",
   "title": "4 Isovolumic relaxation: Long axis, electrical signal",
   "media": "stills/S4_L4_signal.webp",
   "plate": "stills/plate_S4_L4_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L1_flow",
   "stage": "S5",
   "layer": "L1",
   "overlay": "flow",
   "title": "5 Rapid filling: Surface, blood flow",
   "media": "stills/S5_L1_flow.webp",
   "plate": "stills/plate_S5_L1_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L1_signal",
   "stage": "S5",
   "layer": "L1",
   "overlay": "signal",
   "title": "5 Rapid filling: Surface, electrical signal",
   "media": "stills/S5_L1_signal.webp",
   "plate": "stills/plate_S5_L1_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L2_flow",
   "stage": "S5",
   "layer": "L2",
   "overlay": "flow",
   "title": "5 Rapid filling: See-through, blood flow",
   "media": "stills/S5_L2_flow.webp",
   "plate": "stills/plate_S5_L2_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L2_signal",
   "stage": "S5",
   "layer": "L2",
   "overlay": "signal",
   "title": "5 Rapid filling: See-through, electrical signal",
   "media": "stills/S5_L2_signal.webp",
   "plate": "stills/plate_S5_L2_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L3_flow",
   "stage": "S5",
   "layer": "L3",
   "overlay": "flow",
   "title": "5 Rapid filling: Section, blood flow",
   "media": "stills/S5_L3_flow.webp",
   "plate": "stills/plate_S5_L3_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L3_signal",
   "stage": "S5",
   "layer": "L3",
   "overlay": "signal",
   "title": "5 Rapid filling: Section, electrical signal",
   "media": "stills/S5_L3_signal.webp",
   "plate": "stills/plate_S5_L3_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L4_flow",
   "stage": "S5",
   "layer": "L4",
   "overlay": "flow",
   "title": "5 Rapid filling: Long axis, blood flow",
   "media": "stills/S5_L4_flow.webp",
   "plate": "stills/plate_S5_L4_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S5_L4_signal",
   "stage": "S5",
   "layer": "L4",
   "overlay": "signal",
   "title": "5 Rapid filling: Long axis, electrical signal",
   "media": "stills/S5_L4_signal.webp",
   "plate": "stills/plate_S5_L4_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L1_flow",
   "stage": "S6",
   "layer": "L1",
   "overlay": "flow",
   "title": "6 Diastasis: Surface, blood flow",
   "media": "stills/S6_L1_flow.webp",
   "plate": "stills/plate_S6_L1_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L1_signal",
   "stage": "S6",
   "layer": "L1",
   "overlay": "signal",
   "title": "6 Diastasis: Surface, electrical signal",
   "media": "stills/S6_L1_signal.webp",
   "plate": "stills/plate_S6_L1_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L2_flow",
   "stage": "S6",
   "layer": "L2",
   "overlay": "flow",
   "title": "6 Diastasis: See-through, blood flow",
   "media": "stills/S6_L2_flow.webp",
   "plate": "stills/plate_S6_L2_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L2_signal",
   "stage": "S6",
   "layer": "L2",
   "overlay": "signal",
   "title": "6 Diastasis: See-through, electrical signal",
   "media": "stills/S6_L2_signal.webp",
   "plate": "stills/plate_S6_L2_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L3_flow",
   "stage": "S6",
   "layer": "L3",
   "overlay": "flow",
   "title": "6 Diastasis: Section, blood flow",
   "media": "stills/S6_L3_flow.webp",
   "plate": "stills/plate_S6_L3_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L3_signal",
   "stage": "S6",
   "layer": "L3",
   "overlay": "signal",
   "title": "6 Diastasis: Section, electrical signal",
   "media": "stills/S6_L3_signal.webp",
   "plate": "stills/plate_S6_L3_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L4_flow",
   "stage": "S6",
   "layer": "L4",
   "overlay": "flow",
   "title": "6 Diastasis: Long axis, blood flow",
   "media": "stills/S6_L4_flow.webp",
   "plate": "stills/plate_S6_L4_flow.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  },
  {
   "key": "S6_L4_signal",
   "stage": "S6",
   "layer": "L4",
   "overlay": "signal",
   "title": "6 Diastasis: Long axis, electrical signal",
   "media": "stills/S6_L4_signal.webp",
   "plate": "stills/plate_S6_L4_signal.webp",
   "plate_models": [
    "GPT Image 2.5 Sunburst (anatomy plate)",
    "overlays drawn from the model"
   ],
   "models": [
    "CPU real-time render (three.js, SwiftShader)",
    "PATINA Material (tissue maps)"
   ],
   "cu": 0,
   "steps": [
    "heart model (code, numpy SDF)",
    "stage parameters from SOURCES.md",
    "CPU real-time render from the locked camera",
    "background composite"
   ]
  }
 ],
 "treatments": [
  {
   "key": "medical_L1",
   "treatment": "medical",
   "stage": "S3",
   "layer": "L1",
   "overlay": "flow",
   "file": "web/treat_medical_S3_L1_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.722,
   "edge_recall": 0.907,
   "registered": false,
   "media": "stills/treat_medical_S3_L1_flow.webp"
  },
  {
   "key": "watercolour_L1",
   "treatment": "watercolour",
   "stage": "S3",
   "layer": "L1",
   "overlay": "flow",
   "file": "web/treat_watercolour_S3_L1_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.787,
   "edge_recall": 0.973,
   "registered": false,
   "media": "stills/treat_watercolour_S3_L1_flow.webp"
  },
  {
   "key": "glass_L1",
   "treatment": "glass",
   "stage": "S3",
   "layer": "L1",
   "overlay": "flow",
   "file": "web/treat_glass_S3_L1_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.9,
   "edge_recall": 0.981,
   "registered": false,
   "media": "stills/treat_glass_S3_L1_flow.webp"
  },
  {
   "key": "medical_L2",
   "treatment": "medical",
   "stage": "S3",
   "layer": "L2",
   "overlay": "flow",
   "file": "web/treat_medical_S3_L2_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.814,
   "edge_recall": 0.764,
   "registered": false,
   "media": "stills/treat_medical_S3_L2_flow.webp"
  },
  {
   "key": "watercolour_L2",
   "treatment": "watercolour",
   "stage": "S3",
   "layer": "L2",
   "overlay": "flow",
   "file": "web/treat_watercolour_S3_L2_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.823,
   "edge_recall": 0.907,
   "registered": false,
   "media": "stills/treat_watercolour_S3_L2_flow.webp"
  },
  {
   "key": "glass_L2",
   "treatment": "glass",
   "stage": "S3",
   "layer": "L2",
   "overlay": "flow",
   "file": "web/treat_glass_S3_L2_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.601,
   "edge_recall": 0.962,
   "registered": false,
   "media": "stills/treat_glass_S3_L2_flow.webp"
  },
  {
   "key": "medical_L3",
   "treatment": "medical",
   "stage": "S3",
   "layer": "L3",
   "overlay": "flow",
   "file": "web/treat_medical_S3_L3_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.896,
   "edge_recall": 0.805,
   "registered": true,
   "media": "stills/treat_medical_S3_L3_flow.webp"
  },
  {
   "key": "watercolour_L3",
   "treatment": "watercolour",
   "stage": "S3",
   "layer": "L3",
   "overlay": "flow",
   "file": "web/treat_watercolour_S3_L3_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.917,
   "edge_recall": 0.956,
   "registered": false,
   "media": "stills/treat_watercolour_S3_L3_flow.webp"
  },
  {
   "key": "glass_L3",
   "treatment": "glass",
   "stage": "S3",
   "layer": "L3",
   "overlay": "flow",
   "file": "web/treat_glass_S3_L3_flow.webp",
   "model": "GPT Image 2.5 Sunburst",
   "cu": 12,
   "iou": 0.891,
   "edge_recall": 0.984,
   "registered": false,
   "media": "stills/treat_glass_S3_L3_flow.webp"
  }
 ],
 "glb": "3d/heart_S3.glb",
 "sources": [
  {
   "id": "OS1",
   "title": "OpenStax Anatomy and Physiology 2e, 19.1 Heart Anatomy",
   "url": "https://openstax.org/books/anatomy-and-physiology-2e/pages/19-1-heart-anatomy"
  },
  {
   "id": "OS2",
   "title": "OpenStax Anatomy and Physiology 2e, 19.2 Cardiac Muscle and Electrical Activity",
   "url": "https://openstax.org/books/anatomy-and-physiology-2e/pages/19-2-cardiac-muscle-and-electrical-activity"
  },
  {
   "id": "OS3",
   "title": "OpenStax Anatomy and Physiology 2e, 19.3 Cardiac Cycle",
   "url": "https://openstax.org/books/anatomy-and-physiology-2e/pages/19-3-cardiac-cycle"
  },
  {
   "id": "WK1",
   "title": "Wikipedia, Wiggers diagram",
   "url": "https://en.wikipedia.org/wiki/Wiggers_diagram"
  },
  {
   "id": "WK2",
   "title": "Wikipedia, Cardiac cycle",
   "url": "https://en.wikipedia.org/wiki/Cardiac_cycle"
  },
  {
   "id": "WK3",
   "title": "Wikipedia, Aortic arch",
   "url": "https://en.wikipedia.org/wiki/Aortic_arch"
  },
  {
   "id": "NH1",
   "title": "NIH NHLBI, How the Heart Beats",
   "url": "https://www.nhlbi.nih.gov/health/heart/heart-beats"
  },
  {
   "id": "TM1",
   "title": "TeachMeAnatomy, The Surfaces and Borders of the Heart",
   "url": "https://teachmeanatomy.info/thorax/organs/heart/borders-sinuses-sulci/"
  }
 ],
 "totals": {
  "scenario_calls": 53,
  "cu": 541.75
 }
}