Prepare a presentation ppt on the topic of subacute osteomalitis in the subject of orthopaedics that includes the definition clinical features pathogenesis investigations etiology risk factors and without management because management will be done by the other person

Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Finding Sources
Searching Images

subacute osteomyelitis Brodie abscess X-ray radiograph

**Imaging Modality:** Conventional Radiography (X-ray)
**Anatomical Region:** Right knee, lateral view

**Description:**
The image shows a lateral radiograph of the knee demonstrating a well-circumscribed, focal lytic lesion located within the inferior pole of the patella. The lesion is characterized by a radiolucent center with a subtle sclerotic margin. There is evidence of a minor periosteal reaction along the anterior cortex of the patella, accompanied by localized soft tissue swelling in the prepatellar and infrapatellar regions. The tibiofemoral joint space appears preserved, and no gross fractures or significant joint effusions are visualized.

**Pathology/Clinical Context:**
The radiographic appearance is consistent with a Brodie’s abscess, a form of subacute pyogenic osteomyelitis. Key diagnostic features include the localized lucency within the sesamoid bone and the associated inflammatory changes in the overlying soft tissue.

**Key Features for Retrieval:**
*   **Modality:** X-ray
*   **Anatomy:** Patella, knee joint
*   **Pathology:** Brodie’s abscess, subacute osteomyelitis, lytic bone lesion
*   **Radiologic Signs:** Focal lucency, periosteal reaction, soft tissue edema

**Imaging Modality:** Conventional Radiography (X-ray) **Anatomical Region:** Right knee, lateral view **Description:** The image shows a lateral radiograph of the knee demonstrating a well-circumscribed, focal lytic lesion located within the inferior pole of the patella. The lesion is characterized by a radiolucent center with a subtle sclerotic margin. There is evidence of a minor periosteal reaction along the anterior cortex of the patella, accompanied by localized soft tissue swelling in the prepatellar and infrapatellar regions. The tibiofemoral joint space appears preserved, and no gross fractures or significant joint effusions are visualized. **Pathology/Clinical Context:** The radiographic appearance is consistent with a Brodie’s abscess, a form of subacute pyogenic osteomyelitis. Key diagnostic features include the localized lucency within the sesamoid bone and the associated inflammatory changes in the overlying soft tissue. **Key Features for Retrieval:** * **Modality:** X-ray * **Anatomy:** Patella, knee joint * **Pathology:** Brodie’s abscess, subacute osteomyelitis, lytic bone lesion * **Radiologic Signs:** Focal lucency, periosteal reaction, soft tissue edema

Educational multi-modal imaging of a Brodie abscess in the proximal tibial metaphysis, illustrating subacute osteomyelitis. (A) AP plain radiograph shows a well-defined, oval radiolucent (osteolytic) lesion with a surrounding rim of reactive sclerosis. (B) Schematic illustration correlates the different tissue layers. (C) Axial T1-weighted MRI demonstrates the 'penumbra sign,' characterized by a central low-signal pus collection, a thin hyperintense inner rim of granulation tissue, and an outer hypointense ring of reactive bone sclerosis. (D) Coronal Fat-Sat T2-weighted MRI reveals the central abscess as hyperintense (pus), surrounded by extensive high-signal bone marrow edema in the metaphysis. These images highlight key diagnostic features for identifying intraosseous abscesses, specifically the role of MRI in detecting subtle granulation tissue and surrounding inflammatory changes that distinguish subacute infection from other bone lesions like osteoid osteoma or Langerhans cell histiocytosis.

Educational multi-modal imaging of a Brodie abscess in the proximal tibial metaphysis, illustrating subacute osteomyelitis. (A) AP plain radiograph shows a well-defined, oval radiolucent (osteolytic) lesion with a surrounding rim of reactive sclerosis. (B) Schematic illustration correlates the different tissue layers. (C) Axial T1-weighted MRI demonstrates the 'penumbra sign,' characterized by a central low-signal pus collection, a thin hyperintense inner rim of granulation tissue, and an outer hypointense ring of reactive bone sclerosis. (D) Coronal Fat-Sat T2-weighted MRI reveals the central abscess as hyperintense (pus), surrounded by extensive high-signal bone marrow edema in the metaphysis. These images highlight key diagnostic features for identifying intraosseous abscesses, specifically the role of MRI in detecting subtle granulation tissue and surrounding inflammatory changes that distinguish subacute infection from other bone lesions like osteoid osteoma or Langerhans cell histiocytosis.

This composite figure demonstrates the multimodality diagnostic workup of a lesion in the distal radius, likely representing subacute osteomyelitis. (a) Clinical photograph of the wrist shows localized erythema and a prominent, firm swelling on the dorsal-radial aspect. (b) Anteroposterior plain radiograph reveals an ill-defined osteolytic lesion in the distal radial metaphysis accompanied by adjacent soft tissue swelling. (c-e) MRI series provides detailed characterization: (c) Coronal T1-weighted image shows a low-signal intensity marrow lesion with a characteristic hyperintense 'penumbra sign' (yellow arrow) at the periphery, a feature highly suggestive of Brodie's abscess. (d) Coronal T2-weighted fat-suppressed image shows high-signal intensity (edema) within the lesion and extensive reactive marrow and soft tissue edema. (e) Axial T1 and T2 fat-suppressed images illustrate the intraosseous lesion and associated extraosseous fluid collection (abscess). This sequence illustrates key radiological markers for bone infection, contrasting bony destruction on X-ray with inflammatory signal changes and specific diagnostic signs on MRI.

This composite figure demonstrates the multimodality diagnostic workup of a lesion in the distal radius, likely representing subacute osteomyelitis. (a) Clinical photograph of the wrist shows localized erythema and a prominent, firm swelling on the dorsal-radial aspect. (b) Anteroposterior plain radiograph reveals an ill-defined osteolytic lesion in the distal radial metaphysis accompanied by adjacent soft tissue swelling. (c-e) MRI series provides detailed characterization: (c) Coronal T1-weighted image shows a low-signal intensity marrow lesion with a characteristic hyperintense 'penumbra sign' (yellow arrow) at the periphery, a feature highly suggestive of Brodie's abscess. (d) Coronal T2-weighted fat-suppressed image shows high-signal intensity (edema) within the lesion and extensive reactive marrow and soft tissue edema. (e) Axial T1 and T2 fat-suppressed images illustrate the intraosseous lesion and associated extraosseous fluid collection (abscess). This sequence illustrates key radiological markers for bone infection, contrasting bony destruction on X-ray with inflammatory signal changes and specific diagnostic signs on MRI.

