Write a literature review on aspergillosis

Reading File
Finding Sources
Searching PubMed

"aspergillosis"[MeSH Terms] AND "diagnosis"[MeSH Terms]

Searching PubMed

"invasive aspergillosis"[MeSH Terms] AND "antifungal agents"[MeSH Terms]

Reading File
Reading File
Reading File
Reading File
Reading File
Reading Article

PMID: 38935907

Reading Article

PMID: 42012594

Reading File
Reading Article

PMID: 38898129

Reading Article

PMID: 40792442

Finding Sources
Searching PubMed

"COVID-19 associated aspergillosis" OR "influenza associated aspergillosis"

Searching the Web

aspergillosis 2024 2025 epidemiology global burden resistance guidelines

Reading File
Reading File
Reading File
Finding Sources
Reading File
Reading File
I now have extensive material from Goldman-Cecil, Harrison's, Murray & Nadel, Medical Microbiology, Red Book, and multiple PubMed systematic reviews. I have enough to write a thorough literature review. Let me compose it now.

Literature Review: Aspergillosis

Abstract

Aspergillosis encompasses a spectrum of diseases caused by filamentous fungi of the genus Aspergillus, ranging from benign saprophytic colonization and IgE-mediated hypersensitivity to life-threatening invasive infection. Aspergillus fumigatus is responsible for the majority of clinical disease, though A. flavus, A. terreus, and A. niger are also recognized pathogens. The clinical outcome of exposure depends far more on host immune status than on fungal virulence per se. Over the past two decades, the population at risk has expanded considerably with the growth of hematopoietic stem cell transplantation (HSCT), solid organ transplantation, prolonged immunosuppressive therapy, and, most recently, critical illness from COVID-19 and influenza. Diagnosis remains challenging, relying on an integrated approach of radiology, serum and bronchoalveolar lavage (BAL) biomarkers, culture, histopathology, and molecular assays. Voriconazole has been the cornerstone of first-line therapy since a landmark randomized trial, with isavuconazole now established as an equally effective alternative offering a more favorable safety profile. Emerging triazole resistance, driven by environmental selection pressure from agricultural fungicide use, constitutes one of the most pressing threats to effective management.

1. Introduction

Aspergillus species are ubiquitous saprophytic molds found in soil, decaying organic matter, compost, and air across all climatic zones. They tolerate temperatures up to 40-50°C and are readily isolated from indoor environments including bedding, humidifiers, ventilation ducts, potted plants, pepper, and even marijuana. Conidia (asexual spores) are continuously aerosolized and inhaled by virtually all humans; the healthy immune system - primarily alveolar macrophages and neutrophils - eliminates them without clinical consequence. Disease arises when host defenses are compromised or when hypersensitivity pathways are triggered in atopic individuals (Goldman-Cecil Medicine, Chapter 311).
The global burden is substantial. An estimated 3 million people worldwide live with chronic pulmonary aspergillosis (CPA), while allergic bronchopulmonary aspergillosis (ABPA) affects approximately 4.8 million individuals globally - including 1-3% of all asthma patients and 7-15% of those with cystic fibrosis. Invasive aspergillosis (IA) complicates care in up to 13% of immunocompromised patients and carries 6-week mortality rates of 31-36% even in the contemporary triazole era (Morrissey et al., 2024 [PMID: 38935907]).

2. Microbiology and Pathogen Biology

2.1 Taxonomy and Morphology

Aspergillus species are hyaline (non-melanized) molds classified as Ascomycetes. In tissue, they grow as dichotomously branching (Y-shaped) septate hyphae at approximately 45-degree angles - a morphological hallmark that distinguishes them from the Mucorales (which cause mucormycosis) and from melanized molds (Goldman-Cecil Medicine). A. fumigatus (the most common pathogen), A. flavus, A. terreus, and A. niger account for the vast majority of clinical infections. Importantly, A. terreus exhibits intrinsic resistance to amphotericin B, a fact with direct therapeutic implications.

2.2 Virulence Factors

