Microscope Story 显微叙事

Measured Blue·40s·Lemo-Opuscarby Lemomo

Real, licence-clean microscopy of a real specimen, seen as it is, and one continuous change of scale that carries the viewer from the glass slide in the hand to a single cell. Focus breathes when the magnification changes, a focal plane sweeps when the camera lands, and every scale bar, field of view and reading comes from the image's own metadata.

The demo: One continuous camera takes a liver slide from the eye down to a single nucleus; two circles 1.4 mm apart are counted pixel by pixel, and one holds 2.4 times the blue.

Biomedicine & pathologyMaterials & surface scienceSkincare & cosmetic science
Style prompt · STYLE.md

Real, licence-clean microscopy of a real specimen, seen as it is, and one continuous change of scale that carries the viewer from the glass slide in the hand to a single cell. Focus breathes when the magnification changes, a focal plane sweeps when the camera lands, and every scale bar, field of view and reading comes from the image's own metadata. References (grammar only): Charles and Ray Eames' Powers of Ten (one continuous change of scale with a readout riding along); premium microscope launch films (dark bench, glass catching light, restrained marks, clean instrument sound); digital-pathology viewers' instruments (scale bar, field of view, magnification). Copy none of their layouts, interfaces, typefaces or music; never name them in the film.

1. Essence, and what it is not

  • The specimen is a photograph: a real micrograph or whole-slide scan of the actual sample, CC0, public domain or CC BY. Nothing on the specimen is drawn, retouched or generated. A whole-slide image (WSI) is the ideal source: one sample, one registered pyramid from millimetres to microns, with the pixel size in its metadata.
  • Scale is the camera: one log-space dive (and, when the story wants it, the climb back) through nested plates of the same sample. The scale bar shortens and jumps in a 1-2-5 sequence, the field-of-view readout rolls, the magnification steps.
  • Focus has a grammar: a rack-in from soft at the start, a short breath (blur + a hint of field change) each time the magnification changes, a focal-plane sweep across the frame when the camera lands.
  • Readings are measured: every number is computed from the file (pixel size × pixels) and the screen says how it was measured. Describe what was measured; never diagnose. Keep a FACTS.md in the project folder (claim, source URL, quoted wording, or the measurement method) and deliver it with the film.
  • One reading per screen, in the single accent colour.

Not Satellite Briefing (no grey grade; the stain keeps its colour), not Sci-fi HUD (no glowing wireframes or crosshairs), not Data Storytelling (no chart paper), not a keynote (no slides or header bars).

2. Materials & rendering

  • Plates: the WSI pyramid levels as plates in one world frame (level-0 pixels), the coarse levels whole and alpha-feathered at the scan edge, the fine levels as crops around where the camera lands. Each frame draws the finest plate that is downsampled no more than ~1.45×, and blends the next level in between 2.2× and 1.45×: no seams and no visible upsampling, because every level is the same sample, already registered.
  • The naked-eye plate: the scanner's own photo of the whole slide (many WSI files carry one), registered through the scan's area-of-interest metadata and checked against the tissue's centroid. Cut the glass out of the scanner tray, remove the line-sensor streaks, and fill any manufacturer's printed logo with the surrounding frosted glass. Below ~30 mm of field the photo would be upsampled: let the cover glass become clean glass (its dust leaves the focal plane).
  • One grade for every plate: glass normalised to a warm white, a little density and chroma in the stain, nothing else. No false colour, no film emulation.
  • The bench: graphite under a slow pool of light; a soft shadow under the slide.
  • Focus: screen-space Gaussian blur on a frame rendered with a margin (so edges never go dark); the focal sweep is a tilted sharp front crossing a softened frame. A light illumination vignette, nothing more.
  • Marks in screen space but anchored to the specimen through one world → screen function: hairlines 1.5–2.5 px with a dark or light halo, circles drawn on as arcs with cardinal ticks, dimension lines with end ticks, leader lines with one elbow. Counted pixels are shown as a mask revealed behind a scan front, then kept as a faint trace.
  • Frosted panels (dark translucent glass over a blurred copy of the frame) for readings, instruments, subtitles and the credit: white type reads on glass and stain alike, nothing switches colour mid-shot.

3. Colour logic

  • Glass: warm paper white. Bench: graphite. The stain is evidence and keeps its true colour (e.g. trichrome red and blue, H&E pink and purple).
  • One accent, cool and away from the stain's hues (mint against red and blue; amber against a green or purple stain), only for the measured reading and the counted pixels.
  • Ink on glass is near-black; type on stain sits on a frosted panel in warm white.