A lateral preoperative X-ray of the left ankle and foot demonstrating chronic osteomyelitis of the calcaneus. The diagnostic image shows a large, radiolucent, intraosseous cystic lesion at the calcaneal tuberosity, labeled as an abscess. This 6x5 cm lesion is located distal and ventral to a previously placed metallic surgical anchor, which appears as a small, high-density radio-opaque structure. The abscess exhibits defined but irregular borders against the surrounding trabecular bone, which shows signs of diffuse bone marrow edema and reactive changes. Visible anatomical structures include the calcaneus, talus, and midfoot bones. This radiograph serves as a key educational example of a Brodie's abscess or chronic calcaneal osteomyelitis following orthopedic surgery, illustrating the use of imaging for preoperative planning and localization of infectious collections within the foot and ankle.

A lateral preoperative X-ray of the left ankle and foot demonstrating chronic osteomyelitis of the calcaneus. The diagnostic image shows a large, radiolucent, intraosseous cystic lesion at the calcaneal tuberosity, labeled as an abscess. This 6x5 cm lesion is located distal and ventral to a previously placed metallic surgical anchor, which appears as a small, high-density radio-opaque structure. The abscess exhibits defined but irregular borders against the surrounding trabecular bone, which shows signs of diffuse bone marrow edema and reactive changes. Visible anatomical structures include the calcaneus, talus, and midfoot bones. This radiograph serves as a key educational example of a Brodie's abscess or chronic calcaneal osteomyelitis following orthopedic surgery, illustrating the use of imaging for preoperative planning and localization of infectious collections within the foot and ankle.

Finding Sources
Finding Sources
Searching Images

osteomyelitis pathogenesis hematogenous spread bone infection diagram

This medical illustration depicts the five-stage progression of osteomyelitis in the proximal humerus, categorized into acute and chronic phases. The series (A–E) visualizes the pathophysiology of bone infection: Stage A shows the initial metaphyseal focus of infection; Stage B demonstrates lateral spread toward the bone cortex; Stage C illustrates cortical penetration and subsequent periosteal elevation; Stage D identifies the formation of a thick involucrum (new bone growth surrounding infected tissue); and Stage E shows further expansion of the metaphyseal focus and extensive involucrum. The diagram highlights the anatomical relationship between the metaphysis, cortex, and periosteum during bacterial seeding and inflammatory response. Additionally, the content notes that chronic osteomyelitis is characterized by bone necrosis, formation of sequestra (detached dead bone), and large-surface ischemia. This anatomical diagram serves as an educational tool for medical students and clinicians to understand the radiological and pathological evolution of pediatric and adult bone infections.

This medical illustration depicts the five-stage progression of osteomyelitis in the proximal humerus, categorized into acute and chronic phases. The series (A–E) visualizes the pathophysiology of bone infection: Stage A shows the initial metaphyseal focus of infection; Stage B demonstrates lateral spread toward the bone cortex; Stage C illustrates cortical penetration and subsequent periosteal elevation; Stage D identifies the formation of a thick involucrum (new bone growth surrounding infected tissue); and Stage E shows further expansion of the metaphyseal focus and extensive involucrum. The diagram highlights the anatomical relationship between the metaphysis, cortex, and periosteum during bacterial seeding and inflammatory response. Additionally, the content notes that chronic osteomyelitis is characterized by bone necrosis, formation of sequestra (detached dead bone), and large-surface ischemia. This anatomical diagram serves as an educational tool for medical students and clinicians to understand the radiological and pathological evolution of pediatric and adult bone infections.

This composite figure illustrates the radiological presentation of acute pediatric hematogenous osteomyelitis in the proximal humerus across different modalities. Panel A is a plain radiograph showing a subtle osteolytic lesion in the metaphysis with early cortical blurring and loss of delineation at the medial aspect (black arrow). Panel B presents a coronal T2-weighted MRI showing hyperintense bone marrow edema (black arrows) primarily localized to the metaphyseal region. Panel C displays a coronal T1-weighted post-gadolinium contrast image with fat saturation, revealing a rim-enhancing intra-osseous abscess (white arrow). This image highlights transphyseal spread, where the infection has crossed the growth plate to involve the epiphysis, a critical finding in pediatric musculoskeletal imaging. These panels collectively demonstrate the evolution of findings from subtle radiographic changes to advanced abscess formation and epiphyseal extension, emphasizing the high sensitivity of MRI for detecting bone marrow changes and identifying surgical targets like rim-enhancing collections.

This composite figure illustrates the radiological presentation of acute pediatric hematogenous osteomyelitis in the proximal humerus across different modalities. Panel A is a plain radiograph showing a subtle osteolytic lesion in the metaphysis with early cortical blurring and loss of delineation at the medial aspect (black arrow). Panel B presents a coronal T2-weighted MRI showing hyperintense bone marrow edema (black arrows) primarily localized to the metaphyseal region. Panel C displays a coronal T1-weighted post-gadolinium contrast image with fat saturation, revealing a rim-enhancing intra-osseous abscess (white arrow). This image highlights transphyseal spread, where the infection has crossed the growth plate to involve the epiphysis, a critical finding in pediatric musculoskeletal imaging. These panels collectively demonstrate the evolution of findings from subtle radiographic changes to advanced abscess formation and epiphyseal extension, emphasizing the high sensitivity of MRI for detecting bone marrow changes and identifying surgical targets like rim-enhancing collections.

This figure demonstrates diagnostic imaging findings and a longitudinal progression of hematogenous osteomyelitis in a preclinical mouse model. Panel (a) shows a whole-body X-ray at 6 weeks post-infection, with a region of interest (ROI) highlighted over the pelvis. Panel (b) presents a series of weekly pelvic X-rays from Week 1 to Week 6. The progression shows stable bone architecture until Week 5, followed by significant pathological changes at Week 6, characterized by severe bone deformation, cortical thickening, and increased radiopacity of the left ilium, consistent with chronic osteomyelitis. The right pelvis remains relatively normal on 2D imaging. Panel (c) provides a high-magnification view of the affected left pelvis with annotated planes (LF1–LF6 and LR1–LR2) ranging from 0mm to 9mm. These markers indicate the precise anatomical locations used for subsequent cryo-sectioning, immunofluorescence staining, and Raman spectroscopic imaging to analyze staphylococcal abscess communities (SACs) and reactive bone formation. The content illustrates the macroscopic manifestations of chronic bone infection and the methodological approach for correlating clinical imaging with microscopic tissue analysis.