The pathogenicity of A. fumigatus derives from multiple mechanisms:
  • Thermotolerance: growth at physiologic temperatures (37°C) and beyond
  • Small conidial size (2-3 µm), enabling deep alveolar deposition
  • Cell wall components: galactomannan, β-glucan, and melanin confer immune evasion
  • Gliotoxin and other mycotoxins: suppress phagocyte oxidative burst and induce apoptosis in immune effector cells
  • Angioinvasion: hyphae penetrate vascular walls, leading to hemorrhagic infarction and hematogenous dissemination (Harrison's Principles, Chapter 223; Medical Microbiology 9e)

3. Epidemiology and Risk Factors

3.1 Host-Dependent Disease Spectrum

The outcome of Aspergillus exposure is fundamentally determined by host immune competence. The disease spectrum spans three broad categories (Goldman-Cecil Medicine, Table 311-1):
CategoryClinical Forms
Acute invasive aspergillosisInvasive pulmonary aspergillosis, invasive sinusitis, tracheobronchitis, cerebral aspergillosis, endocarditis, osteomyelitis
Chronic aspergillosisAspergilloma, chronic necrotizing pulmonary aspergillosis (CNPA), chronic cavitary pulmonary aspergillosis (CCPA)
Allergic formsABPA, allergic Aspergillus sinusitis, extrinsic allergic alveolitis (hypersensitivity pneumonitis)

3.2 High-Risk Populations

The primary risk factors for IA include:
  • Prolonged neutropenia (>10 days, absolute neutrophil count <500/µL), particularly in hematologic malignancies such as acute leukemia
  • Hematopoietic stem cell transplantation (HSCT): both allogeneic transplant recipients and those with graft-versus-host disease (GVHD) are at markedly elevated risk
  • Solid organ transplantation: lung, heart, and liver transplant recipients carry the highest risk
  • High-dose corticosteroids and other immunosuppressive therapy
  • Primary immunodeficiencies, particularly chronic granulomatous disease (CGD), where neutrophils fail to generate reactive oxygen species against hyphae
  • Severe aplastic anemia
  • Advanced HIV infection (CD4 <50 cells/µL)
A genetic susceptibility factor has been characterized: homozygous haplotype (h2/h2) in the PTX3 gene (encoding the soluble pattern-recognition receptor pentraxin 3) in donor cells after HSCT impairs neutrophilic antifungal capacity and significantly increases IA risk (Goldman-Cecil Medicine).
Critically ill patients have emerged as a newer at-risk group. Invasive pulmonary aspergillosis complicating influenza (IAPA) was recognized with rising frequency in the 2010s; influenza-associated aspergillosis carries mortality exceeding 50%. COVID-19-associated pulmonary aspergillosis (CAPA) subsequently attracted significant attention during the SARS-CoV-2 pandemic, with the combination of viral-induced innate immune dysregulation, corticosteroid therapy, and disrupted airway epithelium creating a permissive host environment (Koulenti et al., 2024 [PMID: 38700287]).
The incidence of IA in patients with acute leukemia is approximately 5.84 per 100 patients, and hematology patients with IA have significantly higher mortality than solid-tumor patients with IA (30% vs. 18%, p=0.04) (Morrissey et al., 2024 [PMID: 38935907]).

4. Pathogenesis

After inhalation, conidia deposit in the alveolar spaces and bronchioles. In immunocompetent individuals, alveolar macrophages engulf and destroy conidia through oxidative and non-oxidative mechanisms. Recruited neutrophils then kill germinating hyphae. In neutropenic or otherwise immunocompromised hosts, this two-tier defense fails: conidia germinate to hyphae, which invade pulmonary parenchyma and penetrate blood vessels (angioinvasion). Vascular invasion produces thrombosis, ischemic infarction, and hemorrhagic necrosis - explaining the characteristic radiographic "halo sign" on CT, which represents a zone of hemorrhagic infarction surrounding a central infarcted nodule.
Hematogenous dissemination follows vascular penetration, with the brain, kidneys, heart, liver, spleen, and gastrointestinal tract being the most commonly seeded extrapulmonary sites (Medical Microbiology 9e). Cerebral aspergillosis manifests as abscess or hemorrhagic infarction and carries a grave prognosis.
In contrast, ABPA represents a Th2-skewed hypersensitivity response in sensitized individuals. IgE-mediated mast cell degranulation and IgG immune complex deposition in bronchial walls lead to bronchial inflammation, mucous plugging, and - over time - proximal bronchiectasis and pulmonary fibrosis if untreated.

5. Clinical Manifestations

5.1 Invasive Pulmonary Aspergillosis (IPA)

IPA accounts for more than 80% of IA cases. Clinical presentation in severely immunocompromised patients may be deceptively subtle: fever (often responsive to glucocorticoids yet with disease progression), nonproductive cough, pleuritic chest pain, and hemoptysis. Dyspnea and respiratory failure develop as disease progresses. The disease is arbitrarily classified as acute (course ≤1 month) and subacute (1-3 months), with pace correlating with depth of immunosuppression (Harrison's Principles). Critically, IA is one of the most commonly missed diagnoses at autopsy in immunocompromised patients.

5.2 Invasive Sinusitis

Sinuses are involved in 5-10% of IA cases. Fever, nasal/facial pain, blocked nose, and bloody discharge are the principal features. Endoscopic examination may reveal pale, dusky, or frankly necrotic sinonasal tissue. CT/MRI is essential, though early findings may be indistinguishable from bacterial sinusitis (Harrison's Principles).

5.3 Tracheobronchitis

Seen predominantly in lung transplant recipients and mechanically ventilated patients, tracheobronchitis from Aspergillus ranges from airway inflammation to ulcerative or pseudomembranous bronchitis. Mucous plugging can cause lobar collapse.

5.4 Aspergilloma

An aspergilloma (fungal ball) forms when Aspergillus hyphae colonize a preexisting pulmonary cavity - most commonly from prior tuberculosis, sarcoidosis, bullous emphysema, bronchiectasis, or prior lung abscess. It appears on imaging as a rounded opacity within a cavity, often with a characteristic "air crescent" sign. Most patients are asymptomatic, though recurrent hemoptysis - occasionally life-threatening - is the main complication. Immune status is near-normal. Simple aspergilloma has an excellent prognosis; surgical resection is indicated for life-threatening hemoptysis.

5.5 Chronic Pulmonary Aspergillosis (CPA)

CPA encompasses a spectrum including:
  • Chronic necrotizing pulmonary aspergillosis (CNPA): locally invasive, semi-invasive form occurring in patients with mild immune deficiency (e.g., diabetes, alcoholism, corticosteroids, COPD). It progresses over months to years with cavitation and tissue necrosis.
  • Chronic cavitary pulmonary aspergillosis (CCPA): multiple Aspergillus-related cavities, which may or may not harbor aspergillomas; patients may have genetically mediated deficits in innate immunity.
Patients present with weight loss, fatigue, productive cough, hemoptysis, and low-grade fever. CPA is a major long-term sequela of pulmonary tuberculosis in high-burden settings (Goldman-Cecil Medicine).

5.6 Allergic Bronchopulmonary Aspergillosis (ABPA)

ABPA is the most common allergic form, arising in sensitized asthmatic and cystic fibrosis patients. Diagnostic criteria include:
  • Total serum IgE ≥1000 IU/mL (or ng/mL)
  • Positive immediate skin test or elevated serum IgE to Aspergillus antigens
  • Peripheral blood eosinophilia
  • Central (proximal) bronchiectasis on imaging
  • Episodic bronchospasm, mucous plugging, and pulmonary infiltrates (Red Book, 2021)
Recurrent exacerbations ("ABPA flares") ultimately produce fibrosis and end-stage lung disease if uncontrolled.

5.7 Disseminated and Extrapulmonary Aspergillosis

In profoundly immunocompromised patients, hematogenous dissemination produces cerebral abscesses or hemorrhagic infarctions (most feared complication), endophthalmitis, vertebral osteomyelitis and diskitis (more common in children), skin nodules or ulcers, Aspergillus endocarditis (particularly on prosthetic valves), and renal/gastrointestinal involvement (Firestein & Kelley's Rheumatology; Goldman-Cecil Medicine).

6. Diagnosis

Aspergillosis diagnosis integrates clinical context, imaging, microbiological culture, histopathology, serum and BAL biomarkers, and increasingly, molecular methods.

6.1 Imaging

High-resolution CT of the thorax is the most important early diagnostic tool in suspected IPA. Key findings include:
  • Halo sign: a ground-glass opacity surrounding a pulmonary nodule, representing peri-nodular hemorrhagic infarction - characteristic but not pathognomonic of IPA
  • Air crescent sign: a crescent of air within a nodule or cavity, representing separation of infarcted tissue during neutrophil recovery - typically appearing later in the course
  • Pulmonary nodules and wedge-shaped infarcts
  • Cavitation in subacute and chronic disease
Children with IA frequently do not manifest cavitation or the air crescent and halo signs, so their absence must not exclude the diagnosis (Red Book, 2021).

6.2 Galactomannan

Galactomannan (GM) is a polysaccharide component of the Aspergillus cell wall released during hyphal growth. The Platelia enzyme immunoassay (EIA) detecting galactomannan is validated as a surrogate marker for IA in serum (sensitivity ~60-70% in hematologic patients) and BAL fluid (higher sensitivity). Serial monitoring of serum GM in patients with elevated levels at baseline is useful for tracking therapeutic response. False positives occur with certain beta-lactam antibiotics (particularly piperacillin-tazobactam), dietary sources, and cross-reacting fungi (Firestein & Kelley's Rheumatology; Red Book, 2021).

6.3 Beta-D-Glucan

The (1→3)-β-D-glucan assay detects a cell wall component shared across multiple fungi (including Candida, Aspergillus, and Pneumocystis). Though not specific for aspergillosis, it is a sensitive pan-fungal marker. Specificity is reduced by hemodialysis, certain antibiotics, and bacteremia (Red Book, 2021).

6.4 Culture and Histopathology

Culture of respiratory secretions, BAL, or tissue biopsy yields Aspergillus in variable proportions of IA cases but remains the gold standard for species identification and antifungal susceptibility testing. Histopathology demonstrating branching septate hyphae with 45-degree dichotomous branching in tissue confirms the diagnosis and distinguishes aspergillosis from mucormycosis.

6.5 Aspergillus PCR

PCR-based detection in blood, BAL, or serum is increasingly validated and included in EORTC/MSGERC diagnostic criteria. While highly sensitive, standardization across laboratories is evolving. PCR is particularly valuable in patients receiving antifungal prophylaxis, where galactomannan sensitivity is reduced (Medical Microbiology 9e; Red Book, 2021).

6.6 Bronchoscopy and BAL

BAL is a cornerstone of diagnosis in patients who cannot safely undergo surgical biopsy. Galactomannan, β-D-glucan, culture, cytology, and PCR can all be performed on BAL fluid. Tracheobronchial lavage screening is particularly important in mechanically ventilated patients, in whom chest radiology may be non-diagnostic.

7. Treatment

7.1 Invasive Aspergillosis: First-Line Therapy

Voriconazole (a triazole) is the established first-line agent for IA in all patient groups except neonates, supported by the landmark randomized controlled trial by Herbrecht et al. (2002), which demonstrated superiority over amphotericin B deoxycholate in response rate (52.8% vs. 31.6%) and 12-week survival. This superiority is confirmed across multiple subsequent systematic reviews and network meta-analyses.
Isavuconazole has emerged as an equally effective first-line alternative. A 2026 network meta-analysis (Gu et al., Drugs [PMID: 42012594]) synthesizing 5 RCTs and 1,293 patients found no statistically significant mortality differences between voriconazole, isavuconazole, and posaconazole as primary therapy for IA. Importantly, isavuconazole demonstrated a favorable efficacy-safety profile, with lower rates of visual disturbances, hepatotoxicity, QTc prolongation, and drug-drug interactions compared to voriconazole. Isavuconazole is FDA-approved for both IA and invasive mucormycosis.
Posaconazole is an acceptable alternative of comparable efficacy, particularly in patients with chronic granulomatous disease, where some evidence suggests superiority over voriconazole.

7.2 Liposomal Amphotericin B and Echinocandins

Liposomal amphotericin B (L-AmB) is a standard alternative, particularly when triazoles are contraindicated or in regions with high triazole resistance. Amphotericin B deoxycholate is avoided due to nephrotoxicity; it remains reserved for neonates with IA in whom voriconazole's visual toxicity is of concern. Echinocandins (caspofungin, micafungin, anidulafungin) are not recommended as primary monotherapy but have demonstrated efficacy in salvage settings and as combination partners (Firestein & Kelley's Rheumatology).

7.3 Combination Therapy

The combination of voriconazole plus anidulafungin has the most supporting evidence among combination regimens. The 2026 network meta-analysis (Gu et al. [PMID: 42012594]) showed a trend toward reduced mortality with voriconazole + anidulafungin vs. voriconazole monotherapy (RR 0.74, 95% CrI 0.43-1.28) without statistical significance; this combination may be considered for severe cases. Overall, combination therapy has not demonstrated a clear benefit over monotherapy in unselected patients (Firestein & Kelley's Rheumatology).

7.4 Treatment Duration and Monitoring

Treatment should continue for a minimum of 6-12 weeks, individualized based on the depth and expected duration of immunosuppression, site of infection, and clinical/radiologic response (Red Book, 2021). Voriconazole trough monitoring is essential - target trough 2-6 µg/mL in children, with similar targets applied in adults for both efficacy and toxicity minimization. Significant interpatient variability in CYP2C19-mediated metabolism necessitates therapeutic drug monitoring, especially given voriconazole's narrow therapeutic window and its well-documented neurologic (visual disturbances, hallucinations, encephalopathy), hepatic, and skin adverse effects.

7.5 Immune Reconstitution and Surgery

Recovery of immune function is paramount: wherever possible, reducing corticosteroid doses and other immunosuppressants is critical to disease control. Surgery - pulmonary resection, débridement of necrotic tissue, or sinus surgery - plays an important role in selected cases, particularly localized disease, life-threatening hemoptysis from aspergilloma, osteomyelitis or diskitis, endophthalmitis, and endocarditis (Goldman-Cecil Medicine; Firestein & Kelley's Rheumatology). For pleural aspergillosis, combined surgical resection and antifungal therapy (initial amphotericin B followed by long-term azole for ≥6 months) is the standard approach (Murray & Nadel's Textbook of Respiratory Medicine).

7.6 ABPA Treatment

The mainstay of ABPA management is oral corticosteroids (prednisolone) for acute exacerbations, combined with itraconazole (or other azoles) to reduce Aspergillus antigenic load in the airways. A 2024 meta-analysis (Chen et al., Lung [PMID: 38898129]) synthesizing 86 studies (346 patients) showed significant benefits of biologic therapies as adjunctive ABPA treatment:
  • Omalizumab (anti-IgE): significantly reduced exacerbation rates, oral corticosteroid dosage, and total IgE levels while improving FEV1
  • Dupilumab (anti-IL-4Rα) and mepolizumab (anti-IL-5): similarly reduced exacerbations, OCS use, and IgE
  • Biologics targeting the Th2 pathway thus represent an emerging treatment option, particularly in steroid-dependent ABPA, pending larger RCTs

7.7 Chronic Pulmonary Aspergillosis

Long-term azole therapy (itraconazole, voriconazole, or posaconazole) is the standard of care for CPA/CNPA/CCPA, typically continued for at least 6 months and often indefinitely given the high relapse rate. A 2025 systematic review (de Oliveira et al. [PMID: 40220930]) specifically evaluated isavuconazole in CPA, finding emerging evidence for its efficacy in this indication.

7.8 Prophylaxis

In high-risk patients - particularly those with hematologic malignancies undergoing induction chemotherapy and allogeneic HSCT recipients - antifungal prophylaxis with mold-active azoles is standard practice: posaconazole (extended-release tablets preferred over oral suspension for reliable bioavailability), voriconazole, or itraconazole. Prophylaxis has meaningfully reduced IA incidence in these populations (Medical Microbiology 9e).

8. Antifungal Resistance: An Emerging Threat

Triazole resistance in A. fumigatus represents one of the most significant threats to aspergillosis management. The dominant mechanism involves mutations in the cyp51A gene encoding the lanosterol 14-α demethylase target enzyme, with the TR34/L98H tandem repeat mutation being the most prevalent globally - found in both clinical and environmental isolates (Swain et al., 2025 [PMID: 40792442]).
Critically, this "environmental route" of resistance arises from use of azole fungicides (propiconazole, tebuconazole, epoxiconazole) in agriculture, generating triazole-resistant A. fumigatus in soil and composting environments. This represents a "One Health" concern distinct from the clinical selection pressure of therapeutic azole use.
A 2025 systematic review and meta-analysis (Swain et al. [PMID: 40792442]) of 97 studies across Asia - including 8,049 clinical and 6,949 environmental isolates - found:
  • Pooled TRAF rate in clinical isolates: 4% (95% CI 3-6%)
  • Pooled TRAF rate in environmental isolates: 14% (95% CI 9-20%)
  • 53.5% of resistant isolates were pan-triazole resistant
  • Resistance to itraconazole was most common (86.3%), followed by posaconazole (66.5%) and voriconazole (65.4%)
  • Higher clinical resistance rates in Turkey, India, Iran, and Japan
Globally, voriconazole susceptibility in A. fumigatus varies markedly by region: from 22.2% susceptibility reported in the Netherlands to 94.7-99.7% in Brazil, Korea, India, China, and the UK (Morrissey et al., 2024 [PMID: 38935907]). Cross-resistance is common: 85%, 92.8%, and 100% of voriconazole-resistant isolates are also resistant to itraconazole, posaconazole, and isavuconazole, respectively. Voriconazole-resistant IA carries significantly higher 12-week mortality than susceptible IA (54.5% vs. 30.7%, p=0.035).
A 2025 systematic review (Song et al., Mycoses [PMID: 41108579]) evaluating antifungal susceptibility and resistance in aspergillosis further underscores the need for routine susceptibility testing and local epidemiologic monitoring. In settings with high azole resistance prevalence, empiric therapy should include voriconazole plus an echinocandin until susceptibilities are available (Red Book, 2021).

9. Special Considerations

9.1 COVID-19-Associated Pulmonary Aspergillosis (CAPA)

CAPA was documented with rising frequency during the SARS-CoV-2 pandemic, particularly in mechanically ventilated patients receiving corticosteroids or immunomodulatory agents (e.g., IL-6 inhibitors). The combination of viral-induced disruption of respiratory epithelial barriers, innate immune dysregulation, and iatrogenic immunosuppression creates a host susceptible to Aspergillus colonization and invasion. Diagnosis in CAPA is complicated by atypical CT findings and the fact that galactomannan sensitivity may be lower in non-neutropenic patients (Goldman-Cecil Medicine; Koulenti et al., 2024 [PMID: 38700287]).

9.2 Pediatric Considerations

Children with IA frequently lack the classic halo and air crescent signs on CT. Voriconazole is the drug of choice in pediatric IA, though amphotericin B deoxycholate (in high dose) is preferred in neonates to avoid voriconazole's teratogenic and visual toxicities. Posaconazole pharmacokinetics in young children are not fully established; extended-release tablets significantly improve absorption when used. Trough monitoring is critical given higher and more variable voriconazole metabolism in children via CYP2C19.

9.3 Occupational and Nosocomial Risk

Outbreaks of nosocomial aspergillosis have been linked to hospital construction and renovation, contaminated ventilation systems, and unfiltered air supplies. Infection control measures - including HEPA filtration, positive-pressure rooms, and construction barriers for immunocompromised wards - are critical preventive interventions.

10. Prognosis and Outcomes

Outcomes in IA remain poor despite advances in antifungal therapy. Six-week mortality ranges from 31-36% in the modern triazole era; in patients with concurrent hematologic malignancies, 30-day mortality approaches 65% in some series. Key adverse prognostic factors include: triazole-resistant A. fumigatus, underlying hematologic malignancy, delayed initiation of antifungal therapy, cerebral involvement, and failure to achieve immune reconstitution. The prognosis for simple aspergilloma and ABPA is considerably better, though ABPA is a progressive disease without adequate treatment. CPA has a 5-year mortality of 20-40%, driven largely by the underlying pulmonary comorbidities (Goldman-Cecil Medicine).

11. Conclusion

Aspergillosis represents a clinically diverse and biologically complex group of fungal diseases whose incidence continues to rise alongside expanding immunosuppressed patient populations. The last decade has seen meaningful advances: isavuconazole established as an effective and better-tolerated first-line alternative to voriconazole, biologic therapies emerging in ABPA management, and improved diagnostic biomarkers and molecular methods. However, three challenges define the contemporary landscape. First, antifungal resistance - particularly environmentally-acquired triazole resistance mediated by TR34/L98H cyp51A mutations in A. fumigatus - threatens the primary therapeutic class in settings across Asia, Europe, and beyond. Second, new at-risk groups (CAPA, IAPA, broadly immunosuppressed patients on checkpoint inhibitors or JAK inhibitors) demand heightened clinical vigilance and adapted diagnostic strategies. Third, the persistently high mortality of invasive disease underscores that early diagnosis and prompt therapy, combined with aggressive management of underlying immunosuppression, remain the determinants of survival.

Key References

  1. Walsh TJ, Patterson TF. Aspergillosis. Goldman-Cecil Medicine, 27th ed. Chapter 311.
  2. Harrison TR. Aspergillosis. Harrison's Principles of Internal Medicine, 22nd ed. Chapter 223.
  3. Morrissey CO, Kim HY, Duong TN, et al. Aspergillus fumigatus - a systematic review to inform the WHO priority list of fungal pathogens. Med Mycol. 2024. [PMID: 38935907]
  4. Gu Q, Chen Y, Ding P, et al. Antifungal treatment regimens as primary therapy for invasive aspergillosis: a systematic review and network meta-analysis. Drugs. 2026. [PMID: 42012594]
  5. Chen X, Zhi H, Wang X, et al. Efficacy of biologics in patients with allergic bronchopulmonary aspergillosis: a systematic review and meta-analysis. Lung. 2024. [PMID: 38898129]
  6. Swain S, Ajayababu A, Chowdhury S, et al. Epidemiology of triazole resistant Aspergillus fumigatus in Asia: a systematic review and meta-analysis. Mycoses. 2025. [PMID: 40792442]
  7. Song Y, Verweij PE, Buil JB, et al. Analysis of susceptibility and drug resistance of antifungal agents in aspergillosis and mucormycosis patients: a systematic review. Mycoses. 2025. [PMID: 41108579]
  8. Koulenti D, Paramythiotou E, Almyroudi MP. Severe mold fungal infections in critically ill patients with COVID-19. Future Microbiol. 2024. [PMID: 38700287]
  9. Red Book 2021: Report of the Committee on Infectious Diseases, 32nd ed. AAP. Aspergillosis chapter.
  10. Murray & Nadel's Textbook of Respiratory Medicine, 7th ed. Chapters 56 and fungal pleural disease.

Make a ppt

Reading File
Reading File
Reading File
Running Command

mkdir -p /tmp/workspace/aspergillosis-ppt

Writing File

~/aspergillosis-ppt/build_ppt.py

from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from io import BytesIO

# ── Palette ──────────────────────────────────────────────
DARK_TEAL   = RGBColor(0x00, 0x5F, 0x73)   # main header bg
MID_TEAL    = RGBColor(0x0A, 0x93, 0x96)   # accent bar
LIGHT_TEAL  = RGBColor(0x94, 0xD2, 0xBD)   # light accent
ORANGE      = RGBColor(0xEE, 0x9B, 0x00)   # highlight
OFF_WHITE   = RGBColor(0xF5, 0xF5, 0xF0)   # slide background
WHITE       = RGBColor(0xFF, 0xFF, 0xFF)
DARK_TEXT   = RGBColor(0x1C, 0x1C, 0x1C)
MID_TEXT    = RGBColor(0x3A, 0x3A, 0x4A)
GRAY_LINE   = RGBColor(0xCC, 0xCC, 0xCC)
LIGHT_BG    = RGBColor(0xE8, 0xF4, 0xF4)   # table row alt

prs = Presentation()
prs.slide_width  = Inches(13.333)
prs.slide_height = Inches(7.5)

blank = prs.slide_layouts[6]
title_layout = prs.slide_layouts[0]   # Title Slide
body_layout  = prs.slide_layouts[1]   # Title + Content

# ─────────────────────────────────────────────────────────
# helpers
# ─────────────────────────────────────────────────────────
def bg(slide, color=OFF_WHITE):
    """Solid background rectangle behind everything."""
    shp = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                                 0, 0,
                                 prs.slide_width, prs.slide_height)
    shp.fill.solid(); shp.fill.fore_color.rgb = color
    shp.line.fill.background()
    shp.shadow.inherit = False
    return shp

def header_bar(slide, title_text, subtitle_text=""):
    """Dark teal header spanning the top of the slide."""
    bar = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                                 0, 0,
                                 prs.slide_width, Inches(1.25))
    bar.fill.solid(); bar.fill.fore_color.rgb = DARK_TEAL
    bar.line.fill.background(); bar.shadow.inherit = False

    # accent left stripe
    stripe = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                                    0, 0, Inches(0.18), Inches(1.25))
    stripe.fill.solid(); stripe.fill.fore_color.rgb = ORANGE
    stripe.line.fill.background(); stripe.shadow.inherit = False

    tb = slide.shapes.add_textbox(Inches(0.3), Inches(0.0),
                                  Inches(12.8), Inches(1.25))
    tf = tb.text_frame; tf.word_wrap = True
    tf.margin_left = Inches(0.12); tf.margin_top = 0
    tf.margin_right = 0; tf.margin_bottom = 0
    tf.vertical_anchor = MSO_ANCHOR.MIDDLE

    p = tf.paragraphs[0]
    p.text = title_text
    r = p.runs[0]
    r.font.name = "Calibri"; r.font.size = Pt(26)
    r.font.bold = True; r.font.color.rgb = WHITE

    if subtitle_text:
        p2 = tf.add_paragraph(); p2.text = subtitle_text
        r2 = p2.runs[0]
        r2.font.name = "Calibri"; r2.font.size = Pt(13)
        r2.font.bold = False; r2.font.color.rgb = LIGHT_TEAL

def body_tb(slide, text_lines, x, y, w, h, font_size=15,
            bold_first=False, color=DARK_TEXT, line_spacing=None):
    """Multi-line text box; text_lines = list of (text, level, bold)."""
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame; tf.word_wrap = True
    tf.margin_left = Inches(0.05); tf.margin_right = Inches(0.05)
    tf.margin_top = Inches(0.05); tf.margin_bottom = 0

    for i, item in enumerate(text_lines):
        if isinstance(item, str):
            text, level, bold = item, 0, False
        else:
            text, level, bold = item

        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = text
        p.level = level
        if line_spacing:
            from pptx.util import Pt as _Pt
            from pptx.oxml.ns import qn
            from lxml import etree
            pPr = p._pPr if p._pPr is not None else p._p.get_or_add_pPr()
            lnSpc = etree.SubElement(pPr, qn('a:lnSpc'))
            spcPts = etree.SubElement(lnSpc, qn('a:spcPts'))
            spcPts.set('val', str(int(line_spacing * 100)))
        r = p.runs[0]
        r.font.name = "Calibri"; r.font.size = Pt(font_size)
        r.font.bold = bold or (bold_first and i == 0)
        r.font.color.rgb = color
    return tb

def accent_box(slide, x, y, w, h, fill=LIGHT_BG, border=MID_TEAL, radius=True):
    shape_type = MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE
    shp = slide.shapes.add_shape(shape_type, x, y, w, h)
    shp.fill.solid(); shp.fill.fore_color.rgb = fill
    shp.line.color.rgb = border; shp.line.width = Pt(1.2)
    shp.shadow.inherit = False
    return shp

def footer(slide, text="Literature Review on Aspergillosis | Orris Medical"):
    line = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                                  0, Inches(7.15),
                                  prs.slide_width, Inches(0.35))
    line.fill.solid(); line.fill.fore_color.rgb = DARK_TEAL
    line.line.fill.background(); line.shadow.inherit = False
    tb = slide.shapes.add_textbox(Inches(0.2), Inches(7.15),
                                  Inches(13.0), Inches(0.35))
    tf = tb.text_frame
    tf.margin_top = 0; tf.margin_bottom = 0
    tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = text; p.alignment = PP_ALIGN.CENTER
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(9)
    r.font.color.rgb = LIGHT_TEAL

# ─────────────────────────────────────────────────────────
# SLIDE 1 – Title slide
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s, DARK_TEAL)