Example (our demo): glass #F4F1EC, bench #0B0D0F → #2A3036, ink #181B1F, panel rgba(12,14,17,0.74), accent mint rgb(120,240,205) (on stain) / rgb(0,122,99) (on glass).

4. Type & subtitles

  • Roles: a light condensed grotesk for readings and the scale bar (40–72 px, e.g. Barlow Condensed); a monospace for instruments and pixel counts (20 px, e.g. IBM Plex Mono); a sans in the film's language for labels (20–34 px, e.g. Noto Sans SC); a serif only for the title. OFL, self-hosted, CJK subset.
  • Instruments live in one frosted panel in a corner: scale bar with its value, field of view, magnification with a small nosepiece glyph that turns a quarter on every change. The source credit in a small panel in the opposite corner.
  • Readings sit in a frosted panel beside what they measure, joined by a leader: a small label above ("collagen share of tissue area"), the number large in the accent, the method or the raw counts below.
  • Subtitles: a frosted strip at the bottom; if the film is bilingual, one line per language with the film's language on top, never wrapped. Measure each line with the real font and split long lines into two cues.
  • Nothing below 20 px at 1080p. Hold labels ≥ characters ÷ 4.5 + 1.5 s (CJK); a reading that rolls is reported by its landing value.

5. Motion quality

  • The camera is a similarity transform (zoom, roll, position) interpolated as a log spiral between keys (M^u about the fixed point of the two frames), so every push is a true dive towards one point and the roll is part of it. Ease the moves, creep 2–5 % during holds; never a frozen frame longer than a second.
  • Magnification changes happen where the plates actually change, each with a breath of focus, a turret click and the new magnification said once, large.
  • Marks arrive by being made: a dimension line grows from its centre, a circle is drawn as an arc, a scan front counts pixels while the reading rolls, the reading lands with a small spring.
  • Never moves: the specimen under its marks, the instrument positions.

6. Camera grammar

Move What it expresses Can serve
The dive (log zoom with roll) going to look for yourself an opening; from the slide to the cell
Locked frame, slow creep evidence, a measurement a reading; a comparison
Truck at one magnification a second sample of the same thing the counter-example; "meanwhile, nearby"
Pull back to frame two marks comparison the verdict
Focal-plane sweep arriving; depth a landing; a reveal inside one frame
The climb (reverse dive, scale bar jumping back) consequence, scale an ending; a return to the eye's scale

At key moments the measured structure fills a third of the frame height or more; instruments in a corner, subtitles bottom centre, readings beside their marks. Transitions are scale changes, trucks and focus, never cuts or crossfades between samples.

7. Sound palette

  • Instrument foley: the objective turret (a click, a detent, a small metal ring), a focus servo, pen on glass for each line drawn, a band-passed scan travelling left to right with counter ticks that speed up, a soft filtered sweep for the focal plane.
  • Music: hard-mallet vibraphone in 8ths and 16ths, marimba ticks, bowed vibraphone and water glasses for pads and the motif, glockenspiel for each reading that lands, a pulse bass with 2nd/3rd harmonics, timpani and bass drum under the landings. Harmony stays open and light; the score is the user's to shape.
  • Beds: a quiet lab room (fan, a little mains hum).
  • Silence before the verdict and before the climb; the first sound after it is the reading or the turn.
  • Mix: voice ~10 dB over music, music ducked under it; −14 LUFS. Voice: a calm, exact narrator; numbers spelled out for the TTS, digits on screen.

8. Native moves

  • The dive. From the slide in the hand to a cell in one camera, the turret clicking at each real change of level. Fits content like: a biopsy to its cells; a coated surface to its crystals; a hair or skin section to its layers.
  • Counting the colour. Draw a circle, let a scan front cross it, light up every counted pixel and roll the share up to its landing value; show the raw counts underneath. Fits content like: collagen in tissue; porosity in a ceramic; coverage of a coating; pigment in a sample.
  • Two circles, one verdict. Measure one place, truck to another at the same scale, then frame both and say what differs. Fits content like: treated against untreated; edge against centre; before against after.
  • The focal sweep and the ring. Land, sweep the focal plane across the frame, ring one structure and give its size. Fits content like: a nucleus; a grain; a fibre's diameter.
  • The climb back. Pull out to the eye's scale with the scale bar jumping backwards; a title card written on the glass.

