Flow rates in oxygen mask

Reading File
Finding Sources
Searching PubMed

oxygen therapy AND delivery devices

Searching the Web

oxygen mask flow rates simple mask Venturi mask non-rebreather guideline

Common adult oxygen mask flow rates
DeviceFlow rateApprox. FiO₂ / notes
Simple face mask5-10 L/minAbout 40%-60%. Never use below 5 L/min because of carbon dioxide rebreathing risk.
Venturi maskAs printed on the colour-coded adaptorFixed FiO₂. Common settings: 24% at 2-4 L/min, 28% at 4 L/min, 35% at 8 L/min, 40% at 10 L/min, 60% at 15 L/min. Follow the adaptor label.
Non-rebreather mask with reservoir bag10-15 L/min, usually 15 L/minHigh-concentration oxygen. Keep the reservoir bag inflated, at least partly, throughout inspiration.
Partial rebreather mask10-15 L/minReservoir bag without one-way valves.
Tracheostomy maskUsually 8-10 L/minUse humidification when indicated.
For most acutely ill adults, oxygen is titrated to SpO₂ 94%-98%. In people at risk of hypercapnic respiratory failure, such as some with COPD, usual target is 88%-92%, often using a Venturi mask for controlled oxygen delivery. The NHS mask review describes simple-mask use at 5-10 L/min and non-rebreather use at 15 L/min.

What does flow rate means

Reading File
Finding Sources
Searching PubMed

oxygen therapy AND delivery devices

Searching the Web

oxygen flow rate litres per minute oxygen mask definition

Flow rate means the amount of oxygen gas coming out each minute from the oxygen source into the mask.
It is measured in litres per minute (L/min).
Examples:
  • 5 L/min = 5 litres of oxygen flow into the mask every minute.
  • 15 L/min = 15 litres every minute.
The flowmeter on the oxygen supply is adjusted to set this rate.
A higher flow rate generally supplies more oxygen and reduces mixing with room air, but it does not always mean a fixed oxygen percentage. With a simple face mask, the amount actually inhaled also depends on how fast and deeply the person is breathing. A Venturi mask is different: its specific adaptor delivers a set oxygen concentration when run at the flow stated on the adaptor.

Create a quick-reference PDF on oxygen delivery devices

Reading File
Reading File
Browsing Directory

~/

Finding Sources
Searching PubMed

oxygen therapy AND delivery devices

Searching the Web

British Thoracic Society guideline oxygen use adults healthcare emergency oxygen target saturations 94 98 88 92

Reading File
Reading File
Running Command

mkdir -p "/tmp/workspace/oxygen-delivery-reference/src" "/tmp/workspace/oxygen-delivery-reference/output"

Browsing Directory

~/oxygen-delivery-reference/

Writing File

~/oxygen-delivery-reference/src/create_pdf.py

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, KeepTogether
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.lib.colors import HexColor
from reportlab.pdfbase.pdfmetrics import registerFontFamily
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase.pdfmetrics import pdfmetrics
from reportlab.lib import utils

out = '/tmp/workspace/oxygen-delivery-reference/output/Oxygen_Delivery_Devices_Quick_Reference.pdf'

# Built-in Helvetica gives portable, readable output.
PAGE_W, PAGE_H = letter
navy = HexColor('#12324A')
blue = HexColor('#176B87')
light_blue = HexColor('#EAF4F8')
teal = HexColor('#087E8B')
gold = HexColor('#F2B134')
light_gold = HexColor('#FFF6DD')
red = HexColor('#AE3030')
light_red = HexColor('#FCEAEA')
grey = HexColor('#5D6872')
line = HexColor('#C9D4DC')

