← Back to the directory

Sustain · internal tool

The Video Directory

Every video the channel has ever planned or published, and the one thing standing between us and uploading a session twice. It works with no Node, no build step and no AI in the loop — that is the point of it.

14,520 coherent combinations 4 counting axes 0 ways to delete a video sustain-directory.pages.dev

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.

The one rule

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.

  1. Open the Compose tab.
  2. 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.
  3. Read the verdict panel. Green means new; red means you already published it.
  4. Set a publish date, or leave it empty to decide later.
  5. Press Planned.
  6. 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.

Counting axes
AxisValuesWhy it counts
World22 The whole frame changes — background, thumbnail, mood.
Time of day9, 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 & interval12 A different working method, and searched explicitly — "50/10 pomodoro".
Runtimefrom blocks A different need, and searched explicitly — "2 hour study with me".
Sound9 + 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.

Never counts

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.

The three buttons

Check asks a question. The other two make a commitment.

Check

Answers "is this video already in the directory, and where?" It never changes anything. Use it when you have an idea and want to know if you have already done it — it tells you whether the combination sits in planned or published, gives you its title, and shows its publish date.

Planned

Adds the video to the planned list: something you intend to shoot, but have not published. The date may be empty or in the future. Both buttons refuse to act while the verdict is red, so you cannot add a duplicate by accident.

Published

Adds it straight to the published list — for a video already uploaded to YouTube. If you have not set a date, it stamps today.

When a button is greyed out

Either the combination already exists (the verdict says so and names where), or the configuration is not shootable — a sound that could not be heard from that world, a noise mixed with an ambient bed, a block shorter than 25 minutes. The verdict lists the exact reason every time; nothing is ever refused silently.

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.

TabHoldsSorted by
PlannedIntended, not yet published Publish date, soonest first — undated last, because they are not scheduled yet
PublishedLive on YouTube. This is what blocks a repeat Publish date, newest first
All videosEverything ever, including dropped Newest first, filterable by state
ReservoirEvery 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.

The theme cycle

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.

SettingOptions
VisibilityAlways · 5 min
Placement & separatorOnly six legal pairs: middle·none, horizon·colon, ledge·none, top·dot, horizon·dot, top·colon
Fillsolid · glass
FontSerif · Jost
ColourWhite 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.

The test

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.

WorldsOcean & seabirdsBreezeRainSand & the 3 noises
Surf in earshot
Seascape, Maldives
yesyesnoyes
Water in view
Norway, Greece, Lake, Geneva, New Zealand, Venice
noyesnoyes
Open, dry
Antarctica, Central Park, Garden, Machu Picchu, Paris, Sahara, Swiss Alps, Tokyo
noyesnoyes
Enclosed
Car in Rain, Library, Study Room, NYC Apartment, Billionaires' Row, Mountain Cabin
nonoyesyes

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.

PillMeans
syncedThis device is writing to the shared record.
syncingA push is in flight.
read-onlyShowing the shared record; no passphrase here, so changes stay local.
local onlyNo passphrase set. Everything works, nothing leaves this device.
offlineSaved here; it will sync when the connection returns.
wrong passphraseClick 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.

Do this monthly

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.

1–5 switch tabs / jump to the filter n suggest the next video Esc clear the filter ←→ move across tabs

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.