Flow rates in oxygen mask
oxygen therapy AND delivery devices
oxygen mask flow rates simple mask Venturi mask non-rebreather guideline
| Device | Flow rate | Approx. FiO₂ / notes |
|---|---|---|
| Simple face mask | 5-10 L/min | About 40%-60%. Never use below 5 L/min because of carbon dioxide rebreathing risk. |
| Venturi mask | As printed on the colour-coded adaptor | Fixed 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 bag | 10-15 L/min, usually 15 L/min | High-concentration oxygen. Keep the reservoir bag inflated, at least partly, throughout inspiration. |
| Partial rebreather mask | 10-15 L/min | Reservoir bag without one-way valves. |
| Tracheostomy mask | Usually 8-10 L/min | Use humidification when indicated. |
What does flow rate means
oxygen therapy AND delivery devices
oxygen flow rate litres per minute oxygen mask definition
Create a quick-reference PDF on oxygen delivery devices
~/
oxygen therapy AND delivery devices
British Thoracic Society guideline oxygen use adults healthcare emergency oxygen target saturations 94 98 88 92
mkdir -p "/tmp/workspace/oxygen-delivery-reference/src" "/tmp/workspace/oxygen-delivery-reference/output"
~/oxygen-delivery-reference/
~/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)
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])"
~/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'
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])"
Oxygen Delivery Devices Quick Reference
PDF Document · PDF
Explain the significance of one way valve in non rebreather mask
oxygen mask AND nonrebreather
non-rebreather mask one-way valves function oxygen reservoir clinical