9. Pitfalls of the medium

  • Licences: most microscopy on the web is CC BY-NC or all rights reserved. Usable: CC0 whole-slide scans (e.g. the OpenSlide test data: check each file's licence line), public-domain government micrographs (NIH, CDC PHIL, NASA, USGS), CC BY collections (Cell Image Library, Wellcome Collection), with every file listed in CREDITS. Not usable: CC BY-SA without agreement, NC images, journal figures, AI images.
  • Finding material for a new topic: search by organ, stain or material plus "whole slide" in the OpenSlide test data, NCI Imaging Data Commons (TCGA/CPTAC slides, licence per collection), the Cell Image Library, Wellcome Collection, Wikimedia Commons (filter by licence) and NIH/CDC galleries; prefer a file whose metadata carries its pixel size. CC BY-SA, ODbL or "no known restrictions" are not CC0: name the terms to the user and ask before using them. For a product, a lab or a brand, ask the user for their own scans (SVS/NDPI/MRXS, SEM TIFFs with a scale) first. Never stand in a generated image for a real specimen.
  • Different samples never zoom into each other: two micrographs of "the same thing" at two scales are two specimens. Use one pyramid; if you must join sources, cut on a focus breath and say so.
  • Pixel size: read it from the file (XMP ScanRes, TIFF resolution, OME PhysicalSizeX); a slide-photo's resolution tag can be trusted only after checking against the scan.
  • Upsampling shows as mush beyond ~1.6×: end the dive at the scan's real resolution.
  • Tile seams: some scanners overlap tiles; check the joint info, frame out visible seams.
  • Labels and logos on the slide: barcodes and IDs are part of the object; manufacturer logos are not — fill or crop them.
  • Claims: a stain's colour means what the stain protocol says, nothing more; measured shares are of the drawn region and the stated threshold, never a clinical score.

10. Engine

  • demo/film.js: log-spiral camera (camAt), plate selection by downsampling ratio and coverage, objective events from real level changes, focus, frosted panel(), marks, readings, TEXTS / SUBCHECK / EV.
  • demo/tools/plates.py: slide-photo registration and cleaning, graded plates, collagen mask and the scan's cumulative curve, the tissue axis. nucleus.py: membrane edge on 72 rays, least-squares circle.
  • Extra packages and packs (beyond setup.sh deps voice): tifffile + imagecodecs read TIFF-based slides (Ventana BIF, Aperio SVS, Hamamatsu NDPI, generic pyramidal TIFF; demo/tools/plates.py is written for BIF: its label page, XMP and AOI); MRXS, SCN, VMS and others need openslide-python with the OpenSlide library (brew install openslide), or an adapter of your own. Install them yourself into a private venv in the project folder, not into $LIB/.venv.
  • Minimal example, not in the demo: a coated steel sample: one SEM pyramid, a dive to one crack, a circle counting coverage, a ring around one grain.

11. Variation space

The agent decides the specimen, the stain or modality, what is counted, the camera path, the accent, the ending.

  • Structures: a single dive ending in one measurement; a comparison of two regions or two samples at one scale; a climb that starts on a cell and reveals the object.
  • Openings: the slide on the bench under moving light; a cell already in focus, the climb revealing what it belongs to; a blurred field racking into focus.
  • Endings: the title written on the glass; a last reading held in silence; the slide lifted out of frame.

How our demo was made (story, shots, score, title card, build): DEMO.md. Read it after your treatment exists.

Director's notes for the demo film

One example among many. Don't reuse its story, arc, shots, props or timings.

Demo: Measured Blue 《量出来的蓝》 (39.5 s) · microscope.mp4 · source in demo/

One continuous camera takes a stained slice of human liver from the glass slide in the hand down to a single nucleus and back. On the way it counts the blue (collagen) inside two 1 mm circles 1.4 mm apart: 13.5 % and 32.6 %. Chinese on screen, English narration, bilingual subtitles (Chinese line above, English line below). One public whole-slide scan (Ventana-1.bif, PathAI, CC0); every number is measured from the file and listed with its method in demo/FACTS.md. The film describes measurements only; it makes no diagnosis.

Story & structure

Logline: one stained slice the size of a fingernail; the same stain, two circles 1.4 mm apart, 13.5 % blue against 32.6 %, every number counted from the scan itself.

Arc: the object (the slide on a graphite bench, its label, a fleck of tissue: one glass slide, one slice of human liver) → the size (a dive to the tissue, a dimension line, 4.80 mm) → the first count (circle A inside a large nodule, a scan front lights every counted pixel, 13.5 %) → the second count (a truck 1.4 mm to circle B, a small nodule walled by thick septa, 32.6 %) → the turn (silence, then both circles framed and held: 2.4 times the blue) → the smallest scale (a dive to one hepatocyte nucleus, a focal sweep, a ring, 8.5 µm) → the climb back to the glass, the title written on it.

Native moves spent: the dive as the signature shot (twice: slide → tissue → nodule, and nodule → nucleus), counting the colour for both circles, two circles, one verdict at the turn, the focal sweep and the ring at the nucleus, the climb back into the end card.

Shots

One continuous take; the camera is a similarity transform interpolated as a log spiral between keys. Times in seconds; magnification changes happen where the pyramid level on screen actually changes (4.04, 4.56, 9.94, 10.42, 21.02, 27.52, 27.94, 28.22 going in; six between 33.53 and 34.46 coming out).

# Time Shot Camera Native move / note
1 0.0–2.67 the whole slide across a graphite bench, label end on the right; a fleck of tissue labelled 一片人肝组织 / 三色染色 rack focus in 0–0.95, light pool drifting; 68 → 63.5 mm field, roll 90° the scanner's own photo of the slide, cleaned, logo filled
2 2.67–5.33 slide → tissue dive ×7, roll 90° → 25° (the tissue's long axis comes level); turret clicks at 1.25× and 2.5× the cover glass turns to clean glass below 30 mm
3 5.33–9.33 the tissue, a dimension line grows from its centre: 4.80 mm, 人肝组织 · 三色染色 creep 9.2 → 8.55 mm first reading
4 9.33–10.67 tissue → nodule A dive ×3.2 to 2.7 mm, roll to 18.5° (A–B line level); clicks 5×, 10×
5 10.67–15.33 circle A drawn as an arc with ticks (A · 直径 1 mm); 11.0–12.47 a mint scan front crosses it, every counted collagen pixel lights behind it, the reading rolls to 13.5 % and springs at 12.67; raw counts below locked, creep counting the colour
6 15.33–16.67 the septa slide past truck 1.41 mm at 10×
7 16.67–20.67 circle B, the same count: 32.6 %, lands 18.0 locked, creep
8 20.67–26.67 both circles and both readings in frame from 21.67; silence 21.8–22.67; the verdict panel: B 的蓝色占比是 A 的 2.4 倍 / 相隔 1.41 mm · 同一切片 · 同一染色 pull back to 3.95 mm (click back to 5×), creep each reading held ≥ 2.5 s before the verdict
9 26.67–29.33 nodule B → one nucleus dive ×11, roll to 34°; clicks 10×, 20×, 40× the counted pixels fade on the way down
10 29.33–32.67 the frame softens, a focal plane sweeps left → right; a mint ring is drawn round one nucleus with caliper ticks, panel 肝细胞核 · 8.5 µm · 核膜外缘拟合 creep 345 → 318 µm the focal sweep and the ring
11 32.67–35.33 silence 32.3–32.67, then the climb: the scale bar jumps back 20 µm → 5 mm, six quick clicks pull ×145, roll 34° → 96° the climb back
12 35.33–39.5 the glass fills the frame, the slide's edge and a dark sliver of bench at the bottom; title written on the glass slow drift end card

Score structure

90 BPM, 4/4, one chord per bar: Dsus2 – Bm7 – Gmaj7 – Asus4 (twice), Bm under the verdict, Gmaj7, Em9 for the dive, D major when the nucleus lands, Gmaj7 for the climb, Dsus2 – D for the card. Every designed hit sits on the grid (demo/tools/cuecheck.py: 0 ms); turret clicks are foley on the picture's level changes.

Section Time Palette Notes
Open 0–2.67 bowed vibraphone pad, soft vibraphone arpeggio, long pulse bass, a high glass shimmer under the moving light, soft timpani
Push 2.67–5.33 hard-mallet vibraphone in 16ths, pulse bass in 8ths, riser turret click + servo at each level
Tissue 5.33–9.33 pad, quarter-note pulse pen on glass for the dimension line
Measure 9.33–20.67 vibraphone in 8ths, marimba off-beat ticks, quarter pulse per circle: pen for the arc, a band-passed scan moving left → right with counter ticks that speed up; glockenspiel + timpani when the reading lands (A 12.67, B 18.0); whoosh for the truck
Silence 1 21.8–22.67 room tone only
Verdict 22.67 timpani + gran cassa + glockenspiel B5 + low B in the bass first sound after the silence
Dive 26.67–29.33 16ths again, riser, three clicks
Land 29.33–32.3 water-glass motif D5–A4–F♯5–E5–D5 with echoes, D major pad, filtered sweep across the stereo field with the focal plane, glockenspiel F♯6 when the reading lands the only resolution in the film
Silence 2 32.3–32.67 room tone
Climb 32.67–35.33 a long whoosh, six lighter clicks
Card 35.33–39.5 reversed swell into a soft bass drum and bowed cymbal, the glass motif once more, slower; low D

Mix (in mix.py): stems set against the voice by active RMS (music −11 dB, pulse −14, foley −12, hits −6, room −30), music ducked ~4 dB under speech, gentle bus compression on music, pulse, foley and room only; a 38 Hz high-pass and a −4 dB shelf below 62 Hz on everything but the voice. The film measures −14.0 LUFS, LRA 5.8 LU, peak −1.8 dBFS.

Palette & props

  • Glass #F4F1EC (both the slide photo and the scan normalised to it), bench graphite #0B0D0F → #2A3036, ink #181B1F, frosted panels rgba(12,14,17,0.74) with a 1 px light rim, accent mint rgb(120,240,205) on stain and rgb(0,122,99) on glass.
  • The stain keeps its colour: trichrome red (hepatocyte cytoplasm) and blue (collagen).
  • Props: the slide photo (label and barcode as photographed, the maker's logo filled), the dimension line, two 1 mm circles with their counted-pixel masks, the verdict panel, the nucleus ring, the instrument panel (scale bar, field of view, magnification with a turning nosepiece glyph and a large flash of each new magnification), the source panel.
  • Narrator: Kokoro af_heart, speed 0.95.

End card

The camera climbs back until the glass fills the frame; on its empty cover glass, in ink: 量出来的蓝 (Noto Serif SC 600), Measured Blue, a rule drawn left to right, MICROSCOPE STORY · 显微叙事, LemoLab × Claude Opus 5.5, 数据:Ventana-1 · PathAI · CC0; the tissue fleck sits to the right. 4.2 s. The "LemoLab × Claude Opus 5.5" sign-off belongs to this library's demo only; a user's film carries no LemoLab credit and no copy of this card.

Build notes

demo/
  build.sh          one command: (plates if missing) -> voice -> speech check -> cues -> events -> video -> mix -> master -> .srt -> checks -> poster
  index.html        one canvas, fonts
  film.js           render(t): similarity camera keys + log-spiral interpolation, plate selection, objective events,
                    focus, frosted panels, every mark and reading, subtitles, end card, TEXTS, SUBCHECK, EV
  timeline.js       90 BPM grid, key moments, narration with zh/en lines and the numbers it states (checked)
  mix.py            score, foley, room, voice, mix -> out/mix.wav + out/stems/
  config.json       circle centres, nucleus guess, the roll the scan direction is computed for
  tools/            plates.py (registration, cleaning, plates, collagen masks and counts, tissue axis), nucleus.py,
                    fonts.py (all fonts), export.mjs (voice lines, cues, number check), subcheck.mjs, cuecheck.py, finalasr.py
  assets/           raw/Ventana-1.bif (227 MB, gitignored), plates/ (plates, ROI overlays, plates.json, nucleus.json)
  FACTS.md, CREDITS, TREATMENT.md, PRODUCTION_LOG.md, stills/styleframe.jpg
  • sh demo/build.sh takes about 5 minutes on Apple silicon (the picture renders in ~20–90 s with 4 workers; the final speech check is the slowest step). In a fresh clone it first downloads the slide (227 MB), rebuilds the plates and measurements (about a minute) and fetches the fonts (Barlow Condensed and IBM Plex Mono from github.com/google/fonts, Noto Sans SC / Noto Serif SC subsets from the Google Fonts API); FETCH=1 forces all of that again. The slide reader runs in its own demo/.venv (tifffile, imagecodecs).
  • Checks it runs: asr_check.py with small.en (decimals are written as Whisper writes them in each line's asr), the script's numbers against the measurements (export.mjs fails on a mismatch), the cue grid, single-line subtitle widths with the real fonts (widest 642 px against 960), readcheck.mjs, speech-to-text on the final mix, black frames.
  • Plates: slide photo 1251 × 3685 (21.2 µm/px), scan levels 5/4/3 whole with a 0.3 mm feather, level 2 whole (6144 × 5376, 1 µm/px), levels 1 and 0 as 5120 × 3584 crops around the nucleus. About 400 MB of decoded images per render worker.
  • Demo-specific pitfalls: the scanner tray's clips at the slide's far end could only be filled roughly, so that end stays out of frame in every shot; the slide photo's resolution tag was trusted only after the tissue's centroid matched the scan through AOI0 (19 µm); with fields between 2.6 and 2.8 mm the level-2 plate flips in and out, so the circles are held at 2.6–2.7 mm to keep the turret quiet during a reading; the scan direction of the counting mask is computed for the roll in config.json and must follow the camera if the roll changes.