# Disc

> Gyre pack: a wide disc top in spun brass with a turned walnut handle, sleeping on its point in window light. Its spin really decays: it precesses, wobbles wider, topples onto its rim and rolls round like Euler's disk, faster and faster, then stops dead and is spun again. Drag across it to spin it up, tap to knock it. Raymarched in WebGL, with motion blur set by a shutter speed.

- Slug: `gyre-disc`
- Category: [Asset packs](https://www.assembli.design/category/asset-packs.md)
- Subcategory: [Gyre](https://www.assembli.design/category/asset-packs/gyre.md) (`gyre`)
- Type: component
- Tags: 3d, webgl, raymarching, physics, spinning-top, metal, motion-blur, top, disc, brass, walnut, spin
- npm dependencies: none
- shadcn/ui dependencies: none
- Live preview: https://www.assembli.design/preview/gyre-disc
- Page: https://www.assembli.design/components/gyre-disc

![Disc preview](https://www.assembli.design/thumbnails/gyre-disc-light.png)

## Props

Other props pass through to the root element.

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `palette` | `GyrePalette` |  | A preset palette. Every piece in the pack reads the same colors. |
| `colors` | `Partial<GyreColors>` |  | Override any color of the palette, as any CSS color. |
| `studio` | `string` |  | The table the piece stands on, as any CSS color: what its metal reflects below the horizon. Match it to the page behind. By default it's a warm paper white, or near black on dark surfaces. |
| `light` | `GyreLight` |  | How the set is lit. Changing it crossfades. |
| `shutter` | `number` |  | Shutter speed in seconds: how far the spin blurs in each frame. 1/60 shows spokes as a veil; 0 freezes them sharp, as if lit by a strobe. |
| `speed` | `number` |  | Playback speed. 0 holds the moment; reduced motion always holds it. |
| `interactive` | `boolean` |  | Drag across a piece to spin it up, tap to knock it (or to spin it again once it's down). |
| `poke` | `number` |  | Change this value to knock it on cue. |
| `shadow` | `boolean` |  | The shade the piece casts and the window's bars on the table. |
| `surface` | `"auto" \| "light" \| "dark"` |  | What the piece sits on. "auto" follows the page theme; set "light" or "dark" when it sits on its own backdrop. |
| `rotate` | `[number, number]` |  | Move the camera, in degrees: [higher, round to the right]. |
| `onRpm` | `(rpm: number) => void` |  | Called about ten times a second with the spin in revolutions per minute, for a readout. |

## Install

One-time setup (needs a subscription):

1. Add the registry to the project's `components.json`: `{"@assembli":{"url":"https://www.assembli.design/r/{name}.json","headers":{"Authorization":"Bearer ${ASSEMBLI_API_KEY}"}}}` (merge into `"registries"`).
2. Put an API key from https://www.assembli.design/account in `.env.local` as `ASSEMBLI_API_KEY=asm_…`.

Then install with the shadcn CLI (writes `components/gyre-disc/gyre-disc.tsx` and installs dependencies):

```bash
npx shadcn@latest add @assembli/gyre-disc
```

Registry item JSON: https://www.assembli.design/r/gyre-disc.json (send `Authorization: Bearer <api key>`)

## Code

> Component source needs an Assembli subscription ($12/month or $96/year) and an API key sent as `Authorization: Bearer <key>`. To get one without copying anything, POST https://www.assembli.design/api/agent/login (or call the MCP tool connect_account), show the user the link it returns, and poll https://www.assembli.design/api/agent/token for the key. Or subscribe at https://www.assembli.design/pricing and create a key at https://www.assembli.design/account.
