← SplineCONTENT HISTORY
WHAT CHANGED
Update to Spline
Snapshot Oct 24, 2026 · 13:29 UTC · version 1.2.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save Spline and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Planet & space scenes: realistic textured planets (AI texture layer — take the initiative), stylized procedural planets, atmosphere rims, rings, moons, space lighting and backdrop. Load for prompts like \"planet\", \"earth\", \"mars\", \"moon\", \"solar system\", \"space scene\".",
"included_files": [],
"name": "spline-3d-planets",
"skill_md_contents": "---\nname: spline-3d-planets\ndescription: \"Planet & space scenes: realistic textured planets (AI texture layer — take the initiative), stylized procedural planets, atmosphere rims, rings, moons, space lighting and backdrop. Load for prompts like \\\"planet\\\", \\\"earth\\\", \\\"mars\\\", \\\"moon\\\", \\\"solar system\\\", \\\"space scene\\\".\"\n---\n\n# Planets & space\n\nA planet is a texture-and-light job, not a geometry job. The user saying\n\"a realistic planet\" IS the ask — generate the surface texture on your own\ninitiative; don't wait for the word \"texture\".\n\n## Realistic planet (the default read of \"planet\")\n\n```\nbackground('#05060f'); // deep space\nmesh('Sphere', { width: 400, height: 400, depth: 400 });\nlayer('texture', { style: 'earth-like planet surface, oceans and continents, seamless' });\nlayer('fresnel', { color: '#9ec5ff', alpha: 0.45, scale: 1 }); // atmosphere rim\nshading({ category: 'physical', roughness: 0.9, metalness: 0,\n bumpMap: 'texture', roughnessMap: 'texture', bumpMapIntensity: 6 });\nrename('Planet');\nlight('Directional', { intensity: 1.1, color: '#fff3df' }); // the sun\n```\n- The planet's slow spin is MOTION, so it lives in the file's motion\n document (# Motion & interactivity; `animation` skill):\n `spline.updateObject(planetId, { rotation: { y: (t * 15) % 360 } })`\n per frame. The moons below ride the same loop.\n- Space is a ONE-light setting: move the sun key up and to one side and let\n the night side fall dark — no fill. Two defaults fight this: a fresh scene\n usually already has a Directional Light — reuse it as the sun (or `remove`\n it) instead of adding a second one — and the page's always-on ambient fill\n washes the dark side: kill it with `environment({ ambient: false })`, or if\n the dark side must stay readable keep it dim instead,\n `environment({ ambient: { color: '#1b2340', intensity: 0.3 } })`. A sun\n slightly above intensity 1 is OK here ONLY because the ambient fill is\n disabled — with the ambient on, that same key overexposes.\n- `bumpMap`/`roughnessMap: 'texture'` reuse the surface texture as relief and\n gloss maps: continents and craters catch the sun, darker oceans read\n glossier. The shorthand resolves to the material's top texture layer, so\n keep the `shading` call AFTER `layer('texture', …)`. There is no metalness\n map — `metalness` stays a plain number.\n- Match the fresnel color to the planet: blue for earth-like, '#e8b28a' dust\n haze for mars, none for an airless moon.\n- Texture `style` prompts that work — always append 'seamless' (the image\n wraps the sphere's UVs): 'earth-like planet surface, oceans and continents,\n seamless'; 'red rocky mars surface, craters and dust, seamless'; 'banded gas\n giant clouds, beige and rust, seamless'; 'gray cratered moon rock, seamless'.\n- The texture resolves ASYNCHRONOUSLY — a checkerboard placeholder until then.\n Don't fight it: re-`take_screenshot()` on a later turn. Generation is also a\n PAID feature — on plans without the AI-texture entitlement the call can fail\n outright. Either way (error, or a checkerboard that never resolves), fall\n back to the stylized recipe below (full caveats in materials-and-look).\n\n## Stylized planet (toy / low-poly scenes)\n\nSkip the image; build the surface procedurally — always renders:\n```\nmesh('Sphere', { width: 400, height: 400, depth: 400 });\ncolor('#2f6fb0'); // ocean base\nlayer('noise', { alpha: 0.55 }); // continents\nlayer('fresnel', { color: '#9ec5ff', alpha: 0.4, scale: 1 }); // atmosphere\nshading({ category: 'physical', roughness: 0.8, metalness: 0 });\n```\n\n## Rings (Saturn look)\n\nA `Torus` flattened on y, tilted, and slightly translucent:\n```\nmesh('Torus', { width: 900, height: 900, depth: 900, tubularSegments: 64 });\nscale({ y: 0.04 });\nrotation({ x: 12, z: 8 });\ncolor('#d8c9a8');\nopacity(0.8);\nrename('Rings');\n```\nMatch the planet's tilt on the planet itself (`rotation({ z: 8 })`) so the\nrings read as equatorial.\n\n## Moons & satellites\n\nSmall spheres at varied distances:\n```\nfor (let i = 0; i < 2; i++) {\n const d = 90 - i * 30;\n mesh('Sphere', { width: d, height: d, depth: d });\n layer('texture', { style: 'gray cratered moon rock, seamless' });\n shading({ category: 'physical', roughness: 1, metalness: 0,\n bumpMap: 'texture', bumpMapIntensity: 8 });\n position({ x: 420 + i * 260, y: 60 + i * 90, z: -120 * i });\n rename('Moon ' + (i + 1));\n}\n```\nTheir motion is code — the `animation` skill's \"Orbits, spins & travel\":\neach moon gets its OWN orbit radius/speed/phase around the planet\n(`x = px + Math.cos(t * w + phase) * r; z = pz + Math.sin(t * w + phase) * r`\n— a REAL orbit, which states never gave you) plus a slow spin\n(`rotation.y = (t * 20 + i * 40) % 360`), every body out of sync so the\nsystem reads layered, never synchronized.\n\n## Finishing\n\n- `group` the planet, rings, and moons and name the group so the scene tree\n stays readable. Select them with a name FILTER over the names you set —\n `select(o => o.name === 'Planet' || o.name === 'Rings' || o.name.startsWith('Moon'))`\n — NEVER a bare string: `select('Planet')` is the select-ALL wildcard and\n would sweep the camera and sun into the group. Do the grouping in a LATER\n `run_code` call than the one that created the objects (filters only see the\n scene as of the call's start).\n- Frame with `set_view` and screenshot ONCE the texture has had a turn to\n resolve — judging the look against a checkerboard wastes a screenshot.\n- No post-effects finishing pass: the mood comes from the texture, the\n fresnel rim, and the lighting. `fx` effects are opt-in — add\n bloom/vignette only when the user asks for them.\n"
}SHA-256 of public snapshot: c6147c1fd3053d94343d5f9bb25e4347f6de5fe68c319de5222d819d3d030cfc