styles = getSampleStyleSheet()
styles.add(ParagraphStyle(name='TitleQR', parent=styles['Title'], fontName='Helvetica-Bold', fontSize=20, leading=24, textColor=navy, spaceAfter=2))
styles.add(ParagraphStyle(name='SubQR', parent=styles['Normal'], fontName='Helvetica', fontSize=8.6, leading=11, textColor=grey, spaceAfter=8))
styles.add(ParagraphStyle(name='HeadQR', parent=styles['Heading2'], fontName='Helvetica-Bold', fontSize=11.2, leading=14, textColor=navy, spaceBefore=8, spaceAfter=4))
styles.add(ParagraphStyle(name='BodyQR', parent=styles['Normal'], fontName='Helvetica', fontSize=8.1, leading=10.4, textColor=HexColor('#1D2933')))
styles.add(ParagraphStyle(name='SmallQR', parent=styles['Normal'], fontName='Helvetica', fontSize=7.2, leading=8.8, textColor=HexColor('#1D2933')))
styles.add(ParagraphStyle(name='TinyQR', parent=styles['Normal'], fontName='Helvetica', fontSize=6.5, leading=7.8, textColor=grey))
styles.add(ParagraphStyle(name='CellHead', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=7.1, leading=8.3, textColor=colors.white, alignment=TA_CENTER))
styles.add(ParagraphStyle(name='Cell', parent=styles['Normal'], fontName='Helvetica', fontSize=6.9, leading=8.15, textColor=HexColor('#18252D')))
styles.add(ParagraphStyle(name='CellBold', parent=styles['Normal'], fontName='Helvetica-Bold', fontSize=7, leading=8.2, textColor=navy))
styles.add(ParagraphStyle(name='Box', parent=styles['Normal'], fontName='Helvetica', fontSize=8, leading=10.2, textColor=HexColor('#1D2933')))

def P(text, style='BodyQR'):
    return Paragraph(text, styles[style])

def device_table():
    data = [
        [P('DEVICE', 'CellHead'), P('USUAL SETTING', 'CellHead'), P('APPROX. FiO<sub>2</sub>', 'CellHead'), P('BEST USE / KEY POINT', 'CellHead')],
        [P('Nasal cannula', 'CellBold'), P('1-6 L/min', 'Cell'), P('24%-44%<br/>(variable)', 'Cell'), P('Mild hypoxaemia; eating and speaking possible. Actual FiO<sub>2</sub> varies with breathing pattern.', 'Cell')],
        [P('Simple face mask', 'CellBold'), P('5-10 L/min', 'Cell'), P('35%-60%<br/>(variable)', 'Cell'), P('Moderate oxygen need. <b>Do not run below 5 L/min</b> because of CO<sub>2</sub> rebreathing risk.', 'Cell')],
        [P('Venturi mask', 'CellBold'), P('Use the rate printed on the colour adaptor', 'Cell'), P('Fixed 24%-60%', 'Cell'), P('Controlled, predictable oxygen concentration. Useful when a lower target saturation is needed.', 'Cell')],
        [P('Partial rebreather mask', 'CellBold'), P('10-15 L/min', 'Cell'), P('50%-75%<br/>(variable)', 'Cell'), P('Reservoir bag, no one-way valves. Ensure bag remains inflated during inspiration.', 'Cell')],
        [P('Non-rebreather mask (NRBM)', 'CellBold'), P('10-15 L/min<br/>Usually 15 L/min', 'Cell'), P('Up to about 95%<br/>(variable)', 'Cell'), P('Severe hypoxaemia or emergency. Check valves and keep reservoir bag at least partly inflated.', 'Cell')],
        [P('High-flow nasal cannula (HFNC)', 'CellBold'), P('Typically up to 60 L/min, heated and humidified', 'Cell'), P('21%-100%<br/>(set)', 'Cell'), P('Escalated respiratory support. Requires trained staff, monitoring, and local protocol.', 'Cell')],
    ]
    t = Table(data, colWidths=[1.13*inch, 1.18*inch, 0.92*inch, 3.52*inch], repeatRows=1, hAlign='LEFT')
    t.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,0), navy),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ('GRID', (0,0), (-1,-1), 0.35, line),
        ('BACKGROUND', (0,1), (-1,1), colors.white),
        ('BACKGROUND', (0,2), (-1,2), light_blue),
        ('BACKGROUND', (0,3), (-1,3), colors.white),
        ('BACKGROUND', (0,4), (-1,4), light_blue),
        ('BACKGROUND', (0,5), (-1,5), colors.white),
        ('BACKGROUND', (0,6), (-1,6), light_blue),
        ('LEFTPADDING', (0,0), (-1,-1), 5), ('RIGHTPADDING', (0,0), (-1,-1), 5),
        ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4),
    ]))
    return t

