Asbestosis make a beautiful ppt on this topic

Reading File
Reading File
Finding Sources
Finding Sources
Searching Images

asbestosis high resolution CT chest subpleural fibrosis pleural plaques radiograph

Searching PubMed

asbestosis AND diagnosis

Searching the Web

CDC asbestos exposure asbestosis diagnosis prevention official

Browsing Directory

~/

Reading File
Reading File
Reading File
Reading Web Page

https://www.atsdr.cdc.gov/asbestos/prevention/index.html

Generating Image

A medically accurate educational illustration of asbestosis: inhaled asbestos fibers travel into the lungs and cause lower-lobe subpleural interstitial fibrosis and pleural plaques, clean labeled cutaway anatomy, no text except simple labels, suitable for a medical presentation.

Running Command

mkdir -p "/tmp/workspace/asbestosis-ppt/src" "/tmp/workspace/asbestosis-ppt/output" "/tmp/workspace/asbestosis-ppt/assets" && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/image-gen/4452b49996614dd0b672c0b6412f5d84.png" "https://cdn.orris.care/cdss_images/c2646a2902f8941eb67f3236cd707f025c6753a94d36c0b779d4c868f9845c65.png" > "/tmp/workspace/asbestosis-ppt/assets/images.json" && python -c "import json;d=json.load(open('/tmp/workspace/asbestosis-ppt/assets/images.json'));print([(x['url'], bool(x.get('base64')),x.get('error')) for x in d])"

Running Command

python -c "import json,base64;d=json.load(open('/tmp/workspace/asbestosis-ppt/assets/images.json'));[open('/tmp/workspace/asbestosis-ppt/assets/img%d.png'%i,'wb').write(base64.b64decode(x['base64'].split(',',1)[1])) for i,x in enumerate(d)]" && python -c "from PIL import Image; [print(p, Image.open(p).size) for p in ['/tmp/workspace/asbestosis-ppt/assets/img0.png','/tmp/workspace/asbestosis-ppt/assets/img1.png']]"

Writing File

~/asbestosis-ppt/src/create_asbestosis_ppt.py

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.dml import MSO_THEME_COLOR
from pptx.enum.shapes import MSO_CONNECTOR
from pptx.enum.text import MSO_AUTO_SIZE
from pptx.enum.dml import MSO_LINE_DASH_STYLE
from pathlib import Path

OUT = Path('/tmp/workspace/asbestosis-ppt/output/Asbestosis_Educational_Presentation.pptx')
AS = Path('/tmp/workspace/asbestosis-ppt/assets')
W, H = 13.333, 7.5
NAVY = RGBColor(10, 35, 58)
TEAL = RGBColor(20, 140, 145)
AQUA = RGBColor(87, 202, 202)
ORANGE = RGBColor(241, 150, 64)
CREAM = RGBColor(247, 249, 248)
INK = RGBColor(28, 48, 62)
MUTED = RGBColor(94, 112, 123)
PALE = RGBColor(228, 242, 241)
WHITE = RGBColor(255,255,255)
RED = RGBColor(190, 72, 63)

prs = Presentation()
prs.slide_width, prs.slide_height = Inches(W), Inches(H)
blank = prs.slide_layouts[6]

# helpers
def rect(slide,x,y,w,h,fill, line=None, radius=False):
    shp = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h))
    shp.fill.solid(); shp.fill.fore_color.rgb = fill
    shp.line.color.rgb = line if line else fill
    if radius: shp.adjustments[0] = 0.12
    return shp

def textbox(slide,text,x,y,w,h,size=20,color=INK,bold=False,font='Aptos',align=None, valign=MSO_ANCHOR.TOP, margin=0.05):
    shp=slide.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h))
    tf=shp.text_frame; tf.clear(); tf.word_wrap=True
    tf.margin_left=tf.margin_right=Inches(margin); tf.margin_top=tf.margin_bottom=Inches(margin)
    tf.vertical_anchor=valign
    p=tf.paragraphs[0]; p.text=text
    if align: p.alignment=align
    for r in p.runs:
        r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color
    return shp

def bulletbox(slide, items, x,y,w,h, size=16, color=INK, bullet_color=TEAL):
    shp=slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h)); tf=shp.text_frame; tf.clear(); tf.word_wrap=True
    tf.margin_left=Inches(.06);tf.margin_right=Inches(.03);tf.margin_top=Inches(.03);tf.margin_bottom=Inches(.03)
    for idx,item in enumerate(items):
        p=tf.paragraphs[0] if idx==0 else tf.add_paragraph(); p.text=item; p.level=0; p.space_after=Pt(10)
        p.font.name='Aptos'; p.font.size=Pt(size); p.font.color.rgb=color
        p._p.get_or_add_pPr().insert(0, p._p._new_buChar(char='•'))
    return shp