This figure demonstrates diagnostic imaging findings and a longitudinal progression of hematogenous osteomyelitis in a preclinical mouse model. Panel (a) shows a whole-body X-ray at 6 weeks post-infection, with a region of interest (ROI) highlighted over the pelvis. Panel (b) presents a series of weekly pelvic X-rays from Week 1 to Week 6. The progression shows stable bone architecture until Week 5, followed by significant pathological changes at Week 6, characterized by severe bone deformation, cortical thickening, and increased radiopacity of the left ilium, consistent with chronic osteomyelitis. The right pelvis remains relatively normal on 2D imaging. Panel (c) provides a high-magnification view of the affected left pelvis with annotated planes (LF1–LF6 and LR1–LR2) ranging from 0mm to 9mm. These markers indicate the precise anatomical locations used for subsequent cryo-sectioning, immunofluorescence staining, and Raman spectroscopic imaging to analyze staphylococcal abscess communities (SACs) and reactive bone formation. The content illustrates the macroscopic manifestations of chronic bone infection and the methodological approach for correlating clinical imaging with microscopic tissue analysis.

Running Command

mkdir -p /tmp/workspace/subacute-osteomyelitis-ppt && ls /tmp/workspace/subacute-osteomyelitis-ppt/

Writing File

~/subacute-osteomyelitis-ppt/build_ppt.py

import subprocess, json, base64
from io import BytesIO
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

# ── Colour palette ──────────────────────────────────────────────────────────
C_NAVY      = RGBColor(0x0D, 0x2B, 0x55)   # dark navy blue  – title bars
C_TEAL      = RGBColor(0x00, 0x7A, 0x8A)   # teal accent     – subheadings
C_ORANGE    = RGBColor(0xE8, 0x6B, 0x1A)   # orange accent   – highlights
C_BG        = RGBColor(0xF4, 0xF7, 0xFA)   # near-white bg
C_WHITE     = RGBColor(0xFF, 0xFF, 0xFF)
C_DARK      = RGBColor(0x1A, 0x1A, 0x2E)   # near-black text
C_LIGHT_BAR = RGBColor(0xD6, 0xE4, 0xF0)   # light blue for alt rows

W = Inches(13.333)
H = Inches(7.5)

prs = Presentation()
prs.slide_width  = W
prs.slide_height = H
blank = prs.slide_layouts[6]  # fully blank

# ── Helper utilities ─────────────────────────────────────────────────────────

def rgb_fill(shape, rgb):
    shape.fill.solid()
    shape.fill.fore_color.rgb = rgb

def add_rect(slide, x, y, w, h, rgb):
    shape = slide.shapes.add_shape(1, x, y, w, h)  # MSO_SHAPE_TYPE.RECTANGLE=1
    rgb_fill(shape, rgb)
    shape.line.fill.background()
    return shape

def add_tb(slide, x, y, w, h, text, size, bold=False, color=C_DARK,
           align=PP_ALIGN.LEFT, wrap=True, italic=False, anchor=MSO_ANCHOR.TOP):
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = wrap
    tf.vertical_anchor = anchor
    tf.margin_left = 0; tf.margin_right = 0
    tf.margin_top = 0;  tf.margin_bottom = 0
    p = tf.paragraphs[0]
    p.alignment = align
    r = p.add_run()
    r.text = text
    r.font.name  = "Calibri"
    r.font.size  = Pt(size)
    r.font.bold  = bold
    r.font.italic = italic
    r.font.color.rgb = color
    return tb

def add_tb_multiline(slide, x, y, w, h, lines, size, bold=False,
                     color=C_DARK, align=PP_ALIGN.LEFT, spacing_after=Pt(4)):
    """lines: list of (text, bold_override, color_override) tuples or plain strings"""
    tb = slide.shapes.add_textbox(x, y, w, h)
    tf = tb.text_frame
    tf.word_wrap = True
    tf.margin_left = 0; tf.margin_right = 0
    tf.margin_top = 0;  tf.margin_bottom = 0
    first = True
    for item in lines:
        if isinstance(item, str):
            txt, b, c = item, bold, color
        else:
            txt, b, c = item
        if first:
            p = tf.paragraphs[0]; first = False
        else:
            p = tf.add_paragraph()
        p.alignment = align
        p.space_after = spacing_after
        r = p.add_run()
        r.text = txt
        r.font.name  = "Calibri"
        r.font.size  = Pt(size)
        r.font.bold  = b
        r.font.color.rgb = c
    return tb

def header_bar(slide, title, subtitle=None):
    """Top navy bar with white title."""
    add_rect(slide, 0, 0, W, Inches(1.15), C_NAVY)
    add_rect(slide, 0, Inches(1.15), W, Inches(0.06), C_ORANGE)
    add_tb(slide, Inches(0.4), Inches(0.12), Inches(12.5), Inches(0.95),
           title, 32, bold=True, color=C_WHITE, align=PP_ALIGN.LEFT,
           anchor=MSO_ANCHOR.MIDDLE)
    if subtitle:
        add_tb(slide, Inches(0.4), Inches(0.72), Inches(12.5), Inches(0.4),
               subtitle, 16, color=RGBColor(0xCC, 0xE5, 0xF5), align=PP_ALIGN.LEFT)

def slide_bg(slide):
    add_rect(slide, 0, 0, W, H, C_BG)

def footer(slide, text="Subacute Osteomyelitis | Orthopaedics"):
    add_rect(slide, 0, Inches(7.15), W, Inches(0.35), C_NAVY)
    add_tb(slide, Inches(0.3), Inches(7.17), Inches(12.5), Inches(0.3),
           text, 10, color=RGBColor(0xBB, 0xCC, 0xDD), align=PP_ALIGN.LEFT)

