How neutrino mass shapes the cosmic web — scientific animation
Dark-background, text-free animation (42 s, 1920×1080, 30 fps) of how massive neutrinos suppress the growth of small-scale structure, with matched initial conditions in both panels.
Deliverables (output/)
| File | What |
|—|—|
| neutrino_mass_cosmic_web.mp4 | H.264, 1920×1080, 30 fps, yuv420p, BT.709, CRF 13 |
| final_still_1080p.png | presentation-ready final composition (1920×1080) |
| final_still_3840x2160.png | same composition re-rendered at 4K |
Storyboard
| Time | Content | |—|—| | 0–14 s | Two synchronised panels (Σm_ν = 0 and 0.4 eV): early density fluctuations grow into the cosmic web. Same random phases, camera, scale and colour scale. | | 13.5–26 s | Both panels zoom into the same region; three soft rings mark knots whose small-scale contrast differs; sparse tracer particles (right panel) free-stream in straight lines through the evolving structure. | | 26–29 s | Panels zoom out and slide left, graph area opens. | | 29–36.5 s | CAMB curves for Σm_ν = 0.1, 0.2, 0.4 eV are drawn from large to small scales (log k axis, baseline at 1). The 0.4 eV curve, the right panel frame and its label share one colour (orange). The high-k region is gently highlighted. | | 36.5–42 s | Final composition held for 5.5 s. |
Scientific basis and honest caveats
- Graph = validated data.
cosmology.pyruns CAMB (linear theory) for Σm_ν = 0, 0.1, 0.2, 0.4 eV with the same ω_m = 0.143, ω_b = 0.0224, h = 0.675, A_s = 2.1×10⁻⁹, n_s = 0.965 (only the CDM/neutrino split changes, 3 degenerate species) and plots P_tot(k, z=0) / P_tot,massless(k, z=0). High-k plateaus: 0.938, 0.869, 0.738. - Panels = qualitative illustration. Particles follow a truncated Zel’dovich displacement of a Gaussian
random field (
webcore.py). The massive panel multiplies each Fourier band by the CAMB growth-suppression factor sqrt(R(k, z)) at every epoch, so large scales are identical and small scales grow less. Two illustration parameters inconfig.pyare not physical values:AMP = 1.25— overall amplitude, compensating the Zel’dovich approximation’s missing late-time collapse.BOOST = 3.0— exaggerates the log of the suppression so the 0.4 eV difference is visible at a glance (the real effect is ~13 % in amplitude). SetBOOST = 1.0for the unexaggerated CAMB suppression. No numerical suppression values are shown in the panels.
- Neutrinos are never drawn destroying structures. Tracers move ballistically at speeds drawn from one fixed distribution; they are shown only in the massive panel and their speeds do not depend on mass.
Rebuild
python -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python cosmology.py # CAMB spectra -> data/camb_spectra.npz
.venv/bin/python animate.py prep # zoom region + ring positions -> data/scene.json
.venv/bin/python animate.py preview 6 14 22 31 38 # stills -> output/preview/
.venv/bin/python animate.py render # MP4 (about 8 min on an M-series Mac)
.venv/bin/python animate.py still # final still; --scale 2 for 3840x2160
cache/ (≈1 GB of Fourier-synthesised displacement bands) is regenerated automatically on first use.
Files
config.py— timeline, layout, colours, illustration parameters (the editable “project” settings)cosmology.py— CAMB spectra ·webcore.py— web engine ·style.py— palette and density→colour mapanimate.py— scene composition, frame renderer, ffmpeg encoding