# decorative gradient band
band = s.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                          0, Inches(4.8), prs.slide_width, Inches(2.35))
band.fill.solid(); band.fill.fore_color.rgb = RGBColor(0x00, 0x40, 0x50)
band.line.fill.background(); band.shadow.inherit = False

accent = s.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                             0, Inches(4.8), Inches(0.35), Inches(2.35))
accent.fill.solid(); accent.fill.fore_color.rgb = ORANGE
accent.line.fill.background(); accent.shadow.inherit = False

# Title
tb = s.shapes.add_textbox(Inches(0.6), Inches(1.4), Inches(12.0), Inches(2.0))
tf = tb.text_frame; tf.word_wrap = True
p = tf.paragraphs[0]; p.text = "ASPERGILLOSIS"
p.alignment = PP_ALIGN.LEFT
r = p.runs[0]; r.font.name = "Calibri Light"; r.font.size = Pt(60)
r.font.bold = True; r.font.color.rgb = WHITE

# Subtitle
tb2 = s.shapes.add_textbox(Inches(0.6), Inches(3.3), Inches(11), Inches(1.2))
tf2 = tb2.text_frame; tf2.word_wrap = True
p2 = tf2.paragraphs[0]
p2.text = "A Comprehensive Literature Review"
r2 = p2.runs[0]; r2.font.name = "Calibri"; r2.font.size = Pt(26)
r2.font.color.rgb = LIGHT_TEAL