def title(slide, kicker, heading, sub=''):
    textbox(slide,kicker.upper(),.58,.35,5,.28,10,TEAL,True,letter_spacing if False else 'Aptos')
    textbox(slide,heading,.58,.66,12.1,.65,28,NAVY,True)
    if sub: textbox(slide,sub,.6,1.33,11.9,.34,12,MUTED)
    rect(slide,.58,1.76,1.05,.045,TEAL)

def footer(slide, n, source=''):
    rect(slide,.58,7.05,12.15,.012,RGBColor(204,220,220))
    textbox(slide,'ASBESTOSIS  |  EDUCATIONAL DECK',.58,7.13,4.0,.18,8,MUTED,True)
    textbox(slide,str(n).zfill(2),12.08,7.1,.55,.2,9,TEAL,True,align=PP_ALIGN.RIGHT)
    if source: textbox(slide,source,4.35,7.1,7.35,.2,7,MUTED,False,align=PP_ALIGN.RIGHT)

def icon_circle(slide, num, x,y, fill=TEAL):
    shp=slide.shapes.add_shape(MSO_SHAPE.OVAL, Inches(x), Inches(y), Inches(.43), Inches(.43)); shp.fill.solid();shp.fill.fore_color.rgb=fill;shp.line.color.rgb=fill
    textbox(slide,str(num),x,y+.035,.43,.28,12,WHITE,True,align=PP_ALIGN.CENTER)

def add_pic(slide,path,x,y,w,h):
    slide.shapes.add_picture(str(path), Inches(x), Inches(y), width=Inches(w), height=Inches(h))

# 1 cover
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,NAVY)
# teal circular design
for x,y,sz,clr,alpha in [(10.6,-.8,3.6,TEAL,0),(11.65,.05,2.0,AQUA,0),(-.8,6.35,2.1,TEAL,0)]:
    sh=s.shapes.add_shape(MSO_SHAPE.OVAL,Inches(x),Inches(y),Inches(sz),Inches(sz));sh.fill.solid();sh.fill.fore_color.rgb=clr;sh.line.color.rgb=clr
# use generated img framed right
rect(s,7.7,.65,4.92,5.85,WHITE,WHITE,True); add_pic(s,AS/'img0.png',7.82,.77,4.68,5.61)
rect(s,.65,.82,1.3,.06,TEAL)
textbox(s,'OCCUPATIONAL LUNG DISEASE',.68,1.15,4.8,.28,11,AQUA,True)
textbox(s,'Asbestosis',.65,1.7,6.5,.83,38,WHITE,True)
textbox(s,'A clear clinical guide to exposure, fibrosis, diagnosis, management and prevention.',.68,2.7,5.9,.8,18,RGBColor(214,231,234))
rect(s,.68,4.25,5.7,.85,RGBColor(19,57,77),RGBColor(19,57,77),True)
textbox(s,'Persistent inhaled fibers. Progressive interstitial scarring. Entirely preventable.',.9,4.46,5.25,.35,13,WHITE,False)
textbox(s,'Educational presentation | September 2026',.68,6.6,4.6,.25,11,RGBColor(185,211,215))

# 2 definition
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,CREAM); title(s,'01 | Foundation','What is asbestosis?','A chronic fibrotic pneumoconiosis caused by occupational or environmental asbestos exposure.')
rect(s,.62,2.12,5.78,3.95,WHITE,RGBColor(218,232,231),True)
textbox(s,'Definition',.95,2.45,2.5,.35,20,NAVY,True)
textbox(s,'Asbestosis is diffuse interstitial pneumonitis and fibrosis caused by retained asbestos fibers in the lung.',.95,3.05,4.9,1.05,22,INK,True)
rect(s,.95,4.55,4.83,.72,PALE,PALE,True); textbox(s,'Most often a delayed consequence of substantial cumulative exposure.',1.18,4.76,4.4,.25,12,TEAL,True)
# 3 core cards
for i,(hd,tx,clr) in enumerate([('Exposure','Inhaled mineral fibers','TEAL'),('Latency','Usually decades after first exposure','ORANGE'),('Disease','Lower-lung predominant fibrosis','TEAL')]):
    x=6.78+i*2.0; c=TEAL if clr=='TEAL' else ORANGE
    rect(s,x,2.25,1.72,3.15,WHITE,RGBColor(218,232,231),True); icon_circle(s,i+1,x+.64,2.65,c)
    textbox(s,hd,x+.15,3.35,1.42,.32,14,NAVY,True,align=PP_ALIGN.CENTER)
    textbox(s,tx,x+.15,3.86,1.42,.75,12,MUTED,False,align=PP_ALIGN.CENTER)
