You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|[FORK.md](FORK.md)| Copy the loop. Swap the sport. |
90
90
|[NOTICE](NOTICE)| MIT is the code, not the names |
91
91
|[SUPPORT.md](SUPPORT.md)| How to ask |
92
92
|[SECURITY.md](SECURITY.md)| How to report a hole |
93
93
|[CONTRIBUTING.md](CONTRIBUTING.md)| How to land a patch |
94
94
95
-
### Install
96
-
97
-
See above. Node 22. `npm install` · `npm run dev`.
98
-
99
-
### Update flow
100
-
101
-
`git pull` → `npm install` if the lockfile moved → `npm run test:pin`. Walk `v1` is frozen. Mixer does not move. Details in [docs/STUDIO.md](docs/STUDIO.md#update-flow).
102
-
103
-
### Themes
104
-
105
-
Night arena (default) or light studio. Rail toggle. Stored on this device. Reduced motion skips the ticker.
106
-
107
-
### Walk certificate
108
-
109
-
`/walk/v1.{ABBR}.{era}.{luck}.{wins}.{five-ids}` is the save file. Nights recompute. [docs/WALK.md](docs/WALK.md).
110
-
111
-
### Specialists
112
-
113
-
Live pack, house pack, walk, foil, lithograph, tray, plates. One room per PR. [docs/STUDIO.md](docs/STUDIO.md#specialists).
114
-
115
-
### GitHub Action
116
-
117
-
[`.github/workflows/pin.yml`](.github/workflows/pin.yml) runs `npm run test:pin` on every push and pull request. Demo eval stays local (`npm run test:demo`) because it needs a running studio.
118
-
119
-
### Benchmarks
95
+
**Update flow.**`git pull` → `npm install` if the lockfile moved → `npm run test:pin`. Walk `v1` is frozen. Mixer does not move.
120
96
121
-
The pin is the benchmark: house walk is 51–31, same five, same nights. Live packs must not collapse to that id. Funnel target: card in under 90s.
97
+
**Themes.** Night arena (default) or light studio. Rail toggle. Reduced motion skips the ticker.
122
98
123
-
### Performance
99
+
**Stream-JSON.** One object per line on stdout from `npm run test:demo`. Beats, then a walk, then a result. Same *pipe* as Claude’s stream-json. Different *types*. [docs/STREAM-JSON.md](docs/STREAM-JSON.md).
124
100
125
-
Foil is one WebGL layer with CSS fallback. Share is 2D canvas, not the foil. Ticker is 110ms/night, skipped on reduced motion. [docs/STUDIO.md](docs/STUDIO.md#performance).
101
+
**Specialists.** Live pack, house pack, walk, foil, lithograph, tray, plates. One room per PR.
126
102
127
-
### Demo evals
103
+
**GitHub Action.**[`.github/workflows/pin.yml`](.github/workflows/pin.yml) runs `test:pin` and `test:vl` on every push.
128
104
129
-
`npm run test:demo` — Playwright rips a live pack, asserts it is not the house pin, and opens the tray. [docs/TESTING.md](docs/TESTING.md).
105
+
**Benchmarks.** Pin = Thunder 51–31. Visual loop = stills stay night stock (Y < 80). We do not run MMBench. [docs/BENCHMARKS.md](docs/BENCHMARKS.md).
130
106
131
107
---
132
108
133
109
## Community
134
110
135
-
Talk happens in **GitHub Discussions**. There is no Discord.
111
+
Talk happens in **[GitHub Discussions](https://github.com/DigitalCurrensy/first-bucket-studios/discussions)**. There is no Discord.
136
112
137
113
| Category | Use it for |
138
114
| --- | --- |
139
-
|**Q&A**| Setup help, “how do I”, Save / Copy / Open |
140
-
|**Ideas**|Feature proposals and design before any PR |
141
-
|**Show and tell**| Forks, other sports, stills, workflows|
115
+
|**Q&A**| Setup, Save / Copy / Open, “how do I”|
116
+
|**Ideas**|Proposals before any PR |
117
+
|**Show and tell**| Forks, other sports, stills |
142
118
|**Announcements**| Releases from the maintainers |
143
119
144
120
For a good Q&A answer fast, include the walk URL if you have one, your OS and browser, how you ran it, and whether Save was in a top-level tab or a nested preview. See [SUPPORT.md](SUPPORT.md). Bugs belong in issues. Security reports follow [SECURITY.md](SECURITY.md), never a public thread.
@@ -147,9 +123,9 @@ For a good Q&A answer fast, include the walk URL if you have one, your OS and br
147
123
148
124
## Contributing
149
125
150
-
Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md), run `npm run test:pin`, and open a focused pull request.
126
+
You are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md), run `npm run test:pin`, open a focused pull request.
151
127
152
-
Security reports should follow [SECURITY.md](SECURITY.md).
128
+
Do not retune the mixer. Do not paste league marks. Leave `public/__grok/` in place.
`npm run test:pin` — GitHub Action on every push. If this goes red you retuned the mixer. Revert.
14
+
15
+
Live packs must **not** collapse to that id. That assert lives in `npm run test:demo`.
16
+
17
+
## 2. Visual loop (VL)
18
+
19
+
Not [VLMEvalKit](https://github.com/open-compass/VLMEvalKit). Not MMBench, MMMU, or VQA. Those score **vision-language models** answering questions about images.
20
+
21
+
This studio is a **game**. VL here means **visual loop**: home, foil, card, tray, tape.
22
+
23
+
```bash
24
+
npm run test:vl
25
+
```
26
+
27
+
| Check | Pass |
28
+
| --- | --- |
29
+
| Four stills exist | JPEG, over a size floor |
30
+
| Tape exists |`docs/tape/demo.mp4`, `ftyp`|
31
+
| Night stock | Mean luminance Y < 80 (ffmpeg, when present) |
32
+
33
+
Cream paper on the card fails. A 1×1 downscale of `03-result.jpg` should sit around Y 20, not Y 200.
34
+
35
+
Stills are in `docs/stills`. Recapture with `npm run capture` if the face of the loop changed.
36
+
37
+
## What we will not add
38
+
39
+
- VLMEvalKit / `run.py` / 80 multimodal datasets
40
+
- Pixel-diff of live packs (every pull is a new franchise)
41
+
- Off-device scoring
42
+
43
+
Funnel budgets (card in under 90s, a send after the tray) live in [ANALYTICS.md](ANALYTICS.md) and [TESTING.md](TESTING.md).
One JSON object per line on stdout. Same *shape of pipe* as Claude Code’s `--output-format stream-json`. Different *types*. This is the ninety-second loop, not an MCP agent.
4
+
5
+
NDJSON. Flush every line. No pretty indent. `jq` can eat it.
6
+
7
+
## Why a stream
8
+
9
+
`npm run test:demo` used to dump one blob at the end. A booth, a CI job, or a wrapper wants beats *as they land*.
10
+
11
+
```bash
12
+
npm run test:demo | jq -c 'select(.type=="result")'
|**Season**|`src/lib/sim.ts`| 82 nights from five ids. |
13
12
|**Foil**|`src/components/foil-gl.tsx`| Small WebGL layer on the pack. CSS fallback. |
14
13
|**Lithograph**|`src/lib/share-card.ts`| 2D canvas PNG. Not WebGL. Night stock. |
@@ -54,8 +53,8 @@ If the booth feels slow, look at click tax (foil should auto-turn the ten) and t
54
53
55
54
## GitHub Action
56
55
57
-
[`.github/workflows/pin.yml`](../.github/workflows/pin.yml) runs `npm run test:pin` on push and pull request. That is the mixer lock. Demo eval stays local because it needs a running studio.
56
+
[`.github/workflows/pin.yml`](../.github/workflows/pin.yml) runs `npm run test:pin`and `npm run test:vl`on push and pull request. Demo eval stays local because it needs a running studio.
58
57
59
58
## Demo evals
60
59
61
-
See [TESTING.md](TESTING.md). The eval that matters: live pack ≠ house pin, tray opens, card beat fires.
60
+
See [TESTING.md](TESTING.md). The eval that matters: live pack ≠ house pin, tray opens, card beat fires, Stream-JSON `result.ok` is true.
0 commit comments