def bullet_block(slide, x, y, w, h, items, title=None, title_color=C_TEAL,
                 bullet_size=16, title_size=18):
    """Render a titled bullet list inside a card."""
    cur_y = y
    if title:
        add_tb(slide, x, cur_y, w, Inches(0.38),
               title, title_size, bold=True, color=title_color)
        cur_y += Inches(0.38)
    lines = []
    for item in items:
        if isinstance(item, tuple):
            lines.append(item)
        else:
            lines.append(f"• {item}")
    add_tb_multiline(slide, x, cur_y, w, h - (cur_y - y),
                     lines, bullet_size, spacing_after=Pt(5))

def card(slide, x, y, w, h, fill=C_WHITE, radius=False):
    shp = add_rect(slide, x, y, w, h, fill)
    return shp

def fetch_image_b64(url):
    try:
        result = json.loads(subprocess.check_output(
            ["python", "/tmp/skills/shared/scripts/fetch_images.py", url],
            timeout=30
        ))
        if result and result[0].get("base64"):
            return result[0]["base64"]
    except Exception as e:
        print(f"Image fetch failed for {url}: {e}")
    return None

def add_image_from_url(slide, url, x, y, w, h=None):
    b64str = fetch_image_b64(url)
    if not b64str:
        return False
    # strip data URI prefix if present
    if "," in b64str:
        b64str = b64str.split(",", 1)[1]
    raw = base64.b64decode(b64str)
    buf = BytesIO(raw)
    if h:
        slide.shapes.add_picture(buf, x, y, w, h)
    else:
        slide.shapes.add_picture(buf, x, y, w)
    return True

# ════════════════════════════════════════════════════════════════════════════
# SLIDE 1 – Title slide
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, W, H, C_NAVY)

# teal diagonal accent
add_rect(slide, Inches(9.5), 0, Inches(3.83), H, C_TEAL)

# orange thin bar
add_rect(slide, 0, Inches(3.5), W, Inches(0.08), C_ORANGE)

# Main title
add_tb(slide, Inches(0.5), Inches(1.2), Inches(8.8), Inches(2.0),
       "SUBACUTE OSTEOMYELITIS", 48, bold=True, color=C_WHITE, align=PP_ALIGN.LEFT)

# Subtitle
add_tb(slide, Inches(0.5), Inches(3.3), Inches(8.8), Inches(0.55),
       "A Comprehensive Overview", 22, bold=False, color=RGBColor(0xCC, 0xE5, 0xF5),
       align=PP_ALIGN.LEFT)

# Topics strip
add_rect(slide, Inches(0.5), Inches(4.3), Inches(8.5), Inches(1.7), C_TEAL)
topics = "Definition  •  Etiology  •  Risk Factors  •  Pathogenesis\nClinical Features  •  Investigations  •  Classification"
add_tb(slide, Inches(0.65), Inches(4.35), Inches(8.2), Inches(1.6),
       topics, 16, color=C_WHITE, align=PP_ALIGN.LEFT)

# Right panel text
add_tb(slide, Inches(9.7), Inches(1.0), Inches(3.3), Inches(0.5),
       "ORTHOPAEDICS", 14, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER)
add_tb(slide, Inches(9.7), Inches(1.6), Inches(3.3), Inches(4.5),
       "Brodie Abscess\nHematogenous Spread\nLong Bones\nChildren & Young Adults",
       16, color=RGBColor(0xCC, 0xF5, 0xF0), align=PP_ALIGN.CENTER)

# Source note
add_tb(slide, Inches(0.5), Inches(7.1), Inches(8.0), Inches(0.3),
       "Source: Campbell's Operative Orthopaedics 15e (2026)", 10,
       color=RGBColor(0x88, 0xAA, 0xCC), align=PP_ALIGN.LEFT)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 2 – Definition
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "DEFINITION")
footer(slide)

# Big definition box
card(slide, Inches(0.4), Inches(1.4), Inches(12.5), Inches(2.8), C_WHITE)
add_tb(slide, Inches(0.6), Inches(1.5), Inches(12.0), Inches(2.5),
       "Subacute osteomyelitis is a form of primary bone infection with an "
       "insidious onset, lasting more than 2 weeks before diagnosis, "
       "characterised by minimal systemic symptoms, mild-to-moderate localised "
       "pain, and predominantly radiographic findings without the severity of "
       "acute osteomyelitis.",
       20, wrap=True, color=C_DARK, align=PP_ALIGN.LEFT)

# Key distinguishing features
y = Inches(4.35)
features = [
    ("Onset", "Insidious – symptoms evolve over weeks to months"),
    ("Systemic signs", "Minimal or absent fever; near-normal WBC count"),
    ("Diagnosis delay", "Typically >2 weeks from symptom onset"),
    ("Incidence", "Occurs in >30% of all primary bone infections"),
    ("Hallmark lesion", "Brodie Abscess – walled-off intraosseous abscess"),
]
for i, (label, desc) in enumerate(features):
    row_y = y + i * Inches(0.56)
    bg = C_LIGHT_BAR if i % 2 == 0 else C_WHITE
    card(slide, Inches(0.4), row_y, Inches(12.5), Inches(0.52), bg)
    add_tb(slide, Inches(0.55), row_y + Inches(0.08), Inches(2.5), Inches(0.4),
           label, 14, bold=True, color=C_NAVY)
    add_tb(slide, Inches(3.2), row_y + Inches(0.08), Inches(9.5), Inches(0.4),
           desc, 14, color=C_DARK)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 3 – Etiology
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "ETIOLOGY", "Causative Organisms")
footer(slide)

# Left column – organisms
card(slide, Inches(0.4), Inches(1.35), Inches(5.9), Inches(5.8), C_WHITE)
add_tb(slide, Inches(0.55), Inches(1.45), Inches(5.6), Inches(0.45),
       "Common Pathogens", 17, bold=True, color=C_TEAL)

organisms = [
    ("Staphylococcus aureus", "Most common – isolated in ~50% of cases", True),
    ("S. epidermidis", "Identified in a significant proportion", False),
    ("Streptococcus species", "Particularly in children & neonates", False),
    ("Kingella kingae", "Emerging pathogen in children <5 years", False),
    ("Gram-negative bacilli", "Salmonella in sickle-cell disease; E. coli in neonates", False),
    ("Pseudomonas aeruginosa", "Intravenous drug users & puncture wounds", False),
    ("M. tuberculosis / Brucella", "Subacute vertebral osteomyelitis (endemic areas)", False),
    ("Culture-negative", "~20% of Brodie abscess; organisms of low virulence", False),
]
for i, (org, note, highlight) in enumerate(organisms):
    ry = Inches(2.0) + i * Inches(0.62)
    bg = RGBColor(0xE8, 0xF4, 0xF8) if highlight else (C_LIGHT_BAR if i % 2 == 0 else C_WHITE)
    card(slide, Inches(0.45), ry, Inches(5.8), Inches(0.58), bg)
    add_tb(slide, Inches(0.6), ry + Inches(0.03), Inches(2.6), Inches(0.3),
           org, 12, bold=highlight, color=C_NAVY if highlight else C_DARK)
    add_tb(slide, Inches(0.6), ry + Inches(0.3), Inches(5.5), Inches(0.26),
           note, 10, color=RGBColor(0x44, 0x55, 0x66))

