Breathing Pace
{{ bpmDisplay }}
{{ cycleSeconds.toFixed(2) }} s per cycle
In {{ inhale_s }} s Hold {{ hold1_s }} s Out {{ exhale_s }} s Hold {{ hold2_s }} s
{{ centerPhase }}
{{ phaseRemainingDisplay }}
{{ elapsedDisplay }} · {{ breathsCompleted }} breaths
s:
s:
s:
s:
min:
s
{{ audio_volume }}%
# Phase Start Elapsed (s) Duration (s) Copy
{{ r.idx }} {{ r.phase }} {{ r.startLocal }} {{ r.elapsed.toFixed(2) }} {{ r.duration.toFixed(2) }}
No data yet. Start a session.

                    
:

Introduction

Paced breathing is the practice of giving each inhale, pause, and exhale a deliberate length instead of breathing by guesswork. People use structured cycles for short reset breaks, meditation sessions, bedtime wind-downs, or to follow a familiar pattern such as box breathing without having to count every second.

This breathing pacer turns a chosen pattern into a live visual routine. It calculates the full cycle length, converts that rhythm into breaths per minute, shows the current phase in real time, and tracks session progress so you can focus on the pace rather than on mental arithmetic.

The package supports both named presets and custom timing. You can start with resonance-style pacing, coherent breathing, box breathing, 4-7-8, a 4/6 relaxation rhythm, triangle 4-4-8, 7-11, or a fully custom cycle, then add a countdown, sound cues, vibration, and a wake-lock request when you want steadier guidance.

A practical example is a five-minute break built around a 4 second inhale and a 6 second exhale. That creates a simple 10 second cycle, slows the displayed rate, and leaves a timeline you can review later.

The tool is a pacing aid, not a medical monitor. If a pattern feels uncomfortable, especially when holds are long, the safe response is to shorten the phases or stop rather than push through dizziness or strain.

Everyday Use & Decision Guide

The quickest way to use the pacer is to pick a preset and look at the cycle length and breathing-rate display before you start. That tells you whether a routine will feel brisk, moderate, or very slow. Longer exhales and longer holds reduce the breaths-per-minute number because they stretch the total cycle even when the inhale itself stays short.

Preset timing summary
Preset Timing Cycle Displayed Rate When It Is Useful
Coherent 5 in, 5 out 10.0 s 6.00 bpm Simple equal pacing with no holds.
Resonance 4.5 in, 5.5 out 10.0 s 6.00 bpm Near-six-breath pacing with a slightly longer exhale.
Box 4 in, 4 hold, 4 out, 4 hold 16.0 s 3.75 bpm Even four-part timing when you want clear structure.
4-7-8 4 in, 7 hold, 8 out 19.0 s 3.16 bpm A longer cycle with most of the time spent holding and exhaling.
7-11 7 in, 11 out 18.0 s 3.33 bpm Slow pacing that emphasizes a long out-breath.

If you already know the pattern you want, custom timing is often the better choice because it makes the tradeoff plain. Increasing the exhale usually changes the feel of the cycle more than increasing the inhale by the same amount. Adding a hold changes the pace just as much mathematically, but it also changes the subjective effort, which is why short holds tend to be easier to sustain than aggressive ones.

Session length changes how the tool behaves after the routine begins. Any positive number sets an automatic stop time and produces an expected local finish time in the summary. A session length of 0 leaves the pacer open-ended so you can stop manually when you are done.

The advanced controls are practical rather than decorative. Countdown gives you a settling-in period before the first inhale. Audio volume, pitch, and beep length control the phase-change cue. Vibration can provide a tactile transition on supported devices, and the keep-awake toggle asks the browser for a screen wake lock so the display is less likely to sleep mid-session. Easing changes only the ring motion, not the timing math, and the current settings are mirrored into the page address for easy reuse.

Technical Details

The core calculation is simple and explicit. A complete breathing cycle is the sum of inhale, hold after inhale, exhale, and hold after exhale. The displayed breathing rate is then 60 seconds divided by that cycle length, which gives a breaths-per-minute figure that can be compared across different patterns.

C = tin + thold1 + tout + thold2 BPM = 60C
Core inputs and bounds
Setting Meaning Accepted Input Notable Behavior
Inhale, holds, exhale Phase lengths in seconds 0 or higher, step 0.1 Negative values are clamped out of the active sequence.
Session length Total run time in minutes 0 or higher, step 1 0 means no automatic stop.
Countdown Delay before the first inhale 0 or higher, step 1 The session is marked as started before the first phase begins.
Audio volume Phase-change cue level 0 to 100 0 disables the beep.
Beep frequency Tone pitch in hertz 100 or higher Played with the browser audio context.
Beep duration Tone length in milliseconds 40 or higher The actual beep routine enforces a 20 ms floor if needed.
Vibrate, keep awake Device cues and wake lock On or off Both depend on browser and device support.

The active phase sequence is built dynamically from the current timings. Any phase with a duration above zero is included in order. If every duration is set to zero, the package still creates a minimal fallback cycle of 1 second inhale and 1 second exhale so the session can run without crashing.

Start initializes the timeline, the live breathline series, the session clock, and the expected finish time. Pause stops animation and releases the wake lock. Resume re-enters the current phase with the remaining time. Stop resets the session back to an idle state.

The timeline table logs each completed phase with an index, phase name, local start time, actual elapsed time, and configured duration. The visual tabs then summarize the same routine in different ways: Breathline shows a rolling normalized level over roughly the last 14 seconds, Cycle Mix combines both holds into one slice, and Heart Rate Dial actually displays breathing pace on a 2 to 12 bpm gauge despite the tab wording.

