Laryngospasm 1. What is Laryngospasm... 2. Etiology and pathogenesis 3. Clinic of laryngospasm 4. Algorithm for determining laryngospasm 5. Complications of Laryngospasm 6. Rules for providing emergency and urgent care and features of providing emergency care to children
laryngospasm AND management
laryngospasm management pediatric emergency algorithm guideline
| Alternative problem | Clues |
|---|---|
| Tongue/soft-tissue obstruction | Snoring, improves with head position, jaw thrust, oral/nasal airway |
| Secretions, blood, vomit, or foreign body | Visible material, suction needed |
| Bronchospasm | Wheeze, prolonged expiration, high airway pressures rather than stridor |
| Equipment problem | Disconnected circuit, kinked tube, empty oxygen source |
| Endotracheal tube obstruction/displacement | No capnography, high resistance, unilateral chest movement |
| Laryngeal edema | Stridor after extubation, often with air movement |
| Anaphylaxis | Hypotension, rash, bronchospasm, edema |
This is a medical emergency. In a non-hospital setting, call emergency services immediately if a person cannot breathe, turns blue, becomes unconscious, has severe noisy breathing, or has a suspected foreign-body airway obstruction.
Make ppt of this information for medical emergency care subject
laryngospasm AND management
laryngospasm emergency management pediatric anesthesia algorithm
laryngospasm airway vocal cord closure medical illustration
~/
~/
mkdir -p "/tmp/workspace/laryngospasm-emergency-ppt/src" "/tmp/workspace/laryngospasm-emergency-ppt/output" && printf '%s' 'workspace ready'
python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/laryngospasm-emergency-ppt/src/create_laryngospasm_deck.py') p.write_text(r'''from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.enum.dml import MSO_THEME_COLOR OUT='/tmp/workspace/laryngospasm-emergency-ppt/output/Laryngospasm_Emergency_Care.pptx' prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] # palette NAVY=RGBColor(12,35,58); BLUE=RGBColor(20,96,145); TEAL=RGBColor(0,137,123); RED=RGBColor(190,50,55); ORANGE=RGBColor(231,126,34); PALE=RGBColor(242,247,250); LIGHT=RGBColor(223,237,245); DARK=RGBColor(35,48,61); WHITE=RGBColor(255,255,255); GREY=RGBColor(100,112,123); GREEN=RGBColor(39,140,91) def rect(sl,x,y,w,h,fill, line=None, radius=False): s=sl.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h)) s.fill.solid(); s.fill.fore_color.rgb=fill s.line.color.rgb=line if line else fill return s def text(sl,x,y,w,h,txt,size=20,color=DARK,bold=False,align=PP_ALIGN.LEFT, valign=MSO_ANCHOR.TOP, font='Aptos', margin=0.06): b=sl.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)) tf=b.text_frame; tf.clear(); tf.word_wrap=True; tf.margin_left=Inches(margin); tf.margin_right=Inches(margin); tf.margin_top=Inches(margin); tf.margin_bottom=Inches(margin); tf.vertical_anchor=valign for i,line in enumerate(txt.split('\n')): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=line; p.alignment=align; p.space_after=Pt(3) for r in p.runs: r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color return b def bullets(sl,x,y,w,h,items,size=18,color=DARK,accent=TEAL): b=sl.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)); tf=b.text_frame; tf.clear(); tf.word_wrap=True; tf.margin_left=Inches(.08); tf.margin_right=Inches(.03) for i,item in enumerate(items): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=item; p.level=0; p.font.size=Pt(size); p.font.name='Aptos'; p.font.color.rgb=color; p.space_after=Pt(8); p.bullet=True return b def header(sl,title,subtitle=None,num=None): rect(sl,0,0,13.333,.62,NAVY) text(sl,.55,.12,11.6,.32,title,28,WHITE,True) if num: text(sl,12.1,.15,.6,.25,f'{num:02}',14,RGBColor(156,203,229),True,PP_ALIGN.RIGHT) if subtitle: text(sl,.58,.74,12,.3,subtitle,12,GREY) def footer(sl,source='Medical Emergency Care | Laryngospasm'): rect(sl,0,7.18,13.333,.32,NAVY) text(sl,.55,7.23,8,.16,source,9,WHITE) text(sl,11.0,7.23,1.75,.16,'For trained clinical use',9,WHITE,False,PP_ALIGN.RIGHT) def add_note(sl,txt): notes=sl.notes_slide.notes_text_frame notes.text=txt def flow(sl, x,y,w,h,label,fill, color=WHITE): rect(sl,x,y,w,h,fill,fill,True); text(sl,x+.12,y+.08,w-.24,h-.16,label,15,color,True,PP_ALIGN.CENTER,MSO_ANCHOR.MIDDLE) def arrow(sl,x1,y1,x2,y2,color=BLUE): line=sl.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Inches(x1), Inches(y1), Inches(x2), Inches(y2)); line.line.color.rgb=color; line.line.width=Pt(2); line.line.end_arrowhead=True # 1 title s=prs.slides.add_slide(blank); rect(s,0,0,13.333,7.5,NAVY); rect(s,0,0,1.0,7.5,TEAL); rect(s,1.0,5.65,12.33,1.85,RGBColor(8,25,42)) text(s,1.45,1.1,10.6,.7,'Laryngospasm',42,WHITE,True) text(s,1.48,1.95,9.4,.7,'Recognition and Emergency Care',28,RGBColor(156,224,215),False) text(s,1.5,2.86,8.9,.65,'Medical Emergency Care',19,WHITE,True) text(s,1.5,3.52,8.4,.7,'Rapid recognition, airway rescue, and pediatric considerations',18,RGBColor(206,220,230)) # airway icon rect(s,10.4,1.2,1.7,3.4,RGBColor(19,68,95),None,True); text(s,10.72,1.6,1.1,.3,'AIRWAY',14,WHITE,True,PP_ALIGN.CENTER) for yy in [2.25,2.85,3.45]: rect(s,10.78,yy,1.0,.18,RGBColor(156,224,215),None,True) text(s,1.5,6.2,10,.35,'Teaching deck for emergency-care students and clinical trainees',14,RGBColor(185,211,228)) footer(s); add_note(s,'Introduce laryngospasm as a time-critical reflex upper-airway obstruction, typically encountered around anesthesia and airway manipulation.') #2 objectives s=prs.slides.add_slide(blank); header(s,'Learning objectives','By the end, the learner should be able to:',2) objs=[('DEFINE','Explain the mechanism and distinguish partial from complete obstruction.'),('RECOGNIZE','Identify warning signs: stridor, silent obstruction, absent capnogram, desaturation.'),('ACT','Use the emergency sequence: remove stimulus, oxygen, jaw thrust, assess ventilation, escalate.'),('ADAPT','Apply early escalation principles to infants and children.')] for i,(a,b) in enumerate(objs): x=.75+(i%2)*6.15; y=1.35+(i//2)*2.3; rect(s,x,y,5.65,1.78,WHITE,RGBColor(205,220,229),True); rect(s,x,y,.16,1.78,TEAL); text(s,x+.43,y+.28,4.9,.3,a,17,BLUE,True); text(s,x+.43,y+.72,4.75,.72,b,17,DARK) footer(s) #3 definition s=prs.slides.add_slide(blank); header(s,'1. What is laryngospasm?','A reflex closure of the larynx that can rapidly obstruct ventilation.',3) rect(s,.7,1.25,5.7,4.9,PALE,None,True); text(s,1.05,1.6,5.0,.7,'Reflex closure of the\ntrue and false vocal cords',25,NAVY,True,PP_ALIGN.CENTER) # simple glottis visual rect(s,2.7,3.25,1.65,1.65,WHITE,BLUE,True); rect(s,3.03,3.42,.22,1.25,RED); rect(s,3.8,3.42,.22,1.25,RED); text(s,1.2,5.3,4.65,.38,'Partial closure: stridor and air movement\nComplete closure: silent, no ventilation',16,DARK,False,PP_ALIGN.CENTER) rect(s,6.9,1.25,5.65,2.15,RGBColor(232,247,244),None,True); text(s,7.3,1.55,4.9,.28,'PARTIAL LARYNGOSPASM',16,TEAL,True); bullets(s,7.25,1.95,4.9,1.1,['Inspiratory stridor or crowing','Significant respiratory effort and retractions'],17) rect(s,6.9,3.75,5.65,2.15,RGBColor(254,237,237),None,True); text(s,7.3,4.05,4.9,.28,'COMPLETE LARYNGOSPASM',16,RED,True); bullets(s,7.25,4.45,4.9,1.1,['No effective airflow: may be completely silent','Failure to ventilate, rapid hypoxemia'],17) footer(s); add_note(s,'Laryngospasm is not merely noisy breathing. Complete glottic closure is often silent and can be mistaken for apnea or equipment failure.') #4 path s=prs.slides.add_slide(blank); header(s,'2. Etiology and pathogenesis','An exaggerated airway-protection reflex.',4) steps=[('Trigger','Secretions, blood, vomitus, foreign material, instrumentation'),('Afferent reflex','Laryngeal sensory stimulation via vagal, glossopharyngeal and trigeminal pathways'),('Adductor contraction','Powerful activation of intrinsic laryngeal adductor muscles'),('Airway obstruction','Partial or complete glottic closure'),('Physiologic collapse','Hypoxemia → bradycardia → cardiac arrest if unresolved')] for i,(a,b) in enumerate(steps): x=.55+i*2.53; y=2.0; flow(s,x,y,2.12,1.35,a,BLUE if i<4 else RED); text(s,x,y+1.55,2.12,1.15,b,13,DARK,False,PP_ALIGN.CENTER) if i<4: arrow(s,x+2.12,y+.67,x+2.42,y+.67) text(s,.85,5.55,11.6,.45,'Key concept: laryngospasm can persist even after the original irritant has been removed.',21,NAVY,True,PP_ALIGN.CENTER) footer(s) #5 risk s=prs.slides.add_slide(blank); header(s,'Risk factors and common precipitating events','Risk rises when a reactive airway is stimulated at a light plane of anesthesia.',5) left=['Infants and young children','Recent or active upper respiratory infection','Asthma, atopy, airway anomaly','Passive smoke exposure'] right=['Blood, saliva, secretions or vomitus','Laryngoscopy, suctioning, intubation or extubation','Repeated airway attempts or airway trauma','Light anesthesia, especially during airway procedures'] rect(s,.65,1.3,5.85,4.95,RGBColor(232,247,244),None,True); text(s,1.0,1.6,5.2,.32,'PATIENT-RELATED',18,TEAL,True); bullets(s,1.0,2.1,5.0,3.45,left,19) rect(s,6.85,1.3,5.85,4.95,RGBColor(244,240,252),None,True); text(s,7.2,1.6,5.2,.32,'EVENT / PROCEDURE-RELATED',18,BLUE,True); bullets(s,7.2,2.1,5.0,3.45,right,19) footer(s) #6 clinical s=prs.slides.add_slide(blank); header(s,'3. Clinical presentation','The severity is defined by air movement, ventilation, and oxygenation.',6) for x,title,c,items in [(.7,'PARTIAL OBSTRUCTION',TEAL,['High-pitched inspiratory stridor','Suprasternal/supraclavicular retractions','“Rocking” chest-abdominal movement','Capnogram may diminish']), (6.85,'COMPLETE OBSTRUCTION',RED,['Silent chest with no airflow','No reservoir-bag movement / cannot ventilate','Absent capnography','Rapid cyanosis, hypoxemia and bradycardia'])]: rect(s,x,1.35,5.8,4.95,WHITE,RGBColor(210,222,230),True); rect(s,x,1.35,5.8,.64,c,None,True); text(s,x+.2,1.52,5.4,.25,title,18,WHITE,True,PP_ALIGN.CENTER); bullets(s,x+.35,2.28,5.05,3.4,items,19) text(s,.9,6.47,11.5,.3,'Clinical pearl: complete laryngospasm can be silent. Do not wait for stridor before acting.',18,NAVY,True,PP_ALIGN.CENTER) footer(s) #7 diagnostic approach s=prs.slides.add_slide(blank); header(s,'4. Rapid assessment: is this laryngospasm?','Recognition must occur in parallel with emergency airway support.',7) flow(s,.55,1.3,2.2,.75,'Sudden difficult\nventilation / oxygenation',NAVY); arrow(s,2.75,1.68,3.25,1.68) flow(s,3.25,1.3,2.2,.75,'Call for help\nGive oxygen',BLUE); arrow(s,5.45,1.68,5.95,1.68) flow(s,5.95,1.3,2.25,.75,'Check airway &\nequipment',BLUE); arrow(s,8.2,1.68,8.7,1.68) flow(s,8.7,1.3,3.95,.75,'Stridor or silent obstruction +\nfailed ventilation?',TEAL) # differential cards text(s,.75,2.55,5.5,.32,'FIRST EXCLUDE / CORRECT',18,NAVY,True) checks=[('Equipment / circuit','Disconnection, obstruction, kink, empty oxygen'),('Soft-tissue obstruction','Tongue obstruction: improves with repositioning / airway adjunct'),('Contamination','Secretions, blood, vomitus or foreign body: suction'),('Bronchospasm','Wheeze, prolonged expiration, high airway resistance'),('Laryngeal edema','Post-extubation stridor with some airflow')] for i,(a,b) in enumerate(checks): y=3.0+i*.57; rect(s,.78,y,5.55,.42,PALE,None,True); text(s,.98,y+.08,1.65,.18,a,13,BLUE,True); text(s,2.65,y+.08,3.43,.18,b,12,DARK) rect(s,7.0,2.65,5.1,2.75,RGBColor(232,247,244),None,True); text(s,7.35,2.98,4.4,.35,'LARYNGOSPASM IS LIKELY WHEN',18,TEAL,True,PP_ALIGN.CENTER); bullets(s,7.35,3.52,4.25,1.45,['There is a likely laryngeal trigger','Obstruction persists despite basic airway opening','Partial stridor or silent complete closure is present'],15) rect(s,7.0,5.72,5.1,.48,RED,None,True); text(s,7.22,5.84,4.65,.18,'Treat while evaluating. Do not delay for tests.',15,WHITE,True,PP_ALIGN.CENTER) footer(s) #8 emergency algorithm s=prs.slides.add_slide(blank); header(s,'5. Emergency management algorithm','Early, coordinated response prevents hypoxemia and bradycardia.',8) alg=[('1','CALL HELP\nStop stimulation',TEAL),('2','100% O₂\nTight mask seal',BLUE),('3','Suction irritant\nFirm jaw thrust',BLUE),('4','Gentle CPAP /\npositive pressure',BLUE),('5','Deepen anesthesia\nif appropriate',ORANGE),('6','Refractory or\ndeteriorating?',RED),('7','Neuromuscular blockade\n+ ventilate / intubate',RED)] for i,(n,l,c) in enumerate(alg): x=.35+i*1.83; flow(s,x,1.65,1.55,1.1,l,c); text(s,x+.08,1.4,.34,.25,n,16,c,True,PP_ALIGN.CENTER) if i<6: arrow(s,x+1.55,2.2,x+1.78,2.2) text(s,.72,3.35,11.85,.35,'Actions should be simultaneous where possible: help, oxygen, suction, monitoring, and preparation for escalation.',19,NAVY,True,PP_ALIGN.CENTER) # key boxes for x,t,b,c in [(.75,'Avoid forceful ventilation','Vigorous positive pressure can distend the stomach and increase aspiration risk.',ORANGE),(4.62,'Reassess continuously','SpO₂, capnography, chest rise, heart rate and response to intervention.',TEAL),(8.48,'Escalate early','Persistent inability to ventilate is an airway emergency. Follow local difficult-airway protocol.',RED)]: rect(s,x,4.2,3.25,1.62,WHITE,RGBColor(210,222,230),True); text(s,x+.18,4.45,2.9,.25,t,16,c,True,PP_ALIGN.CENTER); text(s,x+.22,4.85,2.8,.62,b,13,DARK,False,PP_ALIGN.CENTER) footer(s); add_note(s,'This is a clinician-facing sequence. Drug selection and dosing require trained personnel, monitoring, airway equipment, and institutional protocols.') #9 drug escalation s=prs.slides.add_slide(blank); header(s,'Refractory laryngospasm: clinical escalation','For trained airway clinicians with resuscitation capability.',9) rect(s,.7,1.25,12.0,.7,RGBColor(254,237,237),None,True); text(s,.95,1.45,11.45,.25,'If jaw thrust, oxygenation, removal of irritant and gentle positive pressure fail, prepare for immediate pharmacologic airway rescue.',18,RED,True,PP_ALIGN.CENTER) # dosage cards cards=[('Deepen anesthetic','For laryngospasm during anesthesia, IV propofol is commonly used to deepen anesthesia.','Requires airway-ready clinician.',BLUE),('Succinylcholine','Pediatric anesthesia reference: 1-2 mg/kg IV; if no IV access, 4-5 mg/kg IM.','Ventilate and prepare to intubate.',RED),('Advanced airway','Endotracheal intubation if ventilation remains inadequate or another obstruction/aspiration is suspected.','Follow local difficult-airway pathway.',NAVY)] for i,(a,b,c,d) in enumerate(cards): x=.85+i*4.15; rect(s,x,2.45,3.72,2.85,WHITE,RGBColor(210,222,230),True); rect(s,x,2.45,3.72,.6,d,None,True); text(s,x+.18,2.62,3.35,.22,a,17,WHITE,True,PP_ALIGN.CENTER); text(s,x+.28,3.35,3.13,.95,b,16,DARK,False,PP_ALIGN.CENTER); text(s,x+.28,4.58,3.1,.3,c,14,d,True,PP_ALIGN.CENTER) text(s,.9,5.85,11.6,.45,'Medication administration is not a bystander intervention. It requires airway expertise, appropriate monitoring, and the ability to rescue ventilation.',17,NAVY,True,PP_ALIGN.CENTER) footer(s) #10 complications s=prs.slides.add_slide(blank); header(s,'6. Complications','The principal threat is prolonged hypoxemia from failure to ventilate.',10) comps=[('Hypoxemia / hypercapnia','Rapid fall in oxygenation, respiratory acidosis'),('Bradycardia','Especially rapid in infants and children'),('Cardiac arrest','Late manifestation of sustained hypoxia'),('Aspiration','May coexist with vomitus or regurgitation'),('Negative-pressure pulmonary edema','Strong inspiratory effort against a closed glottis'),('Airway trauma','From urgent and repeated airway intervention')] for i,(a,b) in enumerate(comps): x=.8+(i%3)*4.18; y=1.45+(i//3)*2.25; c=RED if i in [0,2] else ORANGE if i==1 else BLUE rect(s,x,y,3.7,1.72,WHITE,RGBColor(210,222,230),True); rect(s,x,y,.15,1.72,c); text(s,x+.35,y+.34,3.0,.24,a,17,c,True,PP_ALIGN.CENTER); text(s,x+.35,y+.82,3.0,.45,b,14,DARK,False,PP_ALIGN.CENTER) text(s,.85,6.15,11.5,.4,'After resolution: continue oxygen and monitoring. Look for recurrence, aspiration, pulmonary edema, bronchospasm and laryngeal edema.',18,NAVY,True,PP_ALIGN.CENTER) footer(s) #11 pediatric s=prs.slides.add_slide(blank); header(s,'7. Pediatric emergency-care features','Children have less oxygen reserve and can deteriorate quickly.',11) rect(s,.72,1.25,4.0,4.85,RGBColor(232,247,244),None,True); text(s,1.05,1.62,3.35,.35,'WHY CHILDREN ARE HIGH-RISK',19,TEAL,True,PP_ALIGN.CENTER); bullets(s,1.05,2.2,3.35,3.05,['Smaller airway diameter','Higher oxygen consumption','Lower functional residual capacity','Hypoxemia can rapidly cause bradycardia','Greater airway reactivity'],17) rect(s,4.98,1.25,3.55,4.85,RGBColor(244,240,252),None,True); text(s,5.23,1.62,3.05,.35,'ACT EARLY',19,BLUE,True,PP_ALIGN.CENTER); bullets(s,5.23,2.2,2.9,3.05,['Call experienced help early','Use age-appropriate equipment','Continuous SpO₂ and ECG monitoring','Correct oxygenation and ventilation first','Limit repeated traumatic attempts'],17) rect(s,8.8,1.25,3.8,4.85,RGBColor(254,237,237),None,True); text(s,9.05,1.62,3.3,.35,'BRADYCARDIA = RED FLAG',19,RED,True,PP_ALIGN.CENTER); text(s,9.15,2.35,3.05,1.25,'In children, bradycardia is often hypoxia-related. Restore effective oxygenation and ventilation immediately.',18,DARK,True,PP_ALIGN.CENTER); rect(s,9.35,4.25,2.7,.8,RED,None,True); text(s,9.5,4.44,2.4,.22,'Escalate per PALS / local protocol',14,WHITE,True,PP_ALIGN.CENTER) footer(s) #12 summary s=prs.slides.add_slide(blank); header(s,'Take-home messages','Rapid recognition and early airway rescue save time and oxygen reserve.',12) msgs=[('1','Think laryngospasm','Sudden obstruction after airway stimulation, especially in a child or lightly anesthetized patient.'),('2','Silent can be severe','Complete glottic closure may have no stridor and no airflow.'),('3','Treat immediately','Stop stimulus, give oxygen, suction, jaw thrust, assess ventilation, and call for help.'),('4','Escalate before collapse','Refractory obstruction, falling SpO₂ or bradycardia require immediate advanced airway intervention.')] for i,(n,a,b) in enumerate(msgs): y=1.25+i*1.25; rect(s,.8,y,11.7,.94,WHITE,RGBColor(210,222,230),True); rect(s,.8,y,.85,.94,TEAL if i<3 else RED,None,True); text(s,1.02,y+.28,.38,.25,n,20,WHITE,True,PP_ALIGN.CENTER); text(s,1.95,y+.18,3.2,.25,a,18,NAVY,True); text(s,5.0,y+.18,6.9,.45,b,16,DARK) text(s,.85,6.55,11.4,.27,'Emergency note: local protocols, airway expertise, and resuscitation resources govern definitive management.',15,GREY,False,PP_ALIGN.CENTER) footer(s) #13 references s=prs.slides.add_slide(blank); header(s,'References and safety note','Core sources used for this teaching presentation.',13) refs=[ 'Barash PG, Cullen BF, Stoelting RK. Clinical Anesthesia, 9e. Laryngospasm, p. 3756.', 'Miller RD. Miller’s Anesthesia, 10e. Airway reflexes and response to tracheal intubation, p. 5856.', 'Morgan GE, Mikhail MS. Clinical Anesthesiology, 7e. Airway obstruction, p. 2440.', 'Cummings Otolaryngology: Head and Neck Surgery. Laryngospasm section, pediatric risk factors and treatment.', 'OpenAnesthesia. Laryngospasm. Accessed September 2026.', 'OpenAnesthesia. Pediatric Difficult Airway. Accessed September 2026.' ] rect(s,.8,1.35,11.7,4.7,PALE,None,True); bullets(s,1.2,1.72,10.9,3.9,refs,17) rect(s,.8,6.25,11.7,.58,RGBColor(254,237,237),None,True); text(s,1.0,6.43,11.3,.2,'Educational material only. Emergency drug use and invasive airway procedures must be performed by qualified clinicians under local protocols.',13,RED,True,PP_ALIGN.CENTER) footer(s,'Medical Emergency Care | Reference slide') prs.save(OUT) print(OUT) ''') PY python "/tmp/workspace/laryngospasm-emergency-ppt/src/create_laryngospasm_deck.py" python - <<'PY' from pptx import Presentation p='/tmp/workspace/laryngospasm-emergency-ppt/output/Laryngospasm_Emergency_Care.pptx' prs=Presentation(p) print('slides:',len(prs.slides)) for i,s in enumerate(prs.slides,1): texts=[sh.text for sh in s.shapes if getattr(sh,'has_text_frame',False) and sh.text.strip()] print(i, texts[0][:60] if texts else 'EMPTY') PY
~/laryngospasm-emergency-ppt/output