-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblack-hole-spin.config.json
More file actions
46 lines (40 loc) · 5.97 KB
/
Copy pathblack-hole-spin.config.json
File metadata and controls
46 lines (40 loc) · 5.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
"$schema": "../schema.json",
"name": "black-hole-spin",
"description": "The Gargantua black hole in motion — a spinning accretion disk — in three.js / WebGL.",
"systemPrompt": "You are a creative WebGL / three.js developer. Output a SINGLE self-contained HTML document. three.js r160 is preloaded; an import map that resolves it is ALREADY injected into your page — you never add it or fetch anything.\n\nIMPORTS — follow this exactly; deviating renders a BLANK page:\n1. Use ONE <script type=\"module\"> for your code. Put EVERY `import` statement at its very top, at module top level.\n2. A static `import` is legal ONLY at module top level — NEVER inside a try/catch, function, if, or any block. `import * as THREE from 'three';` placed inside a try { } is a SYNTAX ERROR that blanks the whole page. This is the single most common failure here — do not do it.\n3. Import the core library with the bare specifier `three`; import add-ons with the `three/addons/…` prefix (the same paths as three r160's examples/jsm/). These bare specifiers are the ONLY thing that resolves:\n import * as THREE from 'three';\n import { OrbitControls } from 'three/addons/controls/OrbitControls.js';\n4. Do NOT write your own <script type=\"importmap\">, and do NOT import from any URL or CDN (unpkg, jsdelivr, esm.sh, skypack, cdnjs, or any http(s)://…). The sandbox has NO network — every external request fails, and a second import map breaks module loading. Bare specifiers only.\n5. For error handling, wrap the SCENE SETUP that runs AFTER the imports in try/catch — never the import lines themselves.\n\nExact skeleton to follow:\n<script type=\"module\">\nimport * as THREE from 'three';\n// any other top-level imports here, e.g. three/addons/...\ntry {\n // ALL renderer + scene setup + the render loop go here\n} catch (e) {\n // optional; whatever was built above still shows\n}\n</script>\n\nFollow the composition exactly — this is a controlled comparison, do not improvise the layout or camera.\n\nRELIABILITY RULES (the scene is rendered in HEADLESS SOFTWARE WebGL and a 5-second clip is captured frame-by-frame):\n- Do NOT use postprocessing (EffectComposer, RenderPass, UnrealBloomPass, ShaderPass): in software WebGL these run at seconds per frame and the capture times out. Fake glow instead with additive blending, sprite/point textures, emissive colors, and layered transparent meshes — it looks just as good here.\n- Drive ALL motion from the requestAnimationFrame timestamp (or performance.now()), NOT a fixed per-frame increment, so animation speed is framerate-independent.\n- Set renderer clear color / scene background to near-black space FIRST, and start the render loop immediately, so a partial failure still shows a scene rather than a blank page.\n- Keep the scene lightweight (a few thousand vertices, one canvas-generated texture at most). No shadow maps.\n- Keep every `import` at module top level — never inside a try/catch or any block (a static import there is a syntax error that blanks the page; see IMPORTS above). Put try/catch around the scene setup that runs AFTER the imports. Ensure the document is complete with every tag closed; if running long, simplify rather than truncate.",
"prompt": "Render a realistic supermassive black hole — the 'Gargantua' look from the film Interstellar — as a full-screen three.js scene (100vw × 100vh, auto-starting, no user interaction). A 5-SECOND CLIP of the scene is captured, so the motion matters as much as the still composition.\n\nComposition (match exactly so results are comparable):\n- The black hole (event horizon) is a perfectly black sphere centered in the frame, its diameter about 28% of the viewport height.\n- A bright, thin accretion disk lies in a HORIZONTAL plane around the sphere and is viewed nearly edge-on: the camera sits only about 5–8 degrees above the disk plane, so the disk reads as a near-horizontal bright band cutting across the sphere's middle and extending well past it on both sides.\n- Gravitational lensing: the far side of the disk appears bent UP and OVER the top of the black sphere AND mirrored UNDER the bottom, forming the signature bright halo arcs above and below the horizon (not merely a flat ring). Approximate this with extra bright arcs wrapping over and under the sphere (partial ring/torus geometry works well).\n- A thin, bright photon ring hugs the very edge of the black sphere.\n- Disk coloring: hot white-yellow on the inner edge fading outward to amber then deep orange (#fff3d0 → #ffae3b → #c8551a). Make one side of the disk slightly brighter than the other (relativistic beaming).\n- Background: near-black space with a sparse, dim starfield.\n\nMotion (the point of this benchmark — must be clearly visible within the 5-second clip):\n- The accretion disk rotates around the black hole at roughly 25–40 degrees per second, so a recognizable feature travels a quarter to half a revolution during the clip. Give the disk visible azimuthal structure (brightness clumps, streaks, or turbulent bands) so the rotation reads clearly — a featureless ring would look static.\n- Add subtle shimmering/flicker in the disk and lensing arcs, and slow drift in the beaming highlight. The camera stays FIXED.\n\nKeep the black hole centered and the disk horizontal. Return ONLY a single complete HTML document.",
"render": {
"viewportWidth": 1280,
"viewportHeight": 800,
"fullPage": false,
"waitMs": 4000,
"freezeClock": true,
"seed": 7,
"screenshotTimeoutMs": 120000,
"video": {
"durationMs": 5000,
"fps": 24,
"preRollMs": 2000
}
},
"grid": {
"columns": 3,
"cellWidth": 620,
"padding": 8,
"background": "#050507",
"labelStyle": "topbar",
"labelColor": "#ffffff",
"labelFontSize": 20,
"labelOverlayBg": "rgba(10,12,16,0.66)"
},
"generation": {
"temperature": 0.7,
"maxTokens": 28000,
"concurrency": 9,
"timeoutMs": 420000,
"retries": 1,
"reasoningEffort": "low"
},
"models": "../models/standard-9.json"
}