# Right column – route of infection
card(slide, Inches(6.6), Inches(1.35), Inches(6.3), Inches(5.8), C_WHITE)
add_tb(slide, Inches(6.75), Inches(1.45), Inches(6.0), Inches(0.45),
       "Routes of Infection", 17, bold=True, color=C_TEAL)

routes = [
    ("Hematogenous (Primary)", "Most common route. Bacteraemia seeds metaphyseal sinusoidal vessels rich in slow-flowing blood – lacks phagocytic lining."),
    ("Direct inoculation", "Penetrating trauma, surgery, open fractures introduce organisms directly into bone."),
    ("Contiguous spread", "Adjacent soft-tissue infection (e.g., diabetic foot ulcer, septic arthritis) extends to bone."),
]
ry = Inches(2.05)
for label, desc in routes:
    add_rect(slide, Inches(6.65), ry, Inches(0.06), Inches(0.8), C_ORANGE)
    add_tb(slide, Inches(6.85), ry, Inches(5.9), Inches(0.35),
           label, 14, bold=True, color=C_NAVY)
    add_tb(slide, Inches(6.85), ry + Inches(0.33), Inches(5.9), Inches(0.55),
           desc, 12, color=C_DARK, wrap=True)
    ry += Inches(0.98)

# Low virulence note
add_rect(slide, Inches(6.65), Inches(5.05), Inches(6.2), Inches(0.06), C_TEAL)
add_tb(slide, Inches(6.65), Inches(5.15), Inches(6.2), Inches(0.9),
       "Key Concept: Organisms of low virulence are believed to cause subacute "
       "osteomyelitis. The host immune response partially suppresses the infection, "
       "leading to a chronic, indolent course rather than fulminant acute disease.",
       12, color=C_DARK, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 4 – Risk Factors
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "RISK FACTORS")
footer(slide)

risk_data = [
    ("Age Group", [
        "Children 6–10 years & adolescents (peak incidence)",
        "Young adults (Brodie abscess)",
        "Neonates – haematogenous + contiguous route",
    ], C_TEAL),
    ("Immunocompromised States", [
        "Diabetes mellitus (impaired neutrophil function)",
        "HIV/AIDS, malignancy, transplant recipients",
        "Long-term steroid or immunosuppressive therapy",
    ], C_ORANGE),
    ("Haematological Conditions", [
        "Sickle cell disease (Salmonella predisposition)",
        "Thalassaemia, haemolytic anaemias",
        "Increased susceptibility to haematogenous seeding",
    ], RGBColor(0x27, 0x6E, 0xBF)),
    ("Systemic Factors", [
        "Malnutrition and vitamin deficiencies",
        "Previous bone infection or orthopaedic surgery",
        "Intravenous drug use (Pseudomonas risk)",
        "IV lines / indwelling catheters (older adults)",
    ], RGBColor(0x2E, 0x86, 0x48)),
]

col_w  = Inches(5.9)
col_h  = Inches(2.65)
top_y  = Inches(1.4)
coords = [
    (Inches(0.4),  top_y),
    (Inches(6.9),  top_y),
    (Inches(0.4),  top_y + col_h + Inches(0.15)),
    (Inches(6.9),  top_y + col_h + Inches(0.15)),
]

for (cx, cy), (title, bullets, color) in zip(coords, risk_data):
    card(slide, cx, cy, col_w, col_h, C_WHITE)
    add_rect(slide, cx, cy, col_w, Inches(0.42), color)
    add_tb(slide, cx + Inches(0.15), cy + Inches(0.05), col_w - Inches(0.2), Inches(0.35),
           title, 15, bold=True, color=C_WHITE, align=PP_ALIGN.LEFT)
    for j, b in enumerate(bullets):
        by = cy + Inches(0.5) + j * Inches(0.6)
        add_rect(slide, cx + Inches(0.18), by + Inches(0.12), Inches(0.12), Inches(0.12), color)
        add_tb(slide, cx + Inches(0.4), by, col_w - Inches(0.5), Inches(0.55),
               b, 13, color=C_DARK, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 5 – Pathogenesis
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "PATHOGENESIS", "Mechanism of Subacute Bone Infection")
footer(slide)

steps = [
    ("1", "Bacteraemia", "Low-grade bacteraemia seeds the metaphysis, "
     "where terminal capillaries are tortuous and blood flow is sluggish."),
    ("2", "Localised Seeding", "Organisms colonise sinusoidal vessels "
     "that lack phagocytic lining cells – particularly vulnerable in children."),
    ("3", "Host-Pathogen Balance", "Low virulence of organisms + partial "
     "host immunity → infection is not eradicated but also not overwhelmed."),
    ("4", "Granulation Formation", "Chronic inflammatory cells "
     "(neutrophils, macrophages) create a zone of granulation tissue "
     "rather than frank pus."),
    ("5", "Walling-Off", "Host lays down reactive bone sclerosis around "
     "the focus → forms the characteristic Brodie abscess cavity with "
     "lytic centre and sclerotic rim."),
    ("6", "Epiphyseal Spread", "Before physeal closure: metaphysis most "
     "affected. After closure: metaphyseal-epiphyseal junction involved."),
]

# Draw flow arrows
x_start = Inches(0.35)
box_w   = Inches(12.55)
box_h   = Inches(0.82)
top     = Inches(1.38)
gap     = Inches(0.1)