The timeline table can be copied as CSV, downloaded as CSV, or exported to DOCX. Each chart can be downloaded as PNG, WebP, JPEG, or CSV, and the JSON tab can also be copied or downloaded. All of that happens in the browser. This tool has no server-side helper and only loads the chart library externally.

Interpreting Results

The summary rate is best read as a pacing number, not a depth or effort score. A lower breaths-per-minute value simply means each full cycle takes longer. It does not tell you how deep a breath is, how much air moved, or whether a pattern is right for your body on that day.

The cycle length and the completed-breath count work together. If you run a 10 second cycle for five minutes, you should expect about 30 completed breaths by the time the session ends. If a session is interrupted, paused, or stopped early, the recorded total will reflect what actually happened rather than the original plan.

The cycle-mix chart is helpful when two routines have similar rates but feel different. A 10 second cycle split evenly as 5 in and 5 out looks very different from a 10 second cycle split as 4 in and 6 out because the second one spends more of the cycle in exhalation. The donut makes that change obvious even though both patterns display 6.00 bpm.

The breathline should be read as a pacing trace, not as respiratory physiology. It is useful for reviewing cadence and continuity, but it is not measuring airflow, chest movement, oxygen, or carbon dioxide.

Audio and vibration cues fire at phase boundaries. If you do not hear or feel them, the usual reasons are muted audio volume, missing device support, or a browser that blocks those features until a user gesture occurs. Keep-awake is only a request and can also be denied.

A useful rule of thumb is that longer holds make the displayed rate fall quickly. The current 4-7-8 preset totals 19 seconds and therefore displays about 3.16 bpm. The box-breathing preset totals 16 seconds and displays 3.75 bpm. The coherent and current resonance presets both total 10 seconds and therefore display 6.00 bpm.

Step-by-Step Guide

  1. Choose a preset if you want a ready-made pattern, or switch to Custom if you already know the phase lengths you want to practice.
  2. Set inhale, optional hold after inhale, exhale, and optional hold after exhale in seconds. Watch the displayed cycle length and rate update immediately.
  3. Decide whether the session should stop automatically. Use a positive session length for a timed routine or 0 for an open-ended practice.
  4. Add a countdown if you want a few settling seconds before the first inhale. Then turn on sound, vibration, or keep-awake only if they help rather than distract.
  5. Press Start and follow the ring, the center phase label, and the remaining time. Pause or stop whenever you need to break the session.
  6. Review the Breathline, Heart Rate Dial, Cycle Mix, Timeline Table, or JSON tabs afterward if you want a record of what you practiced.
Worked timing example. A custom 4 in, 0 hold, 6 out, 0 hold routine creates a 10 second cycle. The app displays 6.00 bpm, increments the breath counter after each exhale, and stops automatically when the chosen session length is reached.

Worked Examples

Five-minute coherent session. Choose the coherent preset, leave both holds at 0, keep the 3 second countdown, and set the session length to 5 minutes. The tool displays a 10 second cycle and 6.00 bpm. Once the countdown finishes, the session should produce about 30 completed breaths if it runs without interruption.

Longer-exhale reset. Set inhale to 4 and exhale to 6 with no holds. This produces the same 6.00 bpm as a 5/5 routine, but the cycle mix shifts more of the total time into exhalation, which some users find easier to follow when they want a calmer, less box-like rhythm.

Structured four-part cycle. Choose box breathing and turn on a soft beep. The timeline then records inhale, hold after inhale, exhale, and hold after exhale as separate phases, while the cycle-mix chart merges the two holds into one total hold slice for easier visual comparison.

Open-ended custom practice. Set session length to 0 and the pacer will keep running until you stop it, which is useful when following the rhythm matters more than hitting a fixed duration.

FAQ

Does the easing setting change the breathing math?

No. Easing changes how the ring moves between its inner and outer states. The cycle length and breaths-per-minute value still come directly from the entered phase durations.

Why does the Heart Rate Dial show breathing pace?

The underlying gauge is fed with the calculated breathing rate, not pulse data. In this package the dial is a breathing-pace display, even though the tab label uses heart-rate wording.

What happens if every phase is set to zero?

The package falls back to a minimal 1 second inhale and 1 second exhale sequence so the session still functions. That safeguard prevents an empty cycle from breaking the live session loop.

Can I keep a record of a routine?

Yes. You can export the timeline as CSV or DOCX, download chart files, and save the full session payload as JSON.

Does the pacer store my session somewhere else?

The session logic and exports are local to the browser for this tool. Timing and cue settings are also mirrored into the page address, so a shared link can reveal the routine configuration.

What should I do if a pattern feels too hard?

Shorten the hold, shorten the total cycle, or stop the session. Paced breathing should be manageable enough to follow steadily. Strain and lightheadedness are signs to back off rather than intensify the routine.

Glossary

Cycle length
The total seconds in one full inhale-hold-exhale-hold pattern.
Breaths per minute
The number of full cycles that fit into 60 seconds at the current timing.
Hold after inhale
A pause inserted after the in-breath and before exhalation begins.
Hold after exhale
A pause inserted after the out-breath and before the next inhale begins.
Wake lock
A browser feature that can keep the screen awake during an active session when permission is granted.
Breathline
A rolling chart of the pacer's normalized inner-to-outer breathing level, not a physiological sensor trace.

References