textbox(s,'Do not confuse pleural plaques (a marker of exposure) with parenchymal fibrosis (asbestosis).',.95,6.3,10.8,.35,13,RED,True)
footer(s,2,"Murray & Nadel; Fishman")

#3 risk
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,WHITE); title(s,'02 | Exposure','Who is at risk?','Risk is related to cumulative exposure, fiber type, and intensity of work tasks.')
occup=[('Construction & demolition','Renovation, removal, insulation disturbance'),('Shipyards & insulation','Pipe covering, boilers, lagging'),('Manufacturing & mining','Textiles, cement, brake linings, mining'),('Household / bystander','Dust carried home on work clothes')]
for i,(hd,tx) in enumerate(occup):
    x=.75+(i%2)*6.15;y=2.15+(i//2)*1.65
    rect(s,x,y,5.55,1.28,CREAM,RGBColor(221,233,232),True); icon_circle(s,i+1,x+.28,y+.35,TEAL if i<3 else ORANGE)
    textbox(s,hd,x+.9,y+.25,4.3,.28,16,NAVY,True);textbox(s,tx,x+.9,y+.68,4.35,.3,12,MUTED)
rect(s,.75,5.7,11.8,.7,NAVY,NAVY,True);textbox(s,'Clinical history should capture job titles, tasks, materials handled, duration, protection used, and possible secondary exposure.',1.0,5.93,11.3,.25,14,WHITE,False)
footer(s,3,'Source: ATSDR asbestos prevention')

#4 mechanism
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,CREAM); title(s,'03 | Mechanism','From fiber deposition to fibrosis','A simplified disease pathway')
steps=[('1','Inhalation','Respirable fibers reach distal airways'),('2','Retention','Fibers lodge at bronchioles and alveoli'),('3','Inflammation','Macrophage-driven alveolitis and injury'),('4','Fibrosis','Interstitial remodeling and honeycombing')]
for i,(num,hd,tx) in enumerate(steps):
    x=.72+i*3.12
    rect(s,x,2.25,2.58,2.5,WHITE,RGBColor(220,233,232),True); icon_circle(s,num,x+.18,2.46,TEAL if i<3 else ORANGE)
    textbox(s,hd,x+.25,3.15,2.05,.32,17,NAVY,True,align=PP_ALIGN.CENTER);textbox(s,tx,x+.28,3.72,2.0,.55,12,MUTED,False,align=PP_ALIGN.CENTER)
    if i<3: textbox(s,'→',x+2.63,3.22,.4,.4,26,TEAL,True,align=PP_ALIGN.CENTER)
rect(s,1.3,5.43,10.7,.64,PALE,PALE,True);textbox(s,'As disease advances: diffuse architectural distortion, traction bronchiectasis, and sometimes honeycombing may occur.',1.58,5.63,10.1,.23,13,INK,True)
footer(s,4,'Source: Fishman, Pathogenesis')

#5 clinical
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,WHITE); title(s,'04 | Clinical picture','How does it present?','Symptoms are often insidious and occur after a long latency period.')
left=[('Progressive dyspnea','Typically exertional at onset'),('Persistent dry cough','May coexist with breathlessness'),('Fine basal crackles','Late inspiratory, bilateral, not cleared by cough'),('Digital clubbing','May occur in advanced disease')]
for i,(hd,tx) in enumerate(left):
 y=2.1+i*.88; rect(s,.75,y,6.0,.67,CREAM,CREAM,True);rect(s,.75,y,.12,.67,TEAL);textbox(s,hd,1.05,y+.12,2.6,.23,14,NAVY,True);textbox(s,tx,3.25,y+.12,3.15,.23,12,MUTED)
rect(s,7.25,2.1,5.25,3.55,NAVY,NAVY,True);textbox(s,'Red flags',7.65,2.48,2.7,.35,22,WHITE,True)
bulletbox(s,['New hemoptysis','Unexplained weight loss','Rapid symptom change','Pleuritic pain or effusion'],7.65,3.16,3.95,1.85,16,RGBColor(226,241,242))
textbox(s,'Consider malignancy or another cause of deterioration.',7.65,5.05,4.2,.3,11,AQUA,True)
footer(s,5,'Source: Fishman, Clinical & Physiologic Features')

