Home O₂ fill-rig tools for technical diving, in one app: Bank fills with compressor times & cool-down, Blend from EANx + air (no O₂ booster needed), Nitrox mix adjust, Z-corrected tank Volume, Trimix blending, and the full reference Notes. Any purity input set to 0% means that source isn't available. Every calculator shares one saved state — export it once to move all your settings between devices.
Install Gas Apps for a full-screen app icon that works offline — no App Store, no download.
Fill a bank bottle — O₂ then air to a target, with compressor fill times & cool-down.
No O₂ booster? Blend from a banked EANx source and air to a target.
Adjust a nitrox mix — how much to bleed, then top with O₂ / EANx.
Z-corrected cylinder gas content — nitrox & trimix.
Blend nitrox or trimix — bleed & top with He / O₂ / air to a target.
Hot-fill & cool-down — overfill pressure to settle at a target cool, and where a hot fill lands.
MOD, best mix, EAD, END & ppO₂ at depth for any nitrox or trimix.
Your surface air consumption & respiratory minute volume from a logged dive.
Rock-bottom reserve — the gas two divers need to surface from depth.
No-deco limits & gas use for a multi-level dive (Bühlmann ZHL-16C).
Turn pressures when you and your buddy carry different-size cylinders.
Breathing-gas density at depth, with the 5.2 / 6.2 g/L limits & helium to fix it.
Common dive unit conversions — depth, pressure, volume, temp, weight.
Optimal lead & wing-lift from a full physics model — suit, tanks, personal buoyancy.
PayPal / Venmo gross-up — what to send so the recipient nets the exact amount.
Device data, the gas you actually get, plumbing & safety.
Report a bug, request a feature, or send general feedback to the developer.
Like the app? Tip via Venmo, PayPal, or Zelle — totally optional.
All tools save automatically in this browser. Export makes a code with every setting; paste it into Import on another device to load them all. Reset returns every field to its default.
Work out how much lead you need and whether your wing is big enough, from a full physics model (DuBois body-surface-area, the neoprene compression curve, real tank & gas weights). Fill in each section; results update live and save with the rest of Gas Apps. Weight for neutral at the safety stop with a near-empty tank, then check surface buoyancy for corking. Sign: negative sinks, positive floats.
Set the water and max depth you're planning for, then save the current gear (suit, rig, cylinders, gas, wing, weights) as a named setup — e.g. a singles rig vs a doubles rig — and switch between them from the dropdown. Each setup keeps its own weight-check history. Setups travel in your Export/Import code.
Height, weight, sex & age are all that's needed — the calculator estimates your lung volume (Quanjer) and body density (Siri) from them automatically, so there is no separate “lungs” field to fill in.
No body-fat number needed — body fat is estimated from your height & weight (BMI), then run through the Siri body-density + Quanjer lung model. For a more personal figure, switch to “Estimate from body fat”.
Enter your body-fat percentage. It feeds the Siri body-density model plus lung volume (Quanjer) to estimate how buoyant you float at relaxed breathing — a physics alternative to the float test.
A “0” personal buoyancy floats you head-awash at rest; +2.2 lb / +1 kg floats you at eye level. Enter one of the two test fields, not both. Do the float test with a normal, relaxed breath — not a full exhale. A value measured fully exhaled runs ~2–5 lb too buoyant-light and will under-weight you (a common cause of “negative lead needed” results); this model already assumes relaxed breathing.
Save a suit — type, thickness, accessories, compression model — to reuse across gear setups. Pair your 5 mm with singles, or your drysuit with doubles, and switch in a tap. Whichever suit is loaded is the one your active gear setup remembers.
Wetsuit buoyancy is computed from first principles — neoprene volume × (water − neoprene density) — calibrated to real wetsuit / freediving figures (e.g. a 5 mm full ≈ 5–6 kg / 12–13 lb in salt). The two open-cell cuts model a hooded jacket (top) over a Farmer-John (double-torso) or long-pants bottom in high-buoyancy Yamamoto-style open-cell neoprene (lower density → more float per mm). The attached hood is built into these cuts (at the suit thickness), so the separate Hood box is hidden while one is selected.
Stack a second or third neoprene piece over the base wetsuit — e.g. a 1.5 mm base under a 5 mm shorty, or a shirt over a suit. Leave a thickness blank to skip that layer. Layers add to the wet body and compress with it.
How suit buoyancy falls off with depth. Singler reproduces the original spreadsheet (a 6th-order curve; the author notes it loses accuracy below ~230 ft). Physics compresses the trapped air by Boyle’s law (1/ATA) — monotonic and stable at any depth. Both use the same surface buoyancy.
Measured a whole assembly? For the regulator, set Type = Custom and put the entire reg's measured in-water buoyancy (first + second stages + octo + holder + hoses + SPG) in First Stage(s), leaving 2nd stages at 0 — or split them across the two fields. For the BCD, set style = Manual and enter the whole BC's measured in-water buoyancy in BCD + Fittings. Need typical values? The Gear DB tab lists in-water buoyancy for common regs, plates, wings, fins and lights — read one off and type it into the matching field here. To measure your own gear, use the Measure tab. Fins: negative sinks, positive floats; check the Spring straps box for steel spring straps.
Sign is consistent everywhere in Rig: negative sinks, positive floats. So lead you already carry on the rig — Non-Ditchable and Ditchable Weight — is entered as a negative number (e.g. −4 for 4 lb of plate weight); both reduce the loose belt lead still needed (the ditchable split only drives the rig-float advice). All the gear fields are in-water buoyancy, not dry weight, so a heavy item like a backplate is negative too. Brass firsts ≈ −1.5 lb, titanium ≈ −0.8 lb each. Metal cam-band weights are estimates — Apeks doesn't publish a Griplock weight, and heavier stainless bands (e.g. Halcyon) run more negative; pick Custom for a known per-band figure.
Add up to 4 different cylinders, each with its own gas mix — e.g. a single HP100 on air plus a 19 cf pony on EAN50. Set a slot’s tank to “— none —” to ignore it.
Pressures use each tank’s own units. Leave start blank for a full tank; leave end blank for the default reserve (500 psi / 35 bar).
Lock in a real-world correction. The physics can't know your exact body density or breathing, so when your measured lead differs from the estimate, teach it: (1) do a real weight check — at your safety stop with a near-empty tank and an empty wing, find the lead that holds you neutral (rise on inhale, sink on exhale); (2) log it below — the depth, gas level, water, and the lead you actually used (enter 0 if you needed none); (3) the app stores the gap between your result and the model as a per-setup correction and shows it as Calibrated lead in Results, so every future plan — and the fresh↔salt table — reads true for you. Checks can be fresh or salt (each compared to the model in that same water), and a pool (fresh) check sharpens your salt-water plan too. Save the rig as a gear setup first so the correction sticks to it.
| Fresh | Salt |
|---|
Measure items in whichever water you have (tag each measurement’s water above), then read the lead for your actual dive water. The salt−fresh gap is the extra ballast the denser water needs.
| Tank state | Surface | 15 ft | 50 ft | 100 ft |
|---|
| Cylinder | Empty | Gas | Full |
|---|
Empty = how the cylinder floats/sinks with no gas · Gas = weight of the full fill · Full = total buoyancy when full (Empty − Gas). Matches the manufacturer spec sheet. Gas weight here is an ideal-gas estimate (capacity × pressure ÷ working pressure); for weighting the difference vs the real-gas figure is well under the ±1 lb precision this tool works to.
| Phase | Depth | Time | NDL/End | Gas |
|---|
Type in either box of a row and the other updates. 1 ft = 0.3048 m · 1 psi = 0.06895 bar · 1 cu ft = 28.317 L · 1 lb = 0.4536 kg.
Find the real in-water buoyancy of any item — fin, reg, suit, light — from a simple bucket test, and convert between salt and fresh. Sign: negative sinks, positive floats. Three methods: Ballast (add lead to neutral), Underwater scale (weigh it submerged), and Mesh bag (weigh a ballast package alone, then with the item, to isolate a floaty item like a wetsuit). Name a measured suit, pick category Suit, Save, then → Suit uses it as a named custom suit on the Buoyancy tab. This is how the fin and suit numbers in the Gear DB were built.
Set up your rig on the Buoyancy tab first — this reads that live configuration. A balanced rig is one you can still manage if the BCD/wing fails or a drysuit floods: not so heavy you can't swim up, not so light you cork, and with enough redundant lift. All figures are in-water buoyancy (− sinks, + floats) in your Buoyancy-tab unit. Experimental — verify in water.
Wing capacity defaults to the Buoyancy tab's value; override it here to try a different size. Ditchable weight is the portion of your lead you could release in an emergency.
How to read it. The most-negative point of the dive (full tanks, deepest, empty wing) sets the lift your wing must provide. If the wing fails you're left with the “no-BCD” buoyancies — near neutral you can hold a stop; a few pounds negative you can fin up; beyond roughly −15 lb that gets hard. A drysuit flood can lose all its lift at once, so the wing (plus any redundant lift, plus droppable weight) has to cover that too. Adapted from Al's Balanced-Rig worksheet (Singler lineage).
Build tank configurations — a single tank, a sidemount pair, or manifolded doubles — then save them. Saved configs appear in the Gear DB and drop straight into the Buoyancy Rig. Empty buoyancy is the rig's in-water weight with tanks empty (− sinks); capacity is total free gas; dry land weight is the carry weight — cylinder plus a Thermo Pro valve sized to the configuration (estimated — verify by weighing).
Add extra bottles carried alongside the primary set — a deco bottle, a stage, a pony. Each adds its empty buoyancy, capacity and land weight to the totals, and drops into the Buoyancy Rig's next tank slot. Up to 3 extra lines (4 tanks total in the Rig).
Click a saved configuration below to load it here, edit it, then ⟳ Update — or + Save new to keep it as a separate config.
Your saved exposure suits — wetsuit, drysuit, layers, hood/gloves/booties — in one place. Each is a reusable thermal-protection setup you can drop into the Buoyancy tab in a tap: pair your 5 mm with singles, or your drysuit with doubles, and switch between them. Build or edit a suit on the Buoyancy tab's Thermal protection section, then Save it there — it appears here.
In-water buoyancy is diver-specific — it's computed on the Buoyancy tab from your height & weight and the dive water. → Buoyancy loads a suit and takes you there to see its numbers in your rig.
Bundle your chosen gear — plate/BCD, wing, fins, light and more — into named kits (Travel, Cold-water, Cave…), then apply one to the Buoyancy Rig in a tap. Add pieces to a kit with the → kit buttons on the Gear DB tab (they add to whichever kit is active here).
Use marks a kit active (so → kit on the Gear DB adds to it). → Rig fills the Buoyancy Rig's BCD/plate (summed), wing (+ mounting), fins and light — reg / suit are kept for reference. Kits travel in Export/Import.
Typical in-water buoyancy for common rig gear — find the value you want and type it into the matching field in Buoyancy → Rig. Sign: negative sinks, positive floats. These are starting points, not gospel — confirm your own gear on the Measure tab.
A concentrator rejects nitrogen (zeolite PSA) rather than selecting oxygen, so the product is ~93% O₂ with ~5% argon plus residual N₂ ("Argox") — not pure O₂, and not "nitrox." Purity falls as you pull more flow, and there is essentially zero filtration — CO, hydrocarbons, even radon get concentrated ~5× into the cylinder (then ~5× again at depth). Feed it clean intake air.
| Concentrator flow | 5 LPM unit | 10 LPM unit |
|---|---|---|
| Max O₂ (~93%) up to | ≤ 3 LPM | ≤ 6–7 LPM |
| ~90% O₂ | ~4 LPM | — |
| ≤ 85% O₂ | ~5 LPM | — |
| Typical outlet pressure | ~5 psi | 8–10 psi* |
| Device | Role | Max out | Input pressure | Key behavior |
|---|---|---|---|---|
| Invacare PerfectO2 V | 5 LPM concentrator | ~5 psi | — | Metered outlet + product-tank ~20 psi internally |
| Respironics EverFlo / Millennium M10 | 5 / 10 LPM concentrator | 5–25 psi | — | M10 tank 10–30 psi; some EverFlo lack a compressor port |
| Invacare HomeFill II | O₂ transfill compressor | ~2,000 psi | works at 5 psi (spec 14–21) | ~2 LPM intake · tolerant · plug-and-play |
| Respironics UltraFill | O₂ transfill compressor | ~3,000 psi | needs >7; wants 20–26 | ~2 LPM · aborts a too-slow fill · O₂-sensor lockout |
| RIX Microboost | 3-stage O₂/N₂ booster | ~2,200 psi | 0–25 psig (flow scales) | 5–16 SCFH · no fill-rate timeout · needs a fed inlet |
| RIX SA-6 (1S3B-6) | Gasoline air compressor | ~4,500 psi* | ambient air | ~5 SCFM (300 SCFH) · air top-off & bank fills · *with modern upgrades |
PerfectO2 V (5 LPM) → metered outlet → 200 kPa / 10 LPM boost pump → large accumulator → UltraFill. Cylinder sizes are water volume.
| Supply psi (min in cycle) | Conc. flow | Largest fill completed | Would not fill |
|---|---|---|---|
| < 7 | 2.0 LPM | — none (low-pressure abort) | any cylinder |
| 8 | 2.25 | AL40 (5.7 L) | LP50 |
| 12.5 | 2.5 | LP50 (8.0 L) | AL80 |
| 15 | 2.75 | AL80 (11.1 L) | HP100 |
| 16.5–18 | 3.0–3.25 | HP100 (12.7 L) | HP120 |
| 20–23.5 | 3.5–4.0 | HP120 (15.3 L) | HP130 |
| 25 | 4.0 (14 V pump) | HP130 (16.6 L) | LP121 |
| 26–28 | 4.25 (14 V) / cyl. feed | LP121 (19.0 L) | — (ceiling of rig) |
The concentrator already runs its product tank at ~20 psi (PerfectO2 target 21 ±0.3, hard limit 23 psi; EverFlo 14–25). Tapping upstream of the 5 psi patient regulator delivers that pressure directly — no external pump.
| Gas to raise pressure | SCF = V(ft³) × ΔP ÷ 14.7 |
| → shortcut | 6.8 SCF / +100 psi / ft³ (ideal; §11 applies Z) |
| Time | hr = SCF ÷ flow(SCFH) |
| Compressor intake | ~2 LPM ≈ 4.2 SCFH (rises w/ inlet psi) |
| Units | 1 SCFM = 60 SCFH = 28.3 LPM |
Found a bug, want a feature, or just have thoughts on the app? Send it straight to the developer. This opens your email app with everything filled in — nothing is sent automatically, and you can edit before sending.
Goes to slofire94@gmail.com. If you tick “include settings” it attaches only your saved calculator inputs (the same Export code) plus your app version and browser — nothing else.
If these tools save you time at the fill station, a small tip helps keep them free, ad-free, and improving. Totally optional — everything works without it. Scan a code with your phone, or tap a button.
Thanks, and dive safe. — SloFire