for i, (num, title, desc) in enumerate(steps):
    y_pos = top + i * (box_h + gap)
    bg = C_WHITE if i % 2 == 0 else C_LIGHT_BAR
    card(slide, x_start, y_pos, box_w, box_h, bg)
    # Number circle
    add_rect(slide, x_start + Inches(0.1), y_pos + Inches(0.18), Inches(0.46), Inches(0.46), C_NAVY)
    add_tb(slide, x_start + Inches(0.1), y_pos + Inches(0.18), Inches(0.46), Inches(0.46),
           num, 16, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
    # Title
    add_tb(slide, x_start + Inches(0.72), y_pos + Inches(0.08), Inches(2.5), Inches(0.36),
           title, 14, bold=True, color=C_TEAL)
    # Separator line
    add_rect(slide, x_start + Inches(3.3), y_pos + Inches(0.2), Inches(0.03), Inches(0.42), C_ORANGE)
    # Description
    add_tb(slide, x_start + Inches(3.45), y_pos + Inches(0.1), Inches(9.3), Inches(0.65),
           desc, 13, color=C_DARK, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 6 – Clinical Features
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "CLINICAL FEATURES")
footer(slide)

# Left: symptoms
card(slide, Inches(0.4), Inches(1.35), Inches(6.0), Inches(5.8), C_WHITE)
add_rect(slide, Inches(0.4), Inches(1.35), Inches(6.0), Inches(0.45), C_TEAL)
add_tb(slide, Inches(0.55), Inches(1.38), Inches(5.8), Inches(0.38),
       "Symptoms", 17, bold=True, color=C_WHITE)

syms = [
    ("Pain", "Mild-to-moderate, persistent, localised over the affected bone – the ONLY consistent symptom"),
    ("Fever", "Low-grade or absent; markedly lower than acute osteomyelitis"),
    ("Systemic illness", "Minimal – patient appears well despite bone infection"),
    ("Duration", "Symptoms present for weeks before diagnosis"),
    ("Limp / restricted motion", "Common in lower limb lesions; child avoids weight-bearing"),
    ("Nocturnal pain", "May be prominent; can mimic osteoid osteoma"),
]
for i, (sym, desc) in enumerate(syms):
    ry = Inches(1.9) + i * Inches(0.77)
    add_rect(slide, Inches(0.45), ry, Inches(0.06), Inches(0.55), C_ORANGE)
    add_tb(slide, Inches(0.65), ry + Inches(0.02), Inches(5.6), Inches(0.26),
           sym, 13, bold=True, color=C_NAVY)
    add_tb(slide, Inches(0.65), ry + Inches(0.27), Inches(5.6), Inches(0.45),
           desc, 11, color=C_DARK, wrap=True)

# Right: signs
card(slide, Inches(6.7), Inches(1.35), Inches(6.25), Inches(5.8), C_WHITE)
add_rect(slide, Inches(6.7), Inches(1.35), Inches(6.25), Inches(0.45), C_NAVY)
add_tb(slide, Inches(6.85), Inches(1.38), Inches(6.0), Inches(0.38),
       "Signs & Laboratory Findings", 17, bold=True, color=C_WHITE)

signs = [
    ("Local tenderness", "Over metaphysis or diaphysis of affected bone"),
    ("Soft-tissue swelling", "Mild; not the florid swelling of acute disease"),
    ("Reduced ROM", "Adjacent joint involvement common"),
    ("WBC count", "Usually within normal limits"),
    ("ESR / CRP", "Elevated in only ~50% of patients"),
    ("Blood cultures", "Usually negative"),
    ("Bone aspirate/biopsy", "Pathogen identified in only ~60% of adequate specimens"),
    ("Site", "Metaphysis of distal tibia / distal femur most common"),
]
for i, (sign, desc) in enumerate(signs):
    ry = Inches(1.93) + i * Inches(0.59)
    bg = C_LIGHT_BAR if i % 2 == 0 else C_WHITE
    card(slide, Inches(6.75), ry, Inches(6.15), Inches(0.55), bg)
    add_tb(slide, Inches(6.9), ry + Inches(0.06), Inches(1.8), Inches(0.42),
           sign, 12, bold=True, color=C_TEAL)
    add_tb(slide, Inches(8.85), ry + Inches(0.06), Inches(3.9), Inches(0.42),
           desc, 12, color=C_DARK, wrap=True)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 7 – Classification (Gledhill / Roberts)
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "CLASSIFICATION", "Roberts Classification of Subacute Osteomyelitis (1982)")
footer(slide)

types = [
    ("Type Ia", "Punched-out radiolucency in metaphysis; no reactive bone; <1 cm",
     "Resembles eosinophil granuloma. Metaphysis of tibia/femur in children."),
    ("Type Ib", "Punched-out lesion with peripheral bone sclerosis (classic Brodie abscess)",
     "Most common type. Metaphysis – well-defined lucent cavity with sclerotic rim."),
    ("Type II", "Metaphyseal lesion with cortical erosion & periosteal new bone",
     "Loss of distinct margins; mimics Ewing sarcoma or aggressive malignancy."),
    ("Type III", "Diaphyseal lesion causing cortical thickening & periosteal reaction",
     "Onion-skin periosteal layering; may resemble osteoid osteoma or Ewing's."),
    ("Type IV", "Epiphyseal lytic lesion (rare; before physeal closure)",
     "Primary epiphyseal – soft tissue extension and joint involvement possible."),
    ("Type V", "Vertebral body lesion",
     "Presents as vertebral osteomyelitis; TB & Brucella in endemic regions."),
    ("Type VI", "Small metaphyseal lesion at epiphyseal side",
     "Subperiosteal extension; mixed lytic and sclerotic pattern."),
]

row_h = Inches(0.74)
top   = Inches(1.38)
for i, (typ, radiograph, clinical) in enumerate(types):
    ry = top + i * (row_h + Inches(0.04))
    bg = C_LIGHT_BAR if i % 2 == 0 else C_WHITE
    card(slide, Inches(0.4), ry, Inches(12.5), row_h, bg)
    add_rect(slide, Inches(0.4), ry, Inches(1.1), row_h, C_NAVY if i % 2 == 0 else C_TEAL)
    add_tb(slide, Inches(0.42), ry + Inches(0.2), Inches(1.05), Inches(0.35),
           typ, 14, bold=True, color=C_WHITE, align=PP_ALIGN.CENTER)
    add_tb(slide, Inches(1.65), ry + Inches(0.04), Inches(5.5), Inches(0.36),
           radiograph, 12, bold=True, color=C_DARK)
    add_tb(slide, Inches(1.65), ry + Inches(0.38), Inches(5.5), Inches(0.32),
           clinical, 11, color=RGBColor(0x44, 0x55, 0x66), italic=True)
    add_rect(slide, Inches(7.3), ry + Inches(0.15), Inches(0.02), Inches(0.45), C_ORANGE)


