What it is for
One job above all others.
Re-uploading a session already on the channel is the failure that is genuinely unrecoverable. It is exactly what YouTube's inauthentic-content policy exists to catch, and no amount of good metadata undoes it. Human memory is not an adequate control across twenty videos a month for years — so the directory is.
Everything else it does (composing titles, tracking dates, suggesting what to shoot) exists to make that first job easy enough that you actually use it.
A video is never deleted. There is no delete button anywhere, and no delete path in the code. Videos only ever change state. A record that can lose rows is not a record, and a repeat check built on one is worthless.
Your first video
Sixty seconds, start to finish.
- Open the Compose tab.
- Press Suggest the next video. It fills in a world, interval, length and sound that has never been used, avoids anything the last uploads already did, and picks a numeral look you have not shot recently.
- Read the verdict panel. Green means new; red means you already published it.
- Set a publish date, or leave it empty to decide later.
- Press Planned.
- When you shoot it, open it from the Planned list and press mark published. Copy the title, tags and description straight out of the panel while you upload.
That is the whole loop. Everything below is detail on the parts you will eventually want to control by hand.
The four axes
What makes a video a different video — and what emphatically does not.
The directory decides whether two videos are the same by building one canonical key out of four things. Change any one of them and it is a genuinely different video. Change anything else and it is the same video wearing a different coat.
| Axis | Values | Why it counts |
|---|---|---|
| World | 22 | The whole frame changes — background, thumbnail, mood. |
| Time of day | 9, Seascape only | Seascape has a living sky, so its light is effectively a sub-theme. The 21 painted worlds have their sky in the painting, so light does not apply to them at all. |
| Mode & interval | 12 | A different working method, and searched explicitly — "50/10 pomodoro". |
| Runtime | from blocks | A different need, and searched explicitly — "2 hour study with me". |
| Sound | 9 + blends | A different experience, and the strongest keyword axis after the scene. |
The key is shown under every verdict and in every video's panel, so you can always see exactly why the directory thinks two things are the same:
seascape@sunset | 50-10 | 120m | ocean ← light counts, Seascape only
mountain-cabin | 50-10 | 120m | brown ← no light slot; the theme is the look
↑ ↑ ↑
interval runtime sound
The runtime is the real length of the file. On /stage the final break is part of
the session, so it is always blocks × (focus + break) — which is why a 50/10
lands exactly on the hour and can be titled "2-Hour" without lying.
Sound blends are sorted before they go into the key, so ocean+breeze and
breeze+ocean can never key as two different videos.
Numeral placement, fill, font, separator, colour and sun/moon visibility are rules, not axes. The same session in a different numeral colour is the same video to a viewer and to YouTube, and treating it as new is precisely the self-deception that gets channels struck. This holds until the catalogue is genuinely exhausted, which is thousands of videos away.
Dates decide state
The record must never disagree with the channel.
A publish date in the past means the video is already out, so it cannot be planned. Press Planned with a past date and it refuses and tells you why, rather than quietly correcting you.
- No date — fine for Planned. Published will stamp today.
- Future date — fine for either.
- Past date — Published only.
You can set or change the date later from inside any video's panel. Give a planned video a past date there and it moves itself to published; move a published video back to planned and its past date is cleared, because the two cannot both be true.
Dropping
Drop abandons a video without erasing it. It leaves the working lists, still appears under All videos, can be restored, and — unlike published — frees its combination again, so you could shoot that configuration later if you change your mind.
The four lists
Every video is in at least one of them, permanently.
| Tab | Holds | Sorted by |
|---|---|---|
| Planned | Intended, not yet published | Publish date, soonest first — undated last, because they are not scheduled yet |
| Published | Live on YouTube. This is what blocks a repeat | Publish date, newest first |
| All videos | Everything ever, including dropped | Newest first, filterable by state |
| Reservoir | Every coherent combination not yet published | Best first |
Click any row to open its panel: full parameters, the numeral look it used, its axis key, its publish-date field, and copy-ready title, thumbnail text, tags and description.
The Reservoir tab answers "will we run out?" — it is the live count of what is left, gated by the same coherence rules the composer uses, so it counts only videos you could actually shoot. Tick lands on a round hour to see only the ones whose runtime is close enough to a whole hour to say so in the title.
Suggest the next video
The part that stands in for a strategist.
It scores every unused combination and fills the composer with the winner. Two things drive the score.
Measured search value. Noise leads, then rain, then scene sounds — brown noise is 1,722,596 searches a month and white 2,212,947, while ocean waves is 274,621 at a competition score of 62.5, which is real demand we cannot rank on. Round hours and the 90–245 minute band score higher because that is where the view medians actually sit.
Recency, on every axis. Anything a recent upload used costs points — sound most, then interval, then duration, then world. Without this it recommended twelve videos in a row that were all 25/5 with brown noise at two hours, differing only in the painted world, which is exactly the templated feel the theme cycle exists to prevent. Now twelve consecutive suggestions span twelve worlds, six intervals and five sound sets.
It is a recommendation, never a constraint. Change anything it picked.
A world should not reappear until the other twenty-one have been used. The composer tells you how recently a world was used and how long it would ideally wait — as advice under the form, not a block. Two consecutive uploads never sharing a scene is the difference a human actually perceives, whether that human is a viewer scrolling the channel page or a reviewer auditing it.
Numerals
Tracked and varied on purpose — never counted.
These do not make a video distinct, and the directory will not let you pretend otherwise. They are tracked for a different reason: a library where every video carries the same placement, fill and font looks templated even when all four real axes differ.
Use an unused look picks the legal combination you have gone longest without shooting. The look is stored with the video and shown in its panel, so you can always see what the last few used.
| Setting | Options |
|---|---|
| Visibility | Always · 5 min |
| Placement & separator | Only six legal pairs: middle·none, horizon·colon, ledge·none, top·dot, horizon·dot, top·colon |
| Fill | solid · glass |
| Font | Serif · Jost |
| Colour | White only, and only on solid — glass is refractive and ignores the swatch |
Importing a month
Hand the format to anyone — or anything — and paste the result back.
On the Planned tab, Batch format generates the full specification from the tool's live vocabulary, so it can never describe a world or sound the engine no longer has. Copy it, hand it to any assistant, and import the JSON it returns with Import a batch.
You only supply the axes. The title, tags, description, thumbnail text and axis key are composed here, by the same rules the composer uses — so an imported month can never carry metadata that contradicts its own parameters, and every row is checked against the record for repeats exactly like a hand-composed one.
[
{ "world":"mountain-cabin", "focus":50, "brk":10, "blocks":2,
"sounds":["brown"], "date":"2026-09-01" },
{ "world":"seascape", "light":"sunset", "focus":25, "brk":5, "blocks":4,
"sounds":["ocean","birds"], "date":"2026-09-02" },
{ "world":"library", "focus":0, "brk":0, "minutes":180,
"sounds":["pink"], "date":"2026-09-03" }
]
Rows that break a rule are skipped, not silently accepted — the import reports how many landed and names the reason for each one it refused.
Which sound, which world
One rule settles every case, including worlds not yet painted.
A sound may play only if you could hear it from where the hourglass is standing.
Seabirds crying inside a library is inauthentic in a way no policy needs to describe — it breaks the illusion. The composer greys out anything incoherent, so you cannot ship it by accident.
| Worlds | Ocean & seabirds | Breeze | Rain | Sand & the 3 noises |
|---|---|---|---|---|
| Surf in earshot Seascape, Maldives |
yes | yes | no | yes |
| Water in view Norway, Greece, Lake, Geneva, New Zealand, Venice |
no | yes | no | yes |
| Open, dry Antarctica, Central Park, Garden, Machu Picchu, Paris, Sahara, Swiss Alps, Tokyo |
no | yes | no | yes |
| Enclosed Car in Rain, Library, Study Room, NYC Apartment, Billionaires' Row, Mountain Cabin |
no | no | yes | yes |
Two further rules the composer enforces: a noise and an ambient sound never share one video, and never two noises. They compete for the same masking role, and the title can only lead with one of them.
Sync and devices
The pill in the top right tells you which device is writing.
Reads are open to any device. Writes need the passphrase — click the pill to set it. Without one the page still works completely; it just stays on that device and says so.
| Pill | Means |
|---|---|
| synced | This device is writing to the shared record. |
| syncing | A push is in flight. |
| read-only | Showing the shared record; no passphrase here, so changes stay local. |
| local only | No passphrase set. Everything works, nothing leaves this device. |
| offline | Saved here; it will sync when the connection returns. |
| wrong passphrase | Click the pill and re-enter it. |
The server owns the merge, and the rule is simply newest decision wins. A device that has been closed for a week can only ever add information — it cannot roll anything back.
Backups
What survives Cloudflare, the subscription and this machine.
Export downloads the entire record as one JSON file. Import merges a file back in — it never replaces, so restoring an older backup cannot roll the record backwards, and nothing is ever removed by an import.
Reset device is the one exception, and it points the other way: it throws away this browser's copy and takes the shared record as it stands. Use it when a device is carrying rows that no longer belong — it does not touch the shared record.
Export once a month and keep the file somewhere that is not this laptop. The record lives in three places — this browser, the shared database, and whatever you export — and the exported file is the only one that survives all of the others going away.
The tool is three static files with no build step. Kept alongside an export, they will still run from any static host, or straight off a disk, for as long as browsers exist.
Keyboard
For use with one hand while a session records.
If something looks wrong
A video I published is missing
Check All videos with the state filter set to every state — it may have been dropped rather than published. Nothing is ever deleted, so it is still there.
The verdict says a video is new, but I am sure I made it
Compare the axis key under the verdict with the one in the video's panel. If any of the four axes differs — a different block count, a slightly different sound blend — then it genuinely is a different video by the rules we set.
My phone and laptop disagree
Reload both. Each one pulls the shared record on load and then pushes what it knows. If the pill says read-only on one of them, that device has no passphrase and its changes never left it.
A title says "2h 10m" instead of a whole hour
That is deliberate, and it only happens on intervals that do not divide into an hour. On
/stage the last break is part of the session, so a runtime is always
blocks × (focus + break) — a 50/10 over two blocks is exactly 120 minutes and
titles itself "2-Hour". A 45/20 over two blocks is 130, and says so, because claiming a duration
the file does not run is the one policy-enforceable risk we carry. Pick a block count the
composer marks as landing on the hour and the title will be clean.
My device shows videos that are not on the channel
Press Reset device. Normal syncing merges rather than replaces, which is right almost always — but it means a row deliberately removed from the shared record survives in whichever browser still remembers it. Reset discards this device's copy and takes the shared record verbatim. It never touches the shared record itself; export first if you are unsure.
I added something by mistake
Open it and press drop. It leaves the lists, keeps its history, and frees its combination again.