# Byline
tb3 = s.shapes.add_textbox(Inches(0.6), Inches(5.1), Inches(11), Inches(0.7))
tf3 = tb3.text_frame
p3 = tf3.paragraphs[0]
p3.text = "Microbiology | Infectious Disease | Clinical Management | Antifungal Resistance"
r3 = p3.runs[0]; r3.font.name = "Calibri"; r3.font.size = Pt(14)
r3.font.color.rgb = RGBColor(0xAA, 0xDD, 0xDD)

tb4 = s.shapes.add_textbox(Inches(0.6), Inches(5.8), Inches(11), Inches(0.5))
tf4 = tb4.text_frame
p4 = tf4.paragraphs[0]; p4.text = "July 2026"
r4 = p4.runs[0]; r4.font.name = "Calibri"; r4.font.size = Pt(13)
r4.font.color.rgb = RGBColor(0x88, 0xBB, 0xBB)

# ─────────────────────────────────────────────────────────
# SLIDE 2 – Table of Contents
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Overview", "Contents of this presentation")

sections = [
    ("1", "Introduction & Microbiology"),
    ("2", "Epidemiology & Risk Factors"),
    ("3", "Pathogenesis"),
    ("4", "Clinical Manifestations"),
    ("5", "Diagnosis"),
    ("6", "Treatment"),
    ("7", "Antifungal Resistance"),
    ("8", "Special Topics & Prognosis"),
]