def info_box(title, body, bg, border, width=7.0*inch):
    tbl = Table([[P('<b>'+title+'</b><br/>'+body, 'Box')]], colWidths=[width])
    tbl.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), bg), ('BOX', (0,0), (-1,-1), 0.7, border),
        ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8),
        ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6),
    ]))
    return tbl

def footer(canvas, doc):
    canvas.saveState()
    canvas.setStrokeColor(line); canvas.setLineWidth(.5)
    canvas.line(doc.leftMargin, 0.48*inch, PAGE_W-doc.rightMargin, 0.48*inch)
    canvas.setFont('Helvetica', 6.8); canvas.setFillColor(grey)
    canvas.drawString(doc.leftMargin, 0.30*inch, 'Oxygen Delivery Devices - Quick Reference | Adult acute-care guide')
    canvas.drawRightString(PAGE_W-doc.rightMargin, 0.30*inch, f'Page {doc.page}')
    canvas.restoreState()

doc = SimpleDocTemplate(out, pagesize=letter, leftMargin=0.55*inch, rightMargin=0.55*inch, topMargin=0.43*inch, bottomMargin=0.62*inch)
story=[]
story += [P('Oxygen Delivery Devices', 'TitleQR'), P('Adult quick reference | Flow rates are settings on the oxygen source, measured in litres per minute (L/min). FiO<sub>2</sub> is the fraction of oxygen in inspired gas.', 'SubQR')]
story.append(info_box('START WITH A TARGET', 'For most acutely ill adults, target <b>SpO<sub>2</sub> 94%-98%</b>. If there is risk of hypercapnic respiratory failure, such as COPD, target is usually <b>88%-92%</b> pending blood-gas assessment or an individualised order. Prescribe oxygen and titrate the device or flow to the target saturation.', light_gold, gold))
story.append(Spacer(1, 6))
story.append(P('Device guide', 'HeadQR'))
story.append(device_table())
story.append(P('How to select and use safely', 'HeadQR'))
left = [
    P('<b>1. Assess severity.</b> Start with the device appropriate to hypoxaemia and clinical condition. Escalate promptly if target saturation is not reached or the patient is deteriorating.', 'SmallQR'),
    Spacer(1,4),
    P('<b>2. Verify the setup.</b> Confirm oxygen source, tubing, prescribed device, set flow, mask fit, and visible chest movement. Recheck SpO<sub>2</sub> and clinical work of breathing.', 'SmallQR'),
    Spacer(1,4),
    P('<b>3. Document and reassess.</b> Record device, flow or FiO<sub>2</sub>, saturation, response, and escalation plan. Reduce or stop supplemental oxygen when stable and no longer indicated.', 'SmallQR')]
right = [
    P('<b>Venturi masks:</b> The barrel determines the FiO<sub>2</sub>. Use the <b>minimum flow printed on that barrel</b>. If respiratory rate or inspiratory demand is high, follow local policy for increasing flow while retaining the selected barrel.', 'SmallQR'),
    Spacer(1,4),
    P('<b>Reservoir masks:</b> Before placing, fill the bag. During use, it must not completely collapse on inspiration. If it does, check the supply and increase flow as appropriate.', 'SmallQR'),
    Spacer(1,4),
    P('<b>Limits:</b> Delivery estimates are approximate and vary with fit, leak, respiratory rate, tidal volume, and mouth breathing. They do not replace pulse oximetry and clinical assessment.', 'SmallQR')]