# ════════════════════════════════════════════════════════════════════════════
# SLIDE 8 – Investigations (with images)
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "INVESTIGATIONS")
footer(slide)

# Left text panel
card(slide, Inches(0.4), Inches(1.35), Inches(7.2), Inches(5.85), C_WHITE)
add_tb(slide, Inches(0.55), Inches(1.42), Inches(7.0), Inches(0.42),
       "Radiological & Laboratory Workup", 17, bold=True, color=C_TEAL)

inv_items = [
    ("Plain Radiographs (X-ray)", [
        "First-line investigation; usually POSITIVE in subacute OM",
        "Classic: lytic lesion ± sclerotic rim (Brodie abscess) in metaphysis",
        "Cortical thickening / periosteal reaction in diaphyseal forms",
        "Normal X-ray does NOT exclude diagnosis early on",
    ]),
    ("MRI", [
        "Investigation of choice for soft-tissue extent & surgical planning",
        "Penumbra sign: central pus (low T1, high T2) + inner hyperintense granulation rim",
        "Helps differentiate from primary bone tumours (Ewing sarcoma, osteoid osteoma)",
        "Mandatory when X-ray findings are equivocal",
    ]),
    ("Blood Tests", [
        "WBC: usually normal",
        "ESR: elevated in 50% only; CRP more sensitive",
        "Blood cultures: usually negative",
    ]),
    ("Bone Scan (Tc-99m)", [
        "Increased uptake at infection site; useful for multifocal disease (CRMO)",
        "Less specific than MRI",
    ]),
    ("Bone Biopsy / Aspiration", [
        "Gold standard for definitive diagnosis",
        "Culture positive in only ~60%; granulation tissue is a common finding",
        "Purulent material not always obtained",
    ]),
]

cur_y = Inches(1.95)
for heading, bullets in inv_items:
    add_tb(slide, Inches(0.55), cur_y, Inches(6.9), Inches(0.3),
           heading, 13, bold=True, color=C_NAVY)
    cur_y += Inches(0.28)
    for b in bullets:
        add_rect(slide, Inches(0.65), cur_y + Inches(0.07), Inches(0.08), Inches(0.08), C_TEAL)
        add_tb(slide, Inches(0.85), cur_y, Inches(6.7), Inches(0.3),
               b, 11, color=C_DARK, wrap=True)
        cur_y += Inches(0.28)
    cur_y += Inches(0.05)

# Right image panel – Brodie abscess multi-modal image
card(slide, Inches(7.85), Inches(1.35), Inches(5.05), Inches(5.85), C_WHITE)
add_tb(slide, Inches(7.95), Inches(1.42), Inches(4.8), Inches(0.42),
       "Imaging Examples", 14, bold=True, color=C_TEAL)

img_url = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_ef7da137f02d1d05db2f3c3f245791a672fd3aaf65d42d36f2e09fc51db11ef1.jpg"
ok = add_image_from_url(slide, img_url, Inches(7.95), Inches(1.9), Inches(4.7))
if ok:
    add_tb(slide, Inches(7.95), Inches(6.15), Inches(4.8), Inches(0.8),
           "Brodie Abscess: (A) AP X-ray – lytic lesion with sclerotic rim; "
           "(C) T1 MRI – penumbra sign; (D) T2 MRI – central abscess + marrow oedema",
           9, color=RGBColor(0x55, 0x55, 0x55), italic=True, wrap=True)

# ════════════════════════════════════════════════════════════════════════════
# SLIDE 9 – Brodie Abscess (special focus)
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "BRODIE ABSCESS", "Localised Form of Subacute Osteomyelitis")
footer(slide)

# Left: text
card(slide, Inches(0.4), Inches(1.35), Inches(6.5), Inches(5.85), C_WHITE)

ba_data = [
    ("Definition", "Localised, walled-off intraosseous abscess; commonest "
     "form of subacute osteomyelitis. Represents a balance between organism "
     "virulence and host defence."),
    ("Epidemiology", "Most often in long bones of the lower extremity (tibia > "
     "femur > fibula). Young adults and older children. Metaphysis before physeal "
     "closure; metaphyseal-epiphyseal junction in adults."),
    ("Microbiology", "S. aureus in ~50%; culture negative in ~20%. Low-virulence "
     "organisms predominate."),
    ("Symptoms", "Intermittent pain of long duration; local tenderness. Systemic "
     "signs absent. Nocturnal pain common."),
    ("Radiology", "Plain X-ray: lytic lesion with sclerotic rim. MRI: penumbra sign "
     "(hyperintense inner granulation rim). Can mimic bone tumour."),
    ("Histology", "Granulation tissue (not frank pus) is the characteristic "
     "finding on biopsy and curettage."),
]
cur_y = Inches(1.42)
for label, text in ba_data:
    add_rect(slide, Inches(0.45), cur_y, Inches(0.06), Inches(0.75), C_ORANGE)
    add_tb(slide, Inches(0.65), cur_y + Inches(0.02), Inches(6.1), Inches(0.3),
           label, 13, bold=True, color=C_NAVY)
    add_tb(slide, Inches(0.65), cur_y + Inches(0.3), Inches(6.1), Inches(0.5),
           text, 11, color=C_DARK, wrap=True)
    cur_y += Inches(0.93)

# Right image: X-ray Brodie abscess in patella (knee)
card(slide, Inches(7.2), Inches(1.35), Inches(5.7), Inches(5.85), C_WHITE)
add_tb(slide, Inches(7.35), Inches(1.42), Inches(5.4), Inches(0.42),
       "Radiograph – Brodie Abscess", 14, bold=True, color=C_TEAL)

img_url2 = "https://cdn.orris.care/cdss_images/roco_radiology_ROCO_40085_1766648353618.png"
ok2 = add_image_from_url(slide, img_url2, Inches(7.35), Inches(1.9), Inches(5.4))
if ok2:
    add_tb(slide, Inches(7.35), Inches(6.2), Inches(5.4), Inches(0.7),
           "Lateral knee X-ray: well-defined focal lytic lesion in the inferior "
           "patella with subtle sclerotic margin and soft tissue swelling — "
           "classic Brodie abscess appearance.",
           9, color=RGBColor(0x55, 0x55, 0x55), italic=True, wrap=True)