cols = [sections[:4], sections[4:]]
col_x = [Inches(0.8), Inches(7.0)]

for ci, col in enumerate(cols):
    for ri, (num, title) in enumerate(col):
        y = Inches(1.55) + ri * Inches(1.2)
        # number circle
        circ = s.shapes.add_shape(MSO_SHAPE.OVAL,
                                  col_x[ci], y, Inches(0.65), Inches(0.65))
        circ.fill.solid(); circ.fill.fore_color.rgb = DARK_TEAL
        circ.line.fill.background(); circ.shadow.inherit = False
        ct = circ.text_frame
        ct.vertical_anchor = MSO_ANCHOR.MIDDLE
        cp = ct.paragraphs[0]; cp.text = num; cp.alignment = PP_ALIGN.CENTER
        cr = cp.runs[0]; cr.font.name = "Calibri"; cr.font.size = Pt(16)
        cr.font.bold = True; cr.font.color.rgb = WHITE

        tb = s.shapes.add_textbox(col_x[ci] + Inches(0.78), y + Inches(0.03),
                                  Inches(5.5), Inches(0.62))
        tf = tb.text_frame; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
        tf.margin_top = 0; tf.margin_bottom = 0
        p = tf.paragraphs[0]; p.text = title
        r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(16)
        r.font.bold = False; r.font.color.rgb = MID_TEXT

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 3 – Introduction & Microbiology
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Introduction & Microbiology", "The Genus Aspergillus")

# Left column – intro text
accent_box(s, Inches(0.35), Inches(1.4), Inches(6.1), Inches(5.55), LIGHT_BG, MID_TEAL)
body_tb(s, [
    ("What is Aspergillosis?", 0, True),
    ("Spectrum of diseases caused by filamentous fungi (molds) of genus Aspergillus", 0, False),
    ("Conidia (spores) are inhaled continuously by all humans", 0, False),
    ("Disease outcome depends primarily on host immune status", 0, False),
    ("", 0, False),
    ("Key Species", 0, True),
    ("A. fumigatus  — most common pathogen (>90% of IA)", 0, False),
    ("A. flavus  — sinusitis, superficial infections", 0, False),
    ("A. terreus  — intrinsically resistant to amphotericin B", 0, False),
    ("A. niger  — ear infections, occasionally invasive", 0, False),
], Inches(0.5), Inches(1.5), Inches(5.8), Inches(5.3), font_size=14)

# Right column – morphology & virulence
accent_box(s, Inches(6.85), Inches(1.4), Inches(6.15), Inches(2.55), LIGHT_BG, MID_TEAL)
body_tb(s, [
    ("Morphology in Tissue", 0, True),
    ("Dichotomously branching septate hyphae at ~45°", 0, False),
    ("Differentiates Aspergillus from Mucorales (aseptate)", 0, False),
    ("Grows at temperatures up to 40–50°C", 0, False),
    ("Small conidia (2–3 µm) reach deep alveoli", 0, False),
], Inches(7.0), Inches(1.5), Inches(5.85), Inches(2.4), font_size=14)

accent_box(s, Inches(6.85), Inches(4.15), Inches(6.15), Inches(2.8), LIGHT_BG, MID_TEAL)
body_tb(s, [
    ("Virulence Factors", 0, True),
    ("Thermotolerance at physiologic temperatures", 0, False),
    ("Galactomannan & β-glucan: immune evasion", 0, False),
    ("Gliotoxin: suppresses oxidative burst, induces apoptosis", 0, False),
    ("Angioinvasion: vascular penetration → infarction", 0, False),
    ("Hematogenous dissemination to brain, kidney, heart", 0, False),
], Inches(7.0), Inches(4.25), Inches(5.85), Inches(2.6), font_size=14)

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 4 – Epidemiology & Risk Factors
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Epidemiology & Risk Factors")

# Global burden boxes
stats = [
    ("3 million", "affected by Chronic\nPulmonary Aspergillosis (CPA)"),
    ("4.8 million", "affected by ABPA\nglobally"),
    ("1–3%", "of asthma patients\nhave ABPA"),
    ("31–36%", "6-week mortality\nin Invasive Aspergillosis"),
]
for i, (num, label) in enumerate(stats):
    bx = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
                            Inches(0.3 + i * 3.2), Inches(1.4),
                            Inches(3.0), Inches(1.7))
    bx.fill.solid(); bx.fill.fore_color.rgb = DARK_TEAL
    bx.line.fill.background(); bx.shadow.inherit = False

    tb = s.shapes.add_textbox(Inches(0.35 + i * 3.2), Inches(1.45),
                              Inches(2.9), Inches(0.75))
    tf = tb.text_frame; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = num; p.alignment = PP_ALIGN.CENTER
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(30)
    r.font.bold = True; r.font.color.rgb = ORANGE

    tb2 = s.shapes.add_textbox(Inches(0.35 + i * 3.2), Inches(2.2),
                               Inches(2.9), Inches(0.8))
    tf2 = tb2.text_frame; tf2.word_wrap = True
    tf2.vertical_anchor = MSO_ANCHOR.MIDDLE
    p2 = tf2.paragraphs[0]; p2.text = label; p2.alignment = PP_ALIGN.CENTER
    r2 = p2.runs[0]; r2.font.name = "Calibri"; r2.font.size = Pt(11)
    r2.font.color.rgb = LIGHT_TEAL

# Risk factor section
accent_box(s, Inches(0.3), Inches(3.3), Inches(12.75), Inches(3.5), LIGHT_BG, MID_TEAL, False)

tb = s.shapes.add_textbox(Inches(0.45), Inches(3.35), Inches(4.0), Inches(0.45))
tf = tb.text_frame
p = tf.paragraphs[0]; p.text = "Major Risk Factors for Invasive Aspergillosis"
r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(14); r.font.bold = True
r.font.color.rgb = DARK_TEAL

risks = [
    ("Prolonged neutropenia (>10 days, ANC <500/µL)", "Hematologic malignancy (acute leukemia)"),
    ("Hematopoietic stem cell transplantation (HSCT)", "Graft-versus-host disease (GVHD)"),
    ("Solid organ transplant (lung, heart, liver)", "High-dose corticosteroids"),
    ("Chronic granulomatous disease (CGD)", "COVID-19 / Influenza (CAPA, IAPA)"),
    ("Advanced HIV (CD4 <50)", "PTX3 gene haplotype h2/h2 (genetic risk)"),
]
for ri, (left, right) in enumerate(risks):
    y = Inches(3.85) + ri * Inches(0.48)
    # dot left
    dot = s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(0.5), y + Inches(0.1),
                             Inches(0.18), Inches(0.18))
    dot.fill.solid(); dot.fill.fore_color.rgb = ORANGE
    dot.line.fill.background(); dot.shadow.inherit = False
    body_tb(s, [(left, 0, False)], Inches(0.75), y, Inches(5.5), Inches(0.45), font_size=13)
    # dot right
    dot2 = s.shapes.add_shape(MSO_SHAPE.OVAL, Inches(6.7), y + Inches(0.1),
                              Inches(0.18), Inches(0.18))
    dot2.fill.solid(); dot2.fill.fore_color.rgb = ORANGE
    dot2.line.fill.background(); dot2.shadow.inherit = False
    body_tb(s, [(right, 0, False)], Inches(6.95), y, Inches(5.8), Inches(0.45), font_size=13)

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 5 – Pathogenesis
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Pathogenesis", "From inhaled conidia to invasive disease")

steps = [
    (DARK_TEAL, "1", "Inhalation", "Conidia (2–3 µm) inhaled; deposit in\nalveolar spaces & bronchioles"),
    (MID_TEAL,  "2", "Immune Check", "Alveolar macrophages engulf conidia.\nNeutrophils kill germinating hyphae."),
    (ORANGE,    "3", "Germination\n(immune failure)", "In neutropenia/immunosuppression,\nconidia germinate to hyphae"),
    (RGBColor(0xC5, 0x44, 0x00), "4", "Angioinvasion", "Hyphae penetrate vessel walls →\nthrombosis, hemorrhagic infarction"),
    (RGBColor(0x80, 0x20, 0x00), "5", "Dissemination", "Hematogenous spread to brain, kidney,\nheart, liver, GI tract"),
]