two=Table([[left,right]],colWidths=[3.47*inch,3.47*inch],hAlign='LEFT')
two.setStyle(TableStyle([('VALIGN',(0,0),(-1,-1),'TOP'),('BOX',(0,0),(0,0),0.5,line),('BOX',(1,0),(1,0),0.5,line),('BACKGROUND',(0,0),(0,0),colors.white),('BACKGROUND',(1,0),(1,0),light_blue),('LEFTPADDING',(0,0),(-1,-1),8),('RIGHTPADDING',(0,0),(-1,-1),8),('TOPPADDING',(0,0),(-1,-1),7),('BOTTOMPADDING',(0,0),(-1,-1),7)]))
story.append(two)
story.append(Spacer(1,6))
story.append(info_box('ESCALATE URGENTLY', 'Call for senior or emergency help if there is severe respiratory distress, exhaustion, altered consciousness, cyanosis, a rising oxygen requirement, or persistent saturation below target despite correct device setup. Use local emergency, airway, and escalation protocols.', light_red, red))
story.append(Spacer(1,6))
story.append(P('<b>Abbreviations:</b> FiO<sub>2</sub> = fraction of inspired oxygen; SpO<sub>2</sub> = pulse-oximeter oxygen saturation; NRBM = non-rebreather mask; HFNC = high-flow nasal cannula.', 'TinyQR'))
story.append(Spacer(1,3))
story.append(P('<b>Sources:</b> Murray & Nadel’s Textbook of Respiratory Medicine, 2-volume set, section “Noninvasive Oxygenation Interfaces,” p. 3214-3216; Current Surgical Therapy, 14e, “Oxygen therapy and airway adjuncts,” p. 1228; British Thoracic Society Guideline for oxygen use in adults in healthcare and emergency settings (2017). This aid supports, but does not replace, local protocols or clinician judgement.', 'TinyQR'))
doc.build(story, onFirstPage=footer, onLaterPages=footer)
print(out)
Running Command

python "/tmp/workspace/oxygen-delivery-reference/src/create_pdf.py" && python -c "from pypdf import PdfReader; p='/tmp/workspace/oxygen-delivery-reference/output/Oxygen_Delivery_Devices_Quick_Reference.pdf'; r=PdfReader(p); print('pages',len(r.pages)); print(r.pages[0].extract_text()[:1500])"

Reading File
Editing File

~/oxygen-delivery-reference/src/create_pdf.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/oxygen-delivery-reference/src/create_pdf.py'
Running Command

python "/tmp/workspace/oxygen-delivery-reference/src/create_pdf.py" && python -c "from pypdf import PdfReader; p='/tmp/workspace/oxygen-delivery-reference/output/Oxygen_Delivery_Devices_Quick_Reference.pdf'; r=PdfReader(p); print('pages',len(r.pages)); print(r.pages[0].extract_text()[:1800])"

Reading File
Created a one-page adult quick-reference PDF covering nasal cannulae, simple masks, Venturi masks, reservoir masks, non-rebreather masks, and high-flow nasal cannulae, with flow rates, approximate FiO₂, safety checks, and saturation targets.

Oxygen Delivery Devices Quick Reference

PDF Document · PDF

Explain the significance of one way valve in non rebreather mask

Reading File
Finding Sources
Searching PubMed

oxygen mask AND nonrebreather

Searching the Web

non-rebreather mask one-way valves function oxygen reservoir clinical

In a non-rebreather mask (NRBM), one-way valves help the patient breathe in mostly oxygen from the reservoir bag rather than exhaled air or room air.

What the valves do

  1. Valve between the mask and reservoir bag
    • Opens during inspiration, allowing oxygen stored in the bag to enter the mask.
    • Closes during exhalation, stopping exhaled carbon dioxide-rich gas from entering and contaminating the reservoir bag.
  2. One-way valves over the side ports
    • Close during inspiration, limiting entry of room air.
    • Open during exhalation, allowing exhaled gas to leave the mask.

Why this matters

  • Prevents rebreathing of exhaled CO₂
  • Keeps the reservoir bag rich in oxygen
  • Reduces dilution by room air
  • Allows delivery of a much higher inspired oxygen concentration than a simple face mask, although the exact FiO₂ varies with mask seal, oxygen flow, and the patient’s inspiratory demand.

Safety point

Run the NRBM at high flow, commonly 15 L/min, and check that the reservoir bag stays at least partly inflated during inspiration. If the bag collapses, the patient may receive less oxygen and may draw room air through the mask. If valves are missing, stuck, or incorrectly positioned, it may no longer function as a true non-rebreather mask.
This is a shared conversation. Sign in to Orris to start your own chat.