Skip to content

Gold Pocket Watch

A polished gold pocket watch whose hands show any time, with a ticking, beating or sweeping second hand.

3D object, V2 Objects3D410 lines of codev1.0.0

In Machines & clockwork, Craft & heritage

Next: AstrolabeSurprise me

Gold Pocket Watch preview
Starting live preview…
00:00:00:00 / 00:00:00:01

Live, running the real source at reduced resolution.

Your current settings go with it. Combine several clips and hand them over together from your sequence.

Effect controls

Presets

10
8
36

How the second hand moves in real time.

Fast speeds turn the clip into a time-lapse.

The domed glass over the dial. It adds reflections; turn it off for the clearest dial.

The preview runs the same code your AI receives. These settings travel with the hand-off.

Info

What it is

A pocket watch made entirely in code: a lathe-turned gold case with a domed glass crystal, an enamel dial with Roman numerals or applied batons, blued-steel Breguet hands, a knurled crown and a chain. Set the time it starts at and how fast time runs, from real time with a quartz tick to a time-lapse where the hands race round. Pick the case metal and the dial.

Reuse it in your own idea

  • Countdown or deadline scene: set the start time a few seconds before the hour and let it tick, with Rolling Counter or Kinetic Title beside it.
  • Time-lapse: 'An hour per second' races the hands round for 'later that day' or 'all-nighter' moments.
  • Luxury product shot: change the case metal and dial for a different brand feel and orbit it with Smooth Orbit Camera.

Which part is reusable

src/pocket-watch.js is the ingredient your AI reuses. demo.js is only the example scene around it, and uses chrome-material only for the demo.

Good to know

  • Only the dial side is modelled: there is no movement or caseback to show.
  • The hands show a 12-hour time; there is no date or day.
  • At an hour per second the second hand is hidden, because it would strobe.

Technical details

Technical details
Implementation
Three.js 0.185.1 (WebGL) · ES module src/pocket-watch.js
Exports
  • createPocketWatch({ finish?, dial?, numerals?, chain?, crystal?, anisotropy? }) => { group, setTime(seconds, { motion?, showSeconds? }), dispose() }
  • handAngles(seconds, motion = 'tick') => { hour, minute, second }
  • watchSeconds(info, { start?, rate? }) => number
  • drawDial({ dial?, numerals?, size?, dialRadius? }) => HTMLCanvasElement
Dependencies (exact)
  • three@0.185.1 (source) — Geometry, physical materials, transmission glass and shadows.
  • chrome-material@1.1.0 (demo) — Demo uses the shared studio: environment light, cove, floor and contact shadow.
  • apw-runtime@1.0.0 (demo) — Demo harness.
How it fits a scene

Coordinates: Watch units: case radius 1, dial facing +Y, 12 o'clock toward -Z. The back rests on y = -0.16 and the chain lies at that level, so lift the group by 0.16 × its scale to stand it on a floor.

Lighting: Image-based (scene.environment) for the metal; add a shadow-casting directional light for hand shadows on the dial.

Timing: setTime(seconds) is a pure function of the time shown; frames render in any order.

Output
1080×1080, 30 fps, 8 s · procedural (computed from the frame number) · not a loop — Not a loop: the hands show time passing. The camera sway is periodic, so only the hands jump when a preview restarts.
Tested
Rendered 240 frames on 2026-10-05 in Chrome 154.0.8037.97 headless on Linux 7.0.0-38-generic (x64), Node 22.14.0 (WebGL 2 via SwiftShader (software)). Same frame twice from fresh pages: identical.
Performance
About 320 meshes plus one instanced chain; the dial texture (2048 × 2048) is drawn once; the glass crystal costs one extra transmission pass per frame. On phones pass crystal: false and drawDial({ size: 1024 }), or skip shadow maps.
Export a video yourself
Download the source, then in the folder: npm install npm run render -- pocket-watch/1.0.0 --out my-video.mp4Needs Node 18+, ffmpeg and Chrome/Chromium. Add --params my-settings.json (from Copy settings) for your own settings.
Version
1.0.0 · sha256:3ba904ff66e7fa8b… · other versions: 1.0.1
Files
License
MIT. Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder. Third-party: three.js 0.185.1 (MIT). License details
Provenance
Adapted from the owner's threejs-sketches/objects-scenes/pocket-watch (MIT), rebuilt for AI Pixel Wizard in October 2026: new lathe-turned case, crystal, font-free dial, Breguet hands and chain, the shared studio, and the frame/time contract.
BinMore like this

Astrolabe

3D object3DSeamless loop16 seconds

Music Box

3D object3DSeamless loop12 seconds

Gyroscope

3D object3DSeamless loop16 seconds

Hourglass

3D object3DSeamless loop16 seconds