An interactive article by Suvaditya Mukherjee, Merve Noyan, Aritra Roy Gosthipaty, and Pedro Cuenca for ML practitioners learning 3D: eight deep labs, four supporting figures and eight original lamp adaptations of the Manim sequences.
Read the article or open the Space.
Node 22.12+ is required. The project produces static files; it needs no server, inference provider, API key, training job or paid compute.
npm ci --registry=https://registry.npmjs.org
npm run build
npm test
npm run check:content
npm run preview
The preview uses localhost. Rolldown is pinned to 1.2.7 because its platform binaries are complete; regenerate lockfiles in a clean directory and verify Linux bindings before updating that pin. Hugging Face automatically builds the article from main using the app_build_command above. dist is intentionally not committed. See HF static build documentation.
src/content/chapters/*.mdx. Chapter order is src/content/chapters.json. Keep original prose in data-prose elements. Do not silently correct wording, duplicated sentences or factual claims from the source.docs/prose-baseline.json is the reviewed transcription, checked independently against docs/original-pdf-extraction.txt. The five authorized removals are recorded verbatim in docs/editorial-removals.json. Subsequent author-approved wording changes are recorded in docs/editorial-revisions.json; rendered prose is checked against those changes while the original PDF baseline remains intact. Existing media placeholders are replaced by figures; xkcd #927 is embedded from its official image URL with attribution and its CC BY-NC 2.5 license. New captions and controls remain outside data-prose.src/lib/registry.ts and src/lib/support-registry.ts define IDs, chapters, controls and captions. docs/figure-manifest.json records assets, defaults and provenance. Stable IDs are public links; keep them when revising a figure.public/assets/lamp-spec.json, then run python scripts/build-lamp.py with NumPy installed. Browser meshes, surface samples, analytic fields and Manim scenes all derive from this specification. Do not change generated geometry manually.animations/lamp_scenes.py. Render locally with Manim 0.20.1, NumPy, Pillow and PyAV. scripts/render-media.py --force rerenders 1080p/24fps MP4, WebM and posters with bundled Source Sans Pro. Use --output media/review-typography to review exports first, and scripts/verify-media.py media/review-typography to decode both formats and extract every stage. Default publication-directory exports refresh media URLs automatically. Text is shaped at 144pt then uniformly scaled to avoid small-size glyph-position rounding; notes wrap to their measured width at a constant font size. These are separate from the original cube animations.CHANGELOG.md and the last-updated metadata in src/pages/index.astro, then merge. No automatic prose rewriting, import service or PDF-generation service is part of the deployment.For publication with your locally authenticated Hugging Face account:
hf auth whoami
python scripts/publish.py --check
python scripts/publish.py
The publishing script uses an explicit allowlist and excludes caches, local build output, credentials and temporary render files. Later revisions should use python scripts/publish.py --create-pr so publication follows review. Inspect the Space and direct article URL after each build.
Each deep lab owns its controls and camera. Sharing serializes only that figure’s state into its URL; browser history stores independent states for all figures. The article mounts at most two lab renderers, pauses offscreen animation, destroys unused GPU contexts, and recreates them from retained controls. Heavy renderer code loads only when a lab enters the viewport. Surface geometry loads for the opening comparison; the full PlayCanvas bundle does not.
Canvas views support dragging, arrow keys and zoom buttons. The opening atlas also supports panning. Dense and sparse views share a side-by-side occupancy mask. The mesh assembly can play or be scrubbed with its slider. Timelines never advance automatically. Reduced motion prevents playback while permitting manual time scrubbing. Videos have native keyboard controls and preload="none". All eight labs include poster fallbacks and construction videos; text remains available without JavaScript/WebGL. Supporting figures include accessible values and descriptions.
The NeRF examples use deterministic analytic density around the shared lamp surfaces. Dynamic examples use scripted articulated motion. The Gaussian renderer projects covariance with a camera Jacobian and uses a truncated gradient approximation to the Gaussian kernel. The depth sensor uses nearest depth per discrete sensor pixel. Voxel occupancy samples the mesh surface, rather than representing a filled solid. These are teaching simulations, not trained models or newly generated native 4D assets.
The article design adapts the article variant of tfrere/research-article-template, pinned at c75fc29c361755f66c46ae6e83d958b10c4d5feb. The copied template components and license are retained; the deployed navigation and typography/layout are adapted. See template provenance and LICENSE.template (CC BY 4.0). The RL environments guide informed the interactive article presentation.
The source PDF is “A Hitchhiker’s Guide to 3D Representations,” supplied by the author. Its existing rights are retained. No new blanket license is assigned to the original prose. Third-party dependency licenses remain applicable; see THIRD_PARTY_NOTICES.md. The referenced comic is “Standards” by Randall Munroe, xkcd #927; it is linked, not reproduced.
The pre-existing standalone viewer under the parent project’s blog-artifacts/space/, its links, and the original animation sources/exports are unchanged.
Use the citation in the article footer or download BibTeX. The article credits Suvaditya Mukherjee, Merve Noyan, Aritra Roy Gosthipaty, and Pedro Cuenca; no affiliation or DOI is asserted.
The storage figure preserves exact byte totals, with one byte per conceptual ball. The boxes draw bounded samples of unique byte IDs, using large balls for the image and small balls for the volume (10 versus 80 columns). These are separate fixed display scales, not a proportional area comparison; no zoom or magnification lens is provided. Sample density and rendering limits are disclosed in the collapsed Storage math section. The default RGB8 comparison contains 3,145,728 image bytes and 3,221,225,472 volume bytes. Falling and rebound are procedural. The containers have no click or keyboard effects. Tests cover exact totals beyond 32-bit integers, fixed display sizes, sample uniqueness and deletion, and motion.
27 commits
An interactive article by Suvaditya Mukherjee, Merve Noyan, Aritra Roy Gosthipaty, and Pedro Cuenca for ML practitioners learning 3D: eight deep labs, four supporting figures and eight original lamp adaptations of the Manim sequences.
Read the article or open the Space.
Node 22.12+ is required. The project produces static files; it needs no server, inference provider, API key, training job or paid compute.
npm ci --registry=https://registry.npmjs.org
npm run build
npm test
npm run check:content
npm run preview
The preview uses localhost. Rolldown is pinned to 1.2.7 because its platform binaries are complete; regenerate lockfiles in a clean directory and verify Linux bindings before updating that pin. Hugging Face automatically builds the article from main using the app_build_command above. dist is intentionally not committed. See HF static build documentation.
src/content/chapters/*.mdx. Chapter order is src/content/chapters.json. Keep original prose in data-prose elements. Do not silently correct wording, duplicated sentences or factual claims from the source.docs/prose-baseline.json is the reviewed transcription, checked independently against docs/original-pdf-extraction.txt. The five authorized removals are recorded verbatim in docs/editorial-removals.json. Subsequent author-approved wording changes are recorded in docs/editorial-revisions.json; rendered prose is checked against those changes while the original PDF baseline remains intact. Existing media placeholders are replaced by figures; xkcd #927 is embedded from its official image URL with attribution and its CC BY-NC 2.5 license. New captions and controls remain outside data-prose.src/lib/registry.ts and src/lib/support-registry.ts define IDs, chapters, controls and captions. docs/figure-manifest.json records assets, defaults and provenance. Stable IDs are public links; keep them when revising a figure.public/assets/lamp-spec.json, then run python scripts/build-lamp.py with NumPy installed. Browser meshes, surface samples, analytic fields and Manim scenes all derive from this specification. Do not change generated geometry manually.animations/lamp_scenes.py. Render locally with Manim 0.20.1, NumPy, Pillow and PyAV. scripts/render-media.py --force rerenders 1080p/24fps MP4, WebM and posters with bundled Source Sans Pro. Use --output media/review-typography to review exports first, and scripts/verify-media.py media/review-typography to decode both formats and extract every stage. Default publication-directory exports refresh media URLs automatically. Text is shaped at 144pt then uniformly scaled to avoid small-size glyph-position rounding; notes wrap to their measured width at a constant font size. These are separate from the original cube animations.CHANGELOG.md and the last-updated metadata in src/pages/index.astro, then merge. No automatic prose rewriting, import service or PDF-generation service is part of the deployment.For publication with your locally authenticated Hugging Face account:
hf auth whoami
python scripts/publish.py --check
python scripts/publish.py
The publishing script uses an explicit allowlist and excludes caches, local build output, credentials and temporary render files. Later revisions should use python scripts/publish.py --create-pr so publication follows review. Inspect the Space and direct article URL after each build.
Each deep lab owns its controls and camera. Sharing serializes only that figure’s state into its URL; browser history stores independent states for all figures. The article mounts at most two lab renderers, pauses offscreen animation, destroys unused GPU contexts, and recreates them from retained controls. Heavy renderer code loads only when a lab enters the viewport. Surface geometry loads for the opening comparison; the full PlayCanvas bundle does not.
Canvas views support dragging, arrow keys and zoom buttons. The opening atlas also supports panning. Dense and sparse views share a side-by-side occupancy mask. The mesh assembly can play or be scrubbed with its slider. Timelines never advance automatically. Reduced motion prevents playback while permitting manual time scrubbing. Videos have native keyboard controls and preload="none". All eight labs include poster fallbacks and construction videos; text remains available without JavaScript/WebGL. Supporting figures include accessible values and descriptions.
The NeRF examples use deterministic analytic density around the shared lamp surfaces. Dynamic examples use scripted articulated motion. The Gaussian renderer projects covariance with a camera Jacobian and uses a truncated gradient approximation to the Gaussian kernel. The depth sensor uses nearest depth per discrete sensor pixel. Voxel occupancy samples the mesh surface, rather than representing a filled solid. These are teaching simulations, not trained models or newly generated native 4D assets.
The article design adapts the article variant of tfrere/research-article-template, pinned at c75fc29c361755f66c46ae6e83d958b10c4d5feb. The copied template components and license are retained; the deployed navigation and typography/layout are adapted. See template provenance and LICENSE.template (CC BY 4.0). The RL environments guide informed the interactive article presentation.
The source PDF is “A Hitchhiker’s Guide to 3D Representations,” supplied by the author. Its existing rights are retained. No new blanket license is assigned to the original prose. Third-party dependency licenses remain applicable; see THIRD_PARTY_NOTICES.md. The referenced comic is “Standards” by Randall Munroe, xkcd #927; it is linked, not reproduced.
The pre-existing standalone viewer under the parent project’s blog-artifacts/space/, its links, and the original animation sources/exports are unchanged.
Use the citation in the article footer or download BibTeX. The article credits Suvaditya Mukherjee, Merve Noyan, Aritra Roy Gosthipaty, and Pedro Cuenca; no affiliation or DOI is asserted.
The storage figure preserves exact byte totals, with one byte per conceptual ball. The boxes draw bounded samples of unique byte IDs, using large balls for the image and small balls for the volume (10 versus 80 columns). These are separate fixed display scales, not a proportional area comparison; no zoom or magnification lens is provided. Sample density and rendering limits are disclosed in the collapsed Storage math section. The default RGB8 comparison contains 3,145,728 image bytes and 3,221,225,472 volume bytes. Falling and rebound are procedural. The containers have no click or keyboard effects. Tests cover exact totals beyond 32-bit integers, fixed display sizes, sample uniqueness and deletion, and motion.
27 commits