{
  "schemaVersion": 1,
  "id": "armillary-sphere",
  "version": "1.0.0",
  "status": "published",
  "kind": "object",
  "title": "Brass Armillary Sphere",
  "summary": "An engraved brass armillary sphere, the astronomers' model of the sky, slowly turning on its stand. Loops perfectly.",
  "description": "A polished armillary sphere: nested rings for the celestial equator, tropics, polar circles and colures, a wide ecliptic band engraved with its degrees, a small enamel Earth at the centre and a gold Sun bead travelling the ecliptic, all held in an engraved meridian ring and horizon ring on a turned stand. The sky turns about its tilted axis while the camera drifts round it, and the rings cast a lattice of shadows on the floor. Choose the metal, the latitude the axis is set to, how many turns per loop, the Earth's finish and the backdrop colour.",
  "role": "Hero object (Three.js 3D): a scientific instrument in polished metal for intros and end cards.",
  "collections": [
    "chrome-glass",
    "hypnotic-loops",
    "product-reveals"
  ],
  "tags": [
    "armillary sphere",
    "astronomy",
    "brass",
    "gold",
    "globe",
    "antique",
    "science",
    "instrument",
    "rings",
    "loop",
    "3d"
  ],
  "synonyms": [
    "astrolabe",
    "celestial sphere",
    "brass globe",
    "gyroscope rings",
    "orrery",
    "astronomical instrument",
    "spinning rings",
    "antique globe"
  ],
  "useCases": [
    "An elegant opener for science, history and astronomy videos",
    "A luxury or heritage brand backdrop with a slow loop",
    "A thinking-and-discovery visual for podcasts and documentaries"
  ],
  "featured": null,
  "publishedAt": "2026-10-05",
  "implementation": {
    "target": "three",
    "runtime": "browser",
    "language": "javascript",
    "module": "esm",
    "entry": "src/armillary-sphere.js",
    "exports": [
      {
        "name": "createArmillarySphere",
        "signature": "createArmillarySphere({ metal?, latitude?, globe?, anisotropy? }) => { group, setProgress(progress, { turns? }), setAngles({ sky, sun, earth }), bounds, dispose() }",
        "description": "The instrument as a THREE.Group (1 unit = the sky's radius, the stand down to y = −2). setProgress(0…1) moves it round one seamless loop."
      },
      {
        "name": "METALS",
        "signature": "METALS: { brass, gold, silver, bronze }",
        "description": "The finishes: colour and roughness."
      }
    ],
    "reusable": [
      "src/armillary-sphere.js"
    ],
    "demo": "demo.js",
    "harness": "index.html"
  },
  "dependencies": [
    {
      "id": "three",
      "version": "0.185.1",
      "reason": "Renderer, geometry and physical materials."
    },
    {
      "id": "chrome-material",
      "version": "1.1.0",
      "scope": "demo",
      "reason": "Studio environment light, backdrop and contact shadow."
    },
    {
      "id": "apw-runtime",
      "version": "1.0.0",
      "scope": "demo",
      "reason": "Demo harness."
    }
  ],
  "params": [
    {
      "key": "metal",
      "label": "Metal",
      "type": "select",
      "default": "brass",
      "options": [
        {
          "value": "brass",
          "label": "Brass"
        },
        {
          "value": "gold",
          "label": "Gold"
        },
        {
          "value": "silver",
          "label": "Silver"
        },
        {
          "value": "bronze",
          "label": "Antique bronze"
        }
      ]
    },
    {
      "key": "latitude",
      "label": "Latitude",
      "help": "Degrees: the polar axis is set this high above the horizon, as for a place on Earth.",
      "type": "number",
      "min": 0,
      "max": 90,
      "step": 0.5,
      "default": 38.5
    },
    {
      "key": "turns",
      "label": "Turns per loop",
      "type": "integer",
      "min": 1,
      "max": 3,
      "step": 1,
      "default": 1
    },
    {
      "key": "globe",
      "label": "Earth",
      "type": "select",
      "default": "enamel",
      "options": [
        {
          "value": "enamel",
          "label": "Blue enamel"
        },
        {
          "value": "metal",
          "label": "Polished metal"
        }
      ]
    },
    {
      "key": "background",
      "label": "Backdrop",
      "type": "color",
      "default": "#13233a"
    },
    {
      "key": "orbit",
      "label": "Camera drift",
      "type": "boolean",
      "default": true
    }
  ],
  "presets": [
    {
      "id": "default",
      "label": "Brass on navy",
      "params": {}
    },
    {
      "id": "gold",
      "label": "Gold on black",
      "params": {
        "metal": "gold",
        "background": "#121214"
      }
    },
    {
      "id": "silver",
      "label": "Silver on slate",
      "params": {
        "metal": "silver",
        "globe": "metal",
        "background": "#3a4452"
      }
    },
    {
      "id": "bronze",
      "label": "Antique bronze on burgundy",
      "params": {
        "metal": "bronze",
        "latitude": 51.5,
        "background": "#3b1219"
      }
    }
  ],
  "output": {
    "width": 1080,
    "height": 1080,
    "fps": 30,
    "durationSeconds": 12,
    "posterSeconds": 3,
    "alpha": false,
    "motion": "procedural",
    "loop": {
      "seamless": true,
      "cycleSeconds": 12,
      "method": "The sky, the Sun bead and the Earth turn whole turns per loop and the camera drift is a sine of the loop progress, so the last frame meets the first."
    },
    "seed": null
  },
  "composition": {
    "inputs": "Loop progress 0…1 (or the angles of the sky, Sun and Earth directly).",
    "outputs": "A THREE.Group: the whole instrument with its stand, centred on the sky at the origin.",
    "coordinates": "1 unit = the radius of the celestial rings; the horizon ring reaches 1.42 out and the base stands on y = −2. Scale the group to fit your scene.",
    "lighting": "Physical metal: needs an environment map (scene.environment) to look like metal; a shadow-casting key light shows off the ring shadows.",
    "timing": "setProgress(progress) is a pure function of progress; frames render in any order.",
    "compatibleWith": [
      "chrome-material",
      "orbit-camera",
      "kinetic-title",
      "pocket-watch"
    ],
    "notes": [
      "The engravings (hours on the equator, degrees on the ecliptic, meridian and horizon) are drawn once into textures; no image files.",
      "Latitude 38.5 is about Lisbon; 51.5 London; 40.7 New York; 0 puts the axis flat on the horizon, 90 straight up."
    ]
  },
  "reuse": [
    "Science or history intro: the brass preset with a title over the top third of the frame.",
    "Luxury backdrop: gold on black, camera drift on, behind a product name.",
    "In your own scene: add the group, scale it, and drive setAngles from anything (scroll, a clock)."
  ],
  "integration": {
    "newProject": "Set scene.environment (createStudioEnvironment from Chrome Material works), add createArmillarySphere().group, and call setProgress(frame / totalFrames) each frame.",
    "existingProject": "Copy src/armillary-sphere.js. Add the group to your scene, scale it, and set the progress or the angles every frame."
  },
  "performance": {
    "notes": "About 60 meshes and six canvas textures made once; nothing is rebuilt per frame. Smooth at 1080p on laptop GPUs.",
    "limits": "Shadows from many thin rings are the main cost; lower the shadow map size on slow devices. Software WebGL (no GPU) renders slowly."
  },
  "limitations": [
    "A decorative model: the rings and the Sun's motion follow the real geometry (obliquity, latitude), but it does not show real dates or star positions.",
    "Engraved numerals use the system serif font."
  ],
  "license": {
    "spdx": "MIT",
    "notice": "Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder.",
    "thirdParty": [
      {
        "name": "three.js",
        "version": "0.185.1",
        "license": "MIT",
        "url": "https://github.com/mrdoob/three.js"
      }
    ]
  },
  "provenance": "Adapted from the owner's threejs-sketches/objects-scenes/astrolabe-align (MIT), rebuilt for AI Pixel Wizard in October 2026 as a true armillary sphere: celestial rings in their real geometry, engraved scales, an enamel Earth and Sun bead, a turned stand, a seamless loop and the frame/time contract.",
  "changelog": [
    {
      "version": "1.0.0",
      "date": "2026-10-05",
      "notes": "Initial release."
    }
  ]
}