# ════════════════════════════════════════════════════════════════════════════
# SLIDE 10 – Differential Diagnosis / Key Points
# ════════════════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
slide_bg(slide)
header_bar(slide, "DIFFERENTIAL DIAGNOSIS & KEY POINTS")
footer(slide)

# DDx table
card(slide, Inches(0.4), Inches(1.35), Inches(7.5), Inches(5.85), C_WHITE)
add_rect(slide, Inches(0.4), Inches(1.35), Inches(7.5), Inches(0.45), C_TEAL)
add_tb(slide, Inches(0.55), Inches(1.38), Inches(7.2), Inches(0.38),
       "Differential Diagnosis", 17, bold=True, color=C_WHITE)

ddx = [
    ("Osteoid Osteoma", "Small nidus, intense nocturnal pain, responds to aspirin, no pus"),
    ("Ewing Sarcoma", "Diaphyseal, onion-skin periosteum, constitutional symptoms"),
    ("Langerhans Cell Histiocytosis", "Multiple lytic lesions, vertebra plana, younger child"),
    ("Acute Osteomyelitis", "High fever, markedly elevated WBC, severe local signs"),
    ("Osteoblastoma", "Larger lesion >2 cm, vertebral location common"),
    ("Giant Cell Tumour", "Epiphyseal, mature skeleton, soap-bubble appearance"),
    ("Bone Cyst (Unicameral)", "Pathological fracture, fluid-fluid level on MRI"),
    ("Stress Fracture", "History of repetitive activity, periosteal reaction, cortical"),
]
for i, (dx, feat) in enumerate(ddx):
    ry = Inches(1.9) + i * Inches(0.59)
    bg = C_LIGHT_BAR if i % 2 == 0 else C_WHITE
    card(slide, Inches(0.45), ry, Inches(7.4), Inches(0.55), bg)
    add_tb(slide, Inches(0.6), ry + Inches(0.06), Inches(2.5), Inches(0.42),
           dx, 12, bold=True, color=C_NAVY)
    add_tb(slide, Inches(3.3), ry + Inches(0.06), Inches(4.4), Inches(0.42),
           feat, 11, color=C_DARK, wrap=True)

# Key points
card(slide, Inches(8.1), Inches(1.35), Inches(5.05), Inches(5.85), C_WHITE)
add_rect(slide, Inches(8.1), Inches(1.35), Inches(5.05), Inches(0.45), C_NAVY)
add_tb(slide, Inches(8.25), Inches(1.38), Inches(4.8), Inches(0.38),
       "Key Points to Remember", 17, bold=True, color=C_WHITE)

kp = [
    "Diagnosis is largely clinical + radiographic — not microbiological.",
    "ESR elevated in only 50%; WBC usually normal — do not let 'normal labs' dismiss diagnosis.",
    "Plain X-ray is usually POSITIVE (unlike acute OM in early stages).",
    "MRI is mandatory when X-ray is equivocal and to exclude bone tumour.",
    "Brodie abscess is the hallmark — lytic + sclerotic rim on X-ray.",
    "Penumbra sign on MRI is highly specific for Brodie abscess.",
    "Open biopsy + curettage may be needed for aggressive lesions.",
    "S. aureus is the predominant organism (~50%); culture negative in 20%.",
]
cur_y = Inches(1.9)
for i, kpoint in enumerate(kp):
    add_rect(slide, Inches(8.2), cur_y + Inches(0.1), Inches(0.22), Inches(0.22), C_ORANGE)
    add_tb(slide, Inches(8.55), cur_y, Inches(4.45), Inches(0.58),
           kpoint, 12, color=C_DARK, wrap=True)
    cur_y += Inches(0.62)

# ════════════════════════════════════════════════════════════════════════════
# SAVE
# ════════════════════════════════════════════════════════════════════════════
out_path = "/tmp/workspace/subacute-osteomyelitis-ppt/Subacute_Osteomyelitis.pptx"
prs.save(out_path)
print(f"Saved: {out_path}")
print(f"Slides: {len(prs.slides)}")
Running Command

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

Running Command

cd /tmp/workspace/subacute-osteomyelitis-ppt && python -c " import urllib.request, base64 from io import BytesIO from pptx import Presentation from pptx.util import Inches, Pt from pptx.dml.color import RGBColor # Test image download url = 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_ef7da137f02d1d05db2f3c3f245791a672fd3aaf65d42d36f2e09fc51db11ef1.jpg' req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'}) with urllib.request.urlopen(req, timeout=20) as r: data = r.read() print('Image size:', len(data), 'bytes') " 2>&1

Editing File

~/subacute-osteomyelitis-ppt/build_ppt.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/subacute-osteomyelitis-ppt/build_ppt.py'
Editing File

~/subacute-osteomyelitis-ppt/build_ppt.py

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

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

Running Command

ls -lh /tmp/workspace/subacute-osteomyelitis-ppt/Subacute_Osteomyelitis.pptx

Your presentation is ready! Here is the download link:

Subacute Osteomyelitis

Presentation · PPTX


What's inside - 10 slides (16:9 widescreen)

SlideContent
1Title slide - navy/teal theme with topic overview strip
2Definition - full definition + 5 key distinguishing features table
3Etiology - causative organisms (S. aureus, Kingella, TB, etc.) + routes of infection
4Risk Factors - age group, immunocompromised states, haematological conditions, systemic factors
5Pathogenesis - 6-step flow (bacteraemia → seeding → host-pathogen balance → granulation → walling-off → epiphyseal spread)
6Clinical Features - symptoms column + signs/lab findings column side-by-side
7Classification - Roberts 7-type classification (Type I-VI) with radiographic and clinical description
8Investigations - X-ray, MRI, blood tests, bone scan, biopsy + embedded Brodie abscess multi-modal image (X-ray + MRI penumbra sign)
9Brodie Abscess - dedicated deep-dive with text + X-ray image of classic lytic lesion
10Differential Diagnosis & Key Points - DDx table (8 conditions) + 8 key memory points
Design: Navy blue / teal / orange palette, card-based layout, labelled images from the medical library.
Source: Campbell's Operative Orthopaedics 15th Ed (2026) - the definitive orthopaedic reference.
This is a shared conversation. Sign in to Orris to start your own chat.