for i, (col, num, title, desc) in enumerate(steps):
    x = Inches(0.3 + i * 2.6)
    # box
    bx = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
                            x, Inches(1.45), Inches(2.4), Inches(4.5))
    bx.fill.solid(); bx.fill.fore_color.rgb = col
    bx.line.fill.background(); bx.shadow.inherit = False

    # number
    tb = s.shapes.add_textbox(x, Inches(1.5), Inches(2.4), Inches(0.7))
    tf = tb.text_frame; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = num; p.alignment = PP_ALIGN.CENTER
    r = p.runs[0]; r.font.name = "Calibri Light"; r.font.size = Pt(36)
    r.font.bold = True; r.font.color.rgb = WHITE

    # title
    tb2 = s.shapes.add_textbox(x + Inches(0.1), Inches(2.25), Inches(2.2), Inches(0.65))
    tf2 = tb2.text_frame; tf2.word_wrap = True; tf2.vertical_anchor = MSO_ANCHOR.MIDDLE
    p2 = tf2.paragraphs[0]; p2.text = title; p2.alignment = PP_ALIGN.CENTER
    r2 = p2.runs[0]; r2.font.name = "Calibri"; r2.font.size = Pt(14)
    r2.font.bold = True; r2.font.color.rgb = WHITE

    # desc
    tb3 = s.shapes.add_textbox(x + Inches(0.1), Inches(3.0), Inches(2.2), Inches(2.7))
    tf3 = tb3.text_frame; tf3.word_wrap = True
    p3 = tf3.paragraphs[0]; p3.text = desc; p3.alignment = PP_ALIGN.CENTER
    r3 = p3.runs[0]; r3.font.name = "Calibri"; r3.font.size = Pt(12)
    r3.font.color.rgb = RGBColor(0xF0, 0xF0, 0xF0)

    # arrow (except last)
    if i < 4:
        arr = s.shapes.add_shape(MSO_SHAPE.RIGHT_ARROW,
                                 x + Inches(2.42), Inches(3.4),
                                 Inches(0.14), Inches(0.38))
        arr.fill.solid(); arr.fill.fore_color.rgb = GRAY_LINE
        arr.line.fill.background(); arr.shadow.inherit = False

# ABPA note
accent_box(s, Inches(0.3), Inches(6.1), Inches(12.75), Inches(0.95), LIGHT_BG, MID_TEAL, False)
body_tb(s, [
    ("ABPA / Allergic pathway: Th2-skewed hypersensitivity in sensitized hosts (asthma, CF) "
     "→ IgE-mediated mast cell degranulation → bronchial inflammation, mucus plugging, proximal bronchiectasis",
     0, False)
], Inches(0.45), Inches(6.15), Inches(12.5), Inches(0.85), font_size=13)

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 6 – Clinical Manifestations (table)
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Clinical Manifestations", "Disease spectrum by host immune status")

rows = [
    ("Category", "Clinical Forms", "Typical Host", "Key Features", True),
    ("Invasive\nAspergillosis (IA)", "IPA, sinusitis,\ntracheobronchitis,\ncerebral, endocarditis",
     "Neutropenic, HSCT,\nSOT, CGD", "Fever, cough, pleurisy,\nhemoptysis; halo sign on CT", False),
    ("Aspergilloma", "Single fungal ball\nin cavity", "Immunocompetent\nwith structural lung Dz",
     "Asymptomatic or hemoptysis;\nair-crescent sign on CT", False),
    ("Chronic Pulmonary\nAspergillosis (CPA)", "CNPA, CCPA\n(± aspergilloma)", "Mild immune defects,\nCOPD, TB sequela",
     "Weight loss, cough, low-grade\nfever over months–years", False),
    ("ABPA", "Allergic\nbronchopulmonary\naspergillosis", "Asthma, cystic fibrosis",
     "IgE ≥1000 IU/mL, eosinophilia,\nproximal bronchiectasis", False),
    ("Allergic Sinusitis /\nHypersensitivity\nPneumonitis", "Extrinsic allergic alveolitis,\nallergic fungal sinusitis",
     "Atopic individuals", "Recurrent wheeze, nasal polyps,\nmucosal eosinophilia", False),
]

col_w = [Inches(2.2), Inches(3.0), Inches(2.5), Inches(4.45)]
col_x_pos = [Inches(0.35), Inches(2.6), Inches(5.65), Inches(8.2)]
row_h = Inches(0.88)
start_y = Inches(1.38)

for ri, row_data in enumerate(rows):
    *cells, is_header = row_data
    y = start_y + ri * row_h
    for ci, (cell_text, cw, cx) in enumerate(zip(cells, col_w, col_x_pos)):
        fill_col = DARK_TEAL if is_header else (LIGHT_BG if ri % 2 == 0 else WHITE)
        bx = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, cx, y, cw, row_h)
        bx.fill.solid(); bx.fill.fore_color.rgb = fill_col
        bx.line.color.rgb = GRAY_LINE; bx.line.width = Pt(0.5)
        bx.shadow.inherit = False

        tb = s.shapes.add_textbox(cx + Inches(0.08), y + Inches(0.04),
                                  cw - Inches(0.12), row_h - Inches(0.08))
        tf = tb.text_frame; tf.word_wrap = True
        tf.vertical_anchor = MSO_ANCHOR.MIDDLE
        tf.margin_top = 0; tf.margin_bottom = 0; tf.margin_left = Inches(0.05)
        p = tf.paragraphs[0]; p.text = cell_text
        r = p.runs[0]; r.font.name = "Calibri"
        r.font.size = Pt(12 if is_header else 11)
        r.font.bold = is_header
        r.font.color.rgb = WHITE if is_header else DARK_TEXT

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 7 – Diagnosis
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Diagnosis", "Integrated multimodal approach")

diag_items = [
    (MID_TEAL,  "CT Thorax",       "Halo sign (hemorrhagic infarction around nodule)\nAir-crescent sign (late)\nNodules, wedge infarcts, cavitation"),
    (DARK_TEAL, "Galactomannan",   "Cell wall polysaccharide released by hyphae\nSensitivity ~60–70% (serum); higher in BAL\nSerial monitoring tracks treatment response"),
    (MID_TEAL,  "β-D-Glucan",      "Pan-fungal marker (Aspergillus, Candida, PCP)\nNot specific to Aspergillus\nReduced specificity: dialysis, antibiotics"),
    (DARK_TEAL, "Aspergillus PCR", "High sensitivity; included in EORTC/MSGERC criteria\nEspecially useful during azole prophylaxis\nLaboratory standardization still evolving"),
    (MID_TEAL,  "Culture &\nHistopathology", "Gold standard for species ID & susceptibility testing\nBranching septate hyphae in tissue (45° angles)\nBAL, biopsy, needle aspirate"),
    (DARK_TEAL, "Bronchoscopy\n& BAL", "BAL: GM, β-glucan, culture, cytology, PCR\nEssential in ventilated patients\nKeystone when surgical biopsy not feasible"),
]

for i, (col, title, desc) in enumerate(diag_items):
    row = i // 3; col_i = i % 3
    x = Inches(0.35 + col_i * 4.33)
    y = Inches(1.42 + row * 2.7)

    bx = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, y, Inches(4.1), Inches(2.55))
    bx.fill.solid(); bx.fill.fore_color.rgb = LIGHT_BG
    bx.line.color.rgb = col; bx.line.width = Pt(2)
    bx.shadow.inherit = False

    # color top bar
    top = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, x, y, Inches(4.1), Inches(0.42))
    top.fill.solid(); top.fill.fore_color.rgb = col
    top.line.fill.background(); top.shadow.inherit = False

    tb = s.shapes.add_textbox(x + Inches(0.1), y + Inches(0.04), Inches(3.9), Inches(0.38))
    tf = tb.text_frame; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = title
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(13)
    r.font.bold = True; r.font.color.rgb = WHITE

    tb2 = s.shapes.add_textbox(x + Inches(0.12), y + Inches(0.5), Inches(3.88), Inches(2.0))
    tf2 = tb2.text_frame; tf2.word_wrap = True
    lines = desc.split('\n')
    for li, line in enumerate(lines):
        p2 = tf2.paragraphs[0] if li == 0 else tf2.add_paragraph()
        p2.text = line
        r2 = p2.runs[0]; r2.font.name = "Calibri"; r2.font.size = Pt(12)
        r2.font.color.rgb = DARK_TEXT

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 8 – Treatment
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Treatment of Aspergillosis", "Antifungal therapy, immune reconstitution & surgery")