#6 diagnostic
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,CREAM); title(s,'05 | Diagnosis','A clinicoradiologic diagnosis','Integrate exposure history, compatible fibrotic disease, physiology, and exclusion of alternatives.')
items=[('Exposure history','Credible prior asbestos exposure; cumulative exposure matters.'),('Imaging','Chest radiograph for surveillance; HRCT better defines fibrosis and pleural disease.'),('Pulmonary function','Restrictive pattern and reduced diffusion capacity may be present.'),('Differential diagnosis','Exclude idiopathic pulmonary fibrosis and other interstitial lung diseases.')]
for i,(hd,tx) in enumerate(items):
    x=.75+(i%2)*6.1;y=2.1+(i//2)*1.65
    rect(s,x,y,5.55,1.27,WHITE,RGBColor(218,232,231),True);icon_circle(s,i+1,x+.25,y+.32,TEAL)
    textbox(s,hd,x+.85,y+.2,4.2,.28,15,NAVY,True);textbox(s,tx,x+.85,y+.61,4.2,.45,11,MUTED)
rect(s,.75,5.75,11.7,.55,RGBColor(255,241,229),RGBColor(255,225,197),True);textbox(s,'Biopsy is rarely required when exposure history and imaging are characteristic; seek specialist input when uncertain.',1.0,5.93,11.1,.2,12,RGBColor(143,82,31),True)
footer(s,6,'Source: Murray & Nadel, Chest Imaging')

#7 imaging
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,WHITE); title(s,'06 | Imaging & pathology','What to look for','Pleural abnormalities may support exposure history; parenchymal changes establish fibrotic lung disease.')
rect(s,.7,2.05,4.3,4.55,NAVY,NAVY,True); add_pic(s,AS/'img1.png',.87,2.22,3.96,3.15)
textbox(s,'Histopathology',1.0,5.6,2.5,.3,17,WHITE,True);textbox(s,'Peribronchiolar fibrosis, chronic inflammation, macrophage accumulation and type II pneumocyte proliferation.',1.0,5.98,3.75,.42,11,RGBColor(220,238,238))
finds=[('Chest radiograph','Basal, peripheral irregular opacities; pleural plaques may be visible.'),('HRCT','Subpleural lines/dots, parenchymal bands, reticulation, traction bronchiectasis and honeycombing in advanced disease.'),('Pathology','Asbestos bodies or uncoated fibers support the diagnosis but are not always required.')]
for i,(hd,tx) in enumerate(finds):
 y=2.1+i*1.43;rect(s,5.45,y,6.9,1.08,CREAM,CREAM,True);textbox(s,hd,5.72,y+.16,1.75,.24,14,TEAL,True);textbox(s,7.5 if False else tx,7.35,y+.14,4.65,.55,12,INK)
footer(s,7,'Image: Fishman Fig 85-3; source: Fishman & Murray/Nadel')

# 8 management
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,CREAM); title(s,'07 | Management','Manage disease, function and future risk','Established asbestosis is irreversible. Care focuses on exposure cessation, supportive therapy, and surveillance.')
manage=[('Stop exposure','Remove from ongoing exposure and involve occupational health.'),('Stop smoking','Smoking cessation reduces the combined lung cancer risk.'),('Support function','Vaccination, pulmonary rehabilitation, oxygen when indicated; treat infections promptly.'),('Monitor','Symptoms, pulmonary function, imaging when clinically indicated, and cancer warning symptoms.')]
for i,(hd,tx) in enumerate(manage):
 x=.74+(i%2)*6.15;y=2.08+(i//2)*1.55;rect(s,x,y,5.55,1.18,WHITE,RGBColor(220,233,232),True);icon_circle(s,i+1,x+.27,y+.29,ORANGE if i==1 else TEAL);textbox(s,hd,x+.88,y+.18,3.85,.28,15,NAVY,True);textbox(s,tx,x+.88,y+.58,4.2,.4,11,MUTED)
rect(s,.74,5.62,11.7,.7,NAVY,NAVY,True);textbox(s,'There is no established antifibrotic or curative therapy specific to asbestosis. Tailor care to comorbid lung disease and disability.',1.0,5.85,11.1,.3,13,WHITE,True)
footer(s,8,'Source: ATSDR patient management')

# 9 prevention
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,WHITE); title(s,'08 | Prevention','Prevention is the treatment','Asbestos-related disease is preventable by controlling dust at its source and avoiding disturbance of asbestos-containing materials.')
for i,(hd,tx) in enumerate([('Identify','Survey older buildings and materials before renovation or demolition.'),('Control','Use trained, licensed professionals and appropriate containment methods.'),('Protect','Workplace training, respiratory protection, hygiene and regulated procedures.'),('Follow up','Medical review for people with meaningful exposure; prevent further exposure.')]):
 x=.72+i*3.08; rect(s,x,2.15,2.58,2.75,PALE,PALE,True);textbox(s,str(i+1).zfill(2),x+.22,2.43,.48,.3,16,TEAL,True);textbox(s,hd,x+.23,3.08,2.05,.3,17,NAVY,True);textbox(s,tx,x+.23,3.63,2.05,.8,12,INK)
