Apnea table generator
Most table generators hand you a session and stop. This one generates the same seven rounds and then lets you type over any of them. It opens on the CO2 shape at a 60-second base: 30-second holds, rests from 20 seconds down to 10, five minutes and two seconds end to end.
Everything runs in the browser and nothing is stored. Dry land, seated or lying down.
Opens with a generated table already loaded
- Shape: CO2 — fixed hold, shrinking rest
- Base time: 60 seconds
- Seven rounds: 30-second holds, rests from 20 down to 10
- Session length: 5 minutes 2 seconds
The rounds are generated, not fixed. Change the base and regenerate, or type over any hold and rest in the table.
Every round is sized from this. Use your dry maximum hold.
| Round | Hold | Breathe (rest) | Remove |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 | |||
| 7 |
- Session length
- 5:02
- Rounds
- 7
- Longest hold
- 0:30
Run this table
Use the browser timer only while seated or lying down on dry land. Stop whenever you need to breathe. Never use it for breath holding in water.
Ready
Review every interval before starting
Generate first, then argue with it
A generated table is a starting draft. It knows your base time and nothing else — not how you slept, not how the first round felt, not that round six is the one you always abandon.
So generate, read the seven rounds, and change what does not fit. The session length in the box under the table updates as you type, which is the fastest way to see what an edit costs before you commit to it.
The arithmetic behind the seven rounds
Nothing here is guesswork, and none of it is hidden. The hold is half your base time. The first recovery is two thirds of that hold. Each subsequent recovery drops by fifteen percent of the first one, rounded to a whole second, until it reaches a floor of ten seconds and stays there.
Put 60 in and the arithmetic gives a 30-second hold, a 20-second opening recovery, and a 3-second decrement: 20, 17, 14, 11, 10, 10, 10. The identical formula runs in the BreathHold app, so a table drafted here is the table the app would draft from the same figure.
Reading the totals before you press start
Three figures sit under the rounds: total session length, how many rounds there are, and the longest single hold. They recalculate on every keystroke, which turns the whole thing into a calculator rather than a lucky dip.
Use them to price a decision. Copying round seven adds 40 seconds here. Deleting rounds six and seven removes 80 and drops the total from 5:02 to 3:42. Adding a gentle opening round — 15 seconds held, 60 breathing — costs 75. Decide with the arithmetic in front of you, not halfway through round four.
The generator will not stop you
Nothing here checks whether a table suits you. Each interval accepts up to 15 minutes and the table accepts 30 rounds, so it will happily produce a session no one should attempt. Read every round before you press start.
Do not hyperventilate between rounds, and never run a generated table in or beside water without a trained buddy watching the recovery. The safety guide covers the rest.
What the generator outputs across its usable range
Run 2026-09-04: generateCO2Table from lib/training-tables.ts, the same function the builder calls, at base times from 40 to 120 seconds in 10-second steps — nine inputs, seven rounds each.
| Base | Hold | First rest | Rest drop | Floor at round | Session |
|---|---|---|---|---|---|
| 40s | 20s | 13s | 2s | 3 | 3:34 |
| 50s | 25s | 17s | 3s | 4 | 4:17 |
| 60s | 30s | 20s | 3s | 5 | 5:02 |
| 70s | 35s | 23s | 3s | 6 | 5:50 |
| 80s | 40s | 26s | 4s | 5 | 6:30 |
| 90s | 45s | 30s | 5s | 5 | 7:15 |
| 100s | 50s | 33s | 5s | 6 | 8:05 |
| 110s | 55s | 36s | 5s | 7 | 8:56 |
| 120s | 60s | 40s | 6s | 6 | 9:40 |
Nine bases, nine tables, all seven rounds. Sessions run from 3:34 to 9:40 and grow almost linearly: every 10 seconds added to the base costs roughly 45 seconds of session.
All nine reach the 10-second rest floor, but the round it arrives on jumps around — 3, 4, 5, 6, 5, 5, 6, 7, 6 — because the per-round drop is rounded to whole seconds. An 80-second base flattens a round earlier than a 70-second one. That is the generator being arithmetically honest, not a bug, and it is exactly the kind of thing worth editing by hand.
Below a 40-second base the shape starts to fail: the first rest approaches the floor, so there is almost nothing left to shrink and the table becomes a set of identical rounds. At that point pick the equanimity shape, which is meant to be identical rounds.
Questions
- What does an apnea table generator do?
- It turns one number — your base hold time — into a full session of holds and rests. This one generates seven CO2 rounds from a 60-second base by default, then lets you edit any round before you run it.
- What base time should I enter?
- Your dry maximum breath hold, measured seated with no warm-up. A number you have reached twice, not once. The generator sizes every hold and rest from it, so an inflated base produces a session you cannot finish.
- Can I change the table after it generates?
- Yes. Every hold and every rest is an editable field, rounds can be added, duplicated or deleted, and the session length recalculates as you type. That is the difference between this and a fixed generator.
- How long is a generated apnea table?
- Between 3 minutes 34 seconds and 9 minutes 40 seconds across base times from 40 to 120 seconds. The default 60-second base gives 5 minutes 2 seconds.
- Can I share a generated table with a training partner?
- Yes. The copy-link button encodes every round into the URL, so whoever opens it sees your exact table. Nothing is stored on our side, and a shared link is not a recommendation — their base time is not yours.
- Which shape should I generate?
- CO2 if you want the urge to breathe to arrive earlier each round. O2 if you want the hold itself to get longer with recovery held constant. Equanimity if you want the same hold ten times. Do not mix a rising hold with a falling rest.
Where to go next
- Custom apnea table builder — the full builder, starting from any of the four shapes or from blank
- Static apnea training tables — the same generator at a 90-second base, for pool statics
- CO2 table for beginners — if you want the table generated and run without editing anything
- What is apnea training — what these tables are for, and what they do not do