# Triad boxes
triad = [
    (DARK_TEAL, "1. Antifungal\nTherapy", "Voriconazole (first-line)\nIsavuconazole (alternative, better tolerated)\nPosaconazole (alternative)\nL-AmB (if azoles contraindicated)"),
    (MID_TEAL,  "2. Immune\nReconstitution", "Reduce corticosteroids\nTreat underlying neutropenia\nManage GVHD\nAntiretroviral therapy (HIV)"),
    (ORANGE,    "3. Surgical\nIntervention", "Localized disease / hemoptysis\nOsteomyelitis / diskitis\nEndocarditis\nPleural aspergillosis"),
]
for i, (col, title, desc) in enumerate(triad):
    x = Inches(0.3 + i * 4.35)
    bx = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, Inches(1.4), Inches(4.1), Inches(2.8))
    bx.fill.solid(); bx.fill.fore_color.rgb = col
    bx.line.fill.background(); bx.shadow.inherit = False
    tb = s.shapes.add_textbox(x + Inches(0.15), Inches(1.48), Inches(3.85), Inches(0.65))
    tf = tb.text_frame; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = title; p.alignment = PP_ALIGN.CENTER
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(15); r.font.bold = True
    r.font.color.rgb = WHITE
    tb2 = s.shapes.add_textbox(x + Inches(0.15), Inches(2.15), Inches(3.85), Inches(1.9))
    tf2 = tb2.text_frame; tf2.word_wrap = True
    lines = desc.split('\n')
    for li, line in enumerate(lines):
        p2 = tf2.paragraphs[0] if li == 0 else tf2.add_paragraph()
        p2.text = line; p2.alignment = PP_ALIGN.CENTER
        r2 = p2.runs[0]; r2.font.name = "Calibri"; r2.font.size = Pt(12)
        r2.font.color.rgb = WHITE

# Bottom section: additional details
accent_box(s, Inches(0.3), Inches(4.45), Inches(12.75), Inches(2.7), LIGHT_BG, MID_TEAL, False)

cols_data = [
    ("Dosing & Monitoring", [
        "Voriconazole trough: 2–6 µg/mL",
        "High interpatient variability (CYP2C19)",
        "TDM essential for efficacy & toxicity",
        "Duration: min 6–12 weeks (individualized)",
    ]),
    ("ABPA Treatment", [
        "Oral corticosteroids (acute flares)",
        "Itraconazole / azoles (reduce Aspergillus load)",
        "Omalizumab: reduces exacerbations & IgE",
        "Dupilumab / mepolizumab (emerging)",
    ]),
    ("Prophylaxis (high-risk)", [
        "Posaconazole (extended-release preferred)",
        "Voriconazole or itraconazole alternatives",
        "HSCT, acute leukemia induction",
        "Lung/heart transplant recipients",
    ]),
]
for ci, (col_title, bullets) in enumerate(cols_data):
    cx = Inches(0.45 + ci * 4.3)
    tb = s.shapes.add_textbox(cx, Inches(4.5), Inches(4.1), Inches(0.42))
    tf = tb.text_frame
    p = tf.paragraphs[0]; p.text = col_title
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(13); r.font.bold = True
    r.font.color.rgb = DARK_TEAL
    for bi, bullet in enumerate(bullets):
        dot = s.shapes.add_shape(MSO_SHAPE.OVAL,
                                 cx, Inches(5.02 + bi * 0.48) + Inches(0.08),
                                 Inches(0.14), Inches(0.14))
        dot.fill.solid(); dot.fill.fore_color.rgb = MID_TEAL
        dot.line.fill.background(); dot.shadow.inherit = False
        body_tb(s, [(bullet, 0, False)],
                cx + Inches(0.22), Inches(5.02 + bi * 0.48),
                Inches(3.8), Inches(0.44), font_size=12)

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 9 – Antifungal Resistance
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Antifungal Resistance", "A growing global threat — azole-resistant A. fumigatus")

# Left panel
accent_box(s, Inches(0.3), Inches(1.4), Inches(6.1), Inches(5.55), LIGHT_BG, MID_TEAL)
body_tb(s, [
    ("Resistance Mechanisms", 0, True),
    ("TR34/L98H cyp51A mutation — most prevalent globally", 0, False),
    ("TR46/Y121F/T289A — second most common", 0, False),
    ("Environmental route: agricultural azole fungicide use", 0, False),
    ("'One Health' issue: soil → air → humans", 0, False),
    ("", 0, False),
    ("Clinical Impact", 0, True),
    ("Cross-resistance: 85% VOR-R also ITR-R", 0, False),
    ("92.8% VOR-R also POS-R", 0, False),
    ("100% VOR-R also ISA-R", 0, False),
    ("53.5% of TRAF are pan-triazole resistant", 0, False),
    ("", 0, False),
    ("Management in Resistant Cases", 0, True),
    ("Empiric: voriconazole + echinocandin", 0, False),
    ("Liposomal amphotericin B (non-azole)", 0, False),
    ("Routine susceptibility testing essential", 0, False),
], Inches(0.45), Inches(1.5), Inches(5.8), Inches(5.3), font_size=13)

# Right panel: data cards
right_data = [
    (DARK_TEAL, "VOR susceptibility: Netherlands", "22.2%", "Vs. 94.7–99.7%\nin Asia/UK/Brazil"),
    (MID_TEAL, "TRAF rate: clinical isolates\n(Asia, meta-analysis 2025)", "4%", "(95% CI 3–6%)"),
    (DARK_TEAL, "TRAF rate: environmental\nisolates (Asia)", "14%", "(95% CI 9–20%)"),
    (MID_TEAL, "12-wk mortality VOR-R vs.\nVOR-susceptible IA", "54.5%\nvs 30.7%", "p = 0.035"),
]
for ri, (col, label, stat, note) in enumerate(right_data):
    y = Inches(1.4 + ri * 1.42)
    bx = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
                            Inches(6.7), y, Inches(6.28), Inches(1.32))
    bx.fill.solid(); bx.fill.fore_color.rgb = col
    bx.line.fill.background(); bx.shadow.inherit = False

    tb = s.shapes.add_textbox(Inches(6.85), y + Inches(0.07), Inches(3.8), Inches(0.55))
    tf = tb.text_frame; tf.word_wrap = True; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = label
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(12); r.font.color.rgb = LIGHT_TEAL

    tb2 = s.shapes.add_textbox(Inches(10.65), y + Inches(0.07), Inches(2.0), Inches(0.7))
    tf2 = tb2.text_frame; tf2.vertical_anchor = MSO_ANCHOR.MIDDLE
    p2 = tf2.paragraphs[0]; p2.text = stat; p2.alignment = PP_ALIGN.RIGHT
    r2 = p2.runs[0]; r2.font.name = "Calibri"; r2.font.size = Pt(22)
    r2.font.bold = True; r2.font.color.rgb = ORANGE

    tb3 = s.shapes.add_textbox(Inches(6.85), y + Inches(0.75), Inches(5.8), Inches(0.45))
    tf3 = tb3.text_frame; tf3.vertical_anchor = MSO_ANCHOR.MIDDLE
    p3 = tf3.paragraphs[0]; p3.text = note
    r3 = p3.runs[0]; r3.font.name = "Calibri"; r3.font.size = Pt(11)
    r3.font.color.rgb = WHITE

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 10 – Special Topics & Prognosis
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Special Topics & Prognosis")

topics = [
    (MID_TEAL, "COVID-19-Associated\nPulmonary Aspergillosis (CAPA)",
     "Critically ill, ventilated COVID-19 patients\n"
     "Corticosteroids + IL-6 inhibitors → permissive host\n"
     "Atypical CT; lower GM sensitivity (non-neutropenic)\n"
     "Antifungal therapy same as standard IA"),
    (DARK_TEAL, "Pediatric Aspergillosis",
     "Classic halo/air-crescent signs often absent in children\n"
     "Voriconazole DOC; amphotericin B for neonates\n"
     "Posaconazole PKs not fully established in young children\n"
     "TDM especially critical — high CYP2C19 variability"),
    (MID_TEAL, "Nosocomial & Occupational\nRisk",
     "Outbreaks linked to hospital construction/renovation\n"
     "Contaminated HVAC and water systems\n"
     "HEPA filtration + positive-pressure rooms critical\n"
     "Immunocompromised wards need strict air standards"),
]

for i, (col, title, desc) in enumerate(topics):
    x = Inches(0.3 + i * 4.35)
    bx = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE, x, Inches(1.4), Inches(4.1), Inches(3.6))
    bx.fill.solid(); bx.fill.fore_color.rgb = LIGHT_BG
    bx.line.color.rgb = col; bx.line.width = Pt(2)
    bx.shadow.inherit = False
    top = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, x, Inches(1.4), Inches(4.1), Inches(0.5))
    top.fill.solid(); top.fill.fore_color.rgb = col
    top.line.fill.background(); top.shadow.inherit = False
    tb = s.shapes.add_textbox(x + Inches(0.1), Inches(1.44), Inches(3.9), Inches(0.45))
    tf = tb.text_frame; tf.vertical_anchor = MSO_ANCHOR.MIDDLE
    p = tf.paragraphs[0]; p.text = title; p.alignment = PP_ALIGN.CENTER
    r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(12)
    r.font.bold = True; r.font.color.rgb = WHITE
    lines = desc.split('\n')
    for li, line in enumerate(lines):
        dot = s.shapes.add_shape(MSO_SHAPE.OVAL,
                                 x + Inches(0.15),
                                 Inches(2.05 + li * 0.68) + Inches(0.08),
                                 Inches(0.14), Inches(0.14))
        dot.fill.solid(); dot.fill.fore_color.rgb = col
        dot.line.fill.background(); dot.shadow.inherit = False
        body_tb(s, [(line, 0, False)],
                x + Inches(0.36), Inches(2.05 + li * 0.68),
                Inches(3.6), Inches(0.62), font_size=12)

# Prognosis section
accent_box(s, Inches(0.3), Inches(5.2), Inches(12.75), Inches(1.95), LIGHT_BG, DARK_TEAL, False)
tb = s.shapes.add_textbox(Inches(0.45), Inches(5.26), Inches(4.0), Inches(0.42))
tf = tb.text_frame
p = tf.paragraphs[0]; p.text = "Prognosis"
r = p.runs[0]; r.font.name = "Calibri"; r.font.size = Pt(14); r.font.bold = True
r.font.color.rgb = DARK_TEAL

prog = [
    ("Invasive aspergillosis", "6-week mortality 31–36%; up to 65% in hematologic malignancy"),
    ("Aspergilloma", "Excellent if no hemoptysis; surgery for life-threatening bleeding"),
    ("ABPA", "Progressive fibrosis without treatment; good with corticosteroids ± azoles"),
    ("CPA", "20–40% 5-year mortality driven by underlying comorbidities"),
]
for pi, (form, outcome) in enumerate(prog):
    x_off = Inches(0.45 + pi * 3.2)
    body_tb(s, [(form, 0, True), (outcome, 0, False)],
            x_off, Inches(5.72), Inches(3.0), Inches(1.25), font_size=11)

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 11 – Key References
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s)
header_bar(s, "Key References")

refs = [
    "1. Walsh TJ, Patterson TF. Aspergillosis. Goldman-Cecil Medicine, 27th ed. Chapter 311.",
    "2. Harrison TR. Aspergillosis. Harrison's Principles of Internal Medicine, 22nd ed. Chapter 223.",
    "3. Murray & Nadel's Textbook of Respiratory Medicine, 7th ed.",
    "4. Red Book 2021: Report of the Committee on Infectious Diseases. AAP.",
    "5. Morrissey CO et al. Aspergillus fumigatus — WHO priority fungal pathogens review. Med Mycol. 2024. PMID: 38935907",
    "6. Gu Q et al. Antifungal treatment regimens for IA: systematic review & NMA. Drugs. 2026. PMID: 42012594",
    "7. Chen X et al. Efficacy of biologics in ABPA: systematic review & meta-analysis. Lung. 2024. PMID: 38898129",
    "8. Swain S et al. Epidemiology of triazole-resistant A. fumigatus in Asia. Mycoses. 2025. PMID: 40792442",
    "9. Song Y et al. Antifungal susceptibility & resistance in aspergillosis. Mycoses. 2025. PMID: 41108579",
    "10. Koulenti D et al. Severe mold infections in critically ill COVID-19 patients. Future Microbiol. 2024. PMID: 38700287",
]

for ri, ref in enumerate(refs):
    y = Inches(1.45) + ri * Inches(0.55)
    dot = s.shapes.add_shape(MSO_SHAPE.OVAL,
                             Inches(0.4), y + Inches(0.12),
                             Inches(0.16), Inches(0.16))
    dot.fill.solid(); dot.fill.fore_color.rgb = ORANGE
    dot.line.fill.background(); dot.shadow.inherit = False
    body_tb(s, [(ref, 0, False)],
            Inches(0.65), y, Inches(12.35), Inches(0.5), font_size=12)

# divider line
ln_shp = s.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                             Inches(0.35), Inches(1.35),
                             Inches(12.65), Inches(0.04))
ln_shp.fill.solid(); ln_shp.fill.fore_color.rgb = MID_TEAL
ln_shp.line.fill.background(); ln_shp.shadow.inherit = False

footer(s)

# ─────────────────────────────────────────────────────────
# SLIDE 12 – Thank you / Summary
# ─────────────────────────────────────────────────────────
s = prs.slides.add_slide(blank)
bg(s, DARK_TEAL)

band2 = s.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                           0, Inches(5.5), prs.slide_width, Inches(2.0))
band2.fill.solid(); band2.fill.fore_color.rgb = RGBColor(0x00, 0x3A, 0x4A)
band2.line.fill.background(); band2.shadow.inherit = False

accent3 = s.shapes.add_shape(MSO_SHAPE.RECTANGLE,
                             0, Inches(5.5), Inches(0.35), Inches(2.0))
accent3.fill.solid(); accent3.fill.fore_color.rgb = ORANGE
accent3.line.fill.background(); accent3.shadow.inherit = False

tb = s.shapes.add_textbox(Inches(0.6), Inches(1.2), Inches(12.0), Inches(1.2))
tf = tb.text_frame
p = tf.paragraphs[0]; p.text = "Key Takeaways"
r = p.runs[0]; r.font.name = "Calibri Light"; r.font.size = Pt(42)
r.font.bold = True; r.font.color.rgb = WHITE

takeaways = [
    "Aspergillus fumigatus causes the vast majority of invasive disease; outcome is determined primarily by host immune status.",
    "Diagnosis requires integration of CT imaging, galactomannan, β-glucan, PCR, culture, and histopathology.",
    "Voriconazole and isavuconazole are equivalent first-line therapies; isavuconazole has a more favorable safety profile.",
    "Triazole resistance (TR34/L98H) is an emerging global threat — especially via the environmental/agricultural route.",
    "Biologics (omalizumab, dupilumab, mepolizumab) are effective adjuncts in steroid-dependent ABPA.",
]
for i, t in enumerate(takeaways):
    dot = s.shapes.add_shape(MSO_SHAPE.OVAL,
                             Inches(0.6), Inches(2.55 + i * 0.54) + Inches(0.1),
                             Inches(0.16), Inches(0.16))
    dot.fill.solid(); dot.fill.fore_color.rgb = ORANGE
    dot.line.fill.background(); dot.shadow.inherit = False
    body_tb(s, [(t, 0, False)],
            Inches(0.88), Inches(2.55 + i * 0.54),
            Inches(11.85), Inches(0.5), font_size=13, color=LIGHT_TEAL)

# save
out_path = "/tmp/workspace/aspergillosis-ppt/Aspergillosis_Literature_Review.pptx"
from io import BytesIO
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
    f.write(buf.getvalue())
print(f"Saved: {out_path}")
Running Command

cd /tmp/workspace/aspergillosis-ppt && python build_ppt.py 2>&1

Editing File

~/aspergillosis-ppt/build_ppt.py

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

cd /tmp/workspace/aspergillosis-ppt && python build_ppt.py 2>&1

Running Command

ls -lh /tmp/workspace/aspergillosis-ppt/Aspergillosis_Literature_Review.pptx

Your presentation is ready - 12 slides, 16:9 widescreen, with a dark teal and orange colour scheme:

Aspergillosis Literature Review

Presentation · PPTX


Slide breakdown:
#Slide
1Title slide
2Table of Contents
3Introduction & Microbiology (species, morphology, virulence factors)
4Epidemiology & Risk Factors (global burden stats + risk factor grid)
5Pathogenesis (5-step visual flow: inhalation → dissemination)
6Clinical Manifestations (colour-coded table: IA, aspergilloma, CPA, ABPA, allergic sinusitis)
7Diagnosis (6 modality cards: CT, galactomannan, β-glucan, PCR, culture/histo, BAL)
8Treatment (triad boxes: antifungals, immune reconstitution, surgery + dosing/prophylaxis/ABPA columns)
9Antifungal Resistance (TR34/L98H mechanism + resistance rate data cards)
10Special Topics & Prognosis (CAPA, pediatrics, nosocomial + prognosis by form)
11Key References (10 textbook + PubMed citations)
12Key Takeaways
This is a shared conversation. Sign in to Orris to start your own chat.