rect(s,.72,5.55,11.9,.7,RGBColor(255,241,229),RGBColor(255,241,229),True);textbox(s,'Never sand, saw, drill, scrape, or demolish suspected asbestos-containing material yourself.',1.0,5.78,11.3,.24,14,RGBColor(147,76,24),True)
footer(s,9,'Source: ATSDR prevention; NIOSH')

#10 takeaways references
s=prs.slides.add_slide(blank);rect(s,0,0,W,H,NAVY);textbox(s,'TAKE-HOME MESSAGE',.68,.55,3.2,.28,11,AQUA,True);textbox(s,'Recognize exposure. Confirm fibrosis. Prevent more harm.',.65,1.0,11.7,.67,30,WHITE,True)
for i,t in enumerate(['Asbestosis is a delayed, dose-related interstitial fibrotic disease from inhaled asbestos fibers.','A careful occupational and environmental exposure history is central to diagnosis.','HRCT, pulmonary function testing, and exclusion of other ILD guide assessment.','There is no cure. Stop exposure, stop smoking, protect function, and watch for complications.']):
 y=2.05+i*.78;icon_circle(s,i+1,.76,y,TEAL);textbox(s,t,1.35,y+.035,10.8,.34,15,RGBColor(230,241,242),False)
textbox(s,'Selected references',.7,5.55,2.6,.26,13,AQUA,True)
refs=['Murray & Nadel’s Textbook of Respiratory Medicine. Asbestos-related fibrosis of the lungs and pleura.','Fishman’s Pulmonary Diseases and Disorders. Asbestosis: pathology, pathogenesis, clinical features.','ATSDR/CDC. Preventing Asbestos Exposure; Managing Patients Exposed to Asbestos.','NIOSH Pocket Guide to Chemical Hazards: Asbestos.']
for i,r in enumerate(refs): textbox(s,f'{i+1}. {r}',.72,5.91+i*.25,11.8,.2,9,RGBColor(187,213,216))
textbox(s,'For education only. Clinical decisions should be individualized and guided by occupational and respiratory specialists.',.7,6.98,11.5,.2,8,RGBColor(187,213,216))

# Notes with source record
for sl in prs.slides:
    notes = sl.notes_slide.notes_text_frame
    notes.text = 'Educational deck. Core textbook sources: Murray & Nadel’s Textbook of Respiratory Medicine; Fishman’s Pulmonary Diseases and Disorders. Public health sources: ATSDR/CDC and NIOSH.'

prs.save(OUT)
print(OUT)
Running Command

python "/tmp/workspace/asbestosis-ppt/src/create_asbestosis_ppt.py"

Reading File
Editing File

~/asbestosis-ppt/src/create_asbestosis_ppt.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/asbestosis-ppt/src/create_asbestosis_ppt.py'
Running Command

python "/tmp/workspace/asbestosis-ppt/src/create_asbestosis_ppt.py" && python -c "from pptx import Presentation;p=Presentation('/tmp/workspace/asbestosis-ppt/output/Asbestosis_Educational_Presentation.pptx');print('slides',len(p.slides));print([len(s.shapes) for s in p.slides])"

Running Command

python - <<'PY' from pptx import Presentation from pathlib import Path p=Path('/tmp/workspace/asbestosis-ppt/output/Asbestosis_Educational_Presentation.pptx') prs=Presentation(p) assert len(prs.slides)==10 for i,s in enumerate(prs.slides,1): text=' '.join(sh.text for sh in s.shapes if getattr(sh,'has_text_frame',False)) assert text.strip(), f'empty slide {i}' print(i, text[:110].replace('\n',' | ')) print('bytes',p.stat().st_size) PY

Created a polished 10-slide PowerPoint on asbestosis, covering exposure risks, pathogenesis, clinical features, diagnosis, imaging, management, prevention, and references. It includes medical visuals and a clean professional design.
This is a shared conversation. Sign in to Orris to start your own chat.