make a ppt on anterior uveitis ophthalmology in heading of defination etiology clinical features symptoms signs complications diffention diagnosis investigation treatment
anterior uveitis eye clinical photo keratic precipitates hypopyon

This clinical photograph shows a slit-lamp examination of the anterior segment of a human eye, focusing on the cornea. The image demonstrates a characteristic clinical finding of anterior uveitis: keratic precipitates (KP). These appear as diffuse, medium-sized, brownish-gray inflammatory cellular deposits adhered to the posterior surface of the cornea (the corneal endothelium). The precipitates are distributed across the illuminated area, contributing to visible endothelial haziness. The light reflex from the slit lamp is scattered and irregular, indicating a disruption of corneal clarity and the presence of inflammatory material. This finding is highly relevant for diagnosing intraocular inflammation and monitoring the response to therapy in conditions like viral or idiopathic uveitis.

A close-up clinical photograph of the human eye, captured via slit-lamp biomicroscopy, focusing on the cornea and anterior chamber. The image demonstrates hallmark signs of anterior uveitis, specifically the presence of numerous small, white keratic precipitates (KPs) adhered to the posterior surface of the corneal endothelium. These precipitates are fine to medium in size and appear scattered across the inferior and central corneal zones. There is a perceptible degree of generalized corneal haziness, indicative of mild corneal edema or an active inflammatory process within the anterior segment. The peripheral iris is visible on the left margin, showing normal contour, though the overall clarity of the intraocular structures is slightly diminished by the overlying corneal changes. This visual is characteristic of inflammatory conditions such as Posner-Schlossman syndrome or viral-induced uveitis, highlighting the clinical presentation of secondary glaucoma or hypertensive uveitis as indicated by the associated clinical context.

This clinical photograph, taken via slit lamp microscopy, displays the anterior segment of a human eye with a focus on corneal pathology. The image reveals diffuse keratic precipitates (KPs) distributed primarily across the central area of the corneal endothelium. These precipitates are characterized by a 'mutton-fat' appearance, manifesting as whitish, waxy, and irregularly shaped inflammatory deposits. Such findings are indicative of granulomatous uveitis, often associated with conditions like Cytomegalovirus (CMV) hypertensive anterior uveitis or sarcoidosis. The slit lamp beam highlights the depth of these deposits on the posterior corneal surface. Additionally, a mild inflammatory reaction is noted within the anterior chamber, though cell and flare are not individually resolvable at this magnification. This visual evidence serves as a critical diagnostic marker for differentiating types of intraocular inflammation and monitoring treatment response in patients with secondary glaucoma or viral uveitis.

This clinical photograph displays the anterior segment of a human eye under slit-lamp examination, highlighting signs of viral anterior uveitis. The primary diagnostic feature shown is a collection of keratic precipitates (KPs) on the corneal endothelium. These KPs exhibit a mixed morphology, consisting of larger, discrete, coin-shaped deposits characteristic of cytomegalovirus (CMV) infection, interspersed with smaller, star-like stellate KPs often associated with Rubella virus (RV) or Fuchs heterochromic iridocyclitis. The precipitates are primarily scattered across the central and lower-central corneal regions. Additionally, the image shows evidence of anterior segment complications, including a subcapsular cataract visible as an axial lens opacity and subtle iris surface changes. This visual serves as an educational example of an overlapping clinical phenotype in viral uveitis, where the co-existence of differing KP morphologies suggests a polyviral etiology involving both CMV and RV.
anterior uveitis posterior synechiae iris inflammation

This set of four slit-lamp clinical photographs (A–D) illustrates the hallmark findings of acute anterior uveitis (AAU) and severe breakdown of the blood-iris barrier. Image (A) demonstrates significant ciliary injection (perilimbal redness) and fibrin exudation near the pupil margin. Image (B) shows an irregular pupil shape characteristic of posterior synechiae, where the iris becomes pathologically adherent to the anterior lens capsule. Images (C) and (D) depict severe intraocular inflammation featuring a prominent hypopyon—a layer of white blood cells (leukocytes) settled at the bottom of the anterior chamber due to gravity. Additional findings include diffuse conjunctival hyperaemia, fibrin coating on the anterior lens surface, and evidence of aqueous flare. These images are essential for teaching the clinical manifestations of spondyloarthritis-associated ocular disease and the quantification of anterior segment inflammation.

This clinical photograph displays a wide-field view of the left eye, illustrating findings consistent with acute anterior uveitis. The primary pathology is visible within the anterior chamber, characterized by a generalized haziness indicative of a 1+ aqueous flare (protein exudation) and a mottled, cellular appearance corresponding to 2+ anterior chamber cells. The view of the posterior segment is significantly obscured by this inflammatory activity. Notably, the iris demonstrates structural complications in the form of posterior synechiae, visible as dark, linear fibrous adhesions tethering the iris to the underlying lens. These adhesions result in an irregular pupillary margin and contribute to the secluded appearance of the pupil. The overall yellow-orange reflex is hazy due to the presence of both cellular debris and proteinaceous material suspended in the aqueous humor. This image serves as a pedagogical tool for recognizing active ocular inflammation and its structural sequelae, often associated with systemic conditions such as secondary syphilis or other inflammatory etiologies.

Clinical slit-lamp photograph of the anterior segment and surrounding ocular adnexa, captured in vivo with slit-lamp illumination. The image depicts sympathetic ophthalmia: a painful, inflamed eye following prior penetrating trauma to the contralateral eye, now showing diffuse granulomatous uveitis with anterior chamber reaction and corneal edema. The anterior segment appears hazy with reduced red reflex, posterior synechiae may be present; keratic precipitates typical of granulomatous uveitis may be suspected. The iris may show mutton-fat keratic precipitates and choroidal involvement is suggested by dull, grayish subretinal elevation; subtle exudative retinal changes can accompany inflammation. The image emphasizes bilateral immune-mediated inflammation of the uvea (iris, ciliary body, choroid) with potential involvement of the choroid and retina, consistent with sympathetic ophthalmia. Clinically significant, this condition is vision-threatening if not promptly treated, with autoimmune bilateral granulomatous panuveitis. Diagnostic significance includes correlation with a recent ocular injury and sympathetic response in the fellow eye, and histopathology would reveal granulomatous infiltration with epithelioid cells. Potential clinical uses include education, differential diagnosis training for granulomatous uveitis, and tele-ophthalmology triage. Therapeutic relevance lies in early systemic steroids and immunomodulatory therapy to suppress the autoimmune attack and preserve vision; urgent ophthalmologic consultation is essential for optimal management and research.
mkdir -p /tmp/workspace/anterior-uveitis-ppt && ls /tmp/workspace/
~/anterior-uveitis-ppt/build_ppt.py
import json, subprocess, 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
from pptx.oxml.ns import qn
from lxml import etree
# ── Colour palette ────────────────────────────────────────────────────────────
DARK_BLUE = RGBColor(0x0D, 0x2B, 0x55) # slide background / header bar
MID_BLUE = RGBColor(0x1A, 0x5F, 0x9C) # accent / sub-heading
LIGHT_BLUE = RGBColor(0xD6, 0xE8, 0xF5) # content area background
GOLD = RGBColor(0xE8, 0xB8, 0x30) # title text highlight
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
DARK_TEXT = RGBColor(0x1A, 0x1A, 0x2E)
# ── Presentation setup ────────────────────────────────────────────────────────
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank_layout = prs.slide_layouts[6]
# ── Helpers ───────────────────────────────────────────────────────────────────
def fill_shape(shape, color: RGBColor):
sp = shape._element
spPr = sp.find(qn('p:spPr'))
if spPr is None:
spPr = etree.SubElement(sp, qn('p:spPr'))
solidFill = etree.SubElement(spPr, qn('a:solidFill'))
srgbClr = etree.SubElement(solidFill, qn('a:srgbClr'))
srgbClr.set('val', f'{color.rgb:06X}')
def add_rect(slide, x, y, w, h, color: RGBColor):
shape = slide.shapes.add_shape(1, x, y, w, h) # MSO_SHAPE_TYPE.RECTANGLE = 1
shape.line.fill.background()
fill_shape(shape, color)
return shape
def add_text(slide, text, x, y, w, h, font_size=18, bold=False,
color=WHITE, align=PP_ALIGN.LEFT, italic=False, wrap=True):
tb = slide.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = wrap
tf.margin_left = Inches(0.05)
tf.margin_right = Inches(0.05)
tf.margin_top = Inches(0.03)
tf.margin_bottom = Inches(0.03)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
run.font.name = "Calibri"
return tb
def add_bullet_text(slide, items, x, y, w, h, font_size=15, title=None,
title_size=18, bg_color=None, text_color=DARK_TEXT):
"""Add a box with optional title and bullet items."""
if bg_color:
add_rect(slide, x, y, w, h, bg_color)
tb = slide.shapes.add_textbox(x + Inches(0.1), y + Inches(0.08),
w - Inches(0.2), h - Inches(0.12))
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.02)
tf.margin_bottom = Inches(0.02)
first = True
if title:
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = title
run.font.size = Pt(title_size)
run.font.bold = True
run.font.color.rgb = MID_BLUE
run.font.name = "Calibri"
for item in items:
p = tf.add_paragraph() if not first else tf.paragraphs[0]
first = False
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = f" \u2022 {item}"
run.font.size = Pt(font_size)
run.font.color.rgb = text_color
run.font.name = "Calibri"
return tb
def slide_background(slide, color=DARK_BLUE):
bg = slide.background
fill = bg.fill
fill.solid()
fill.fore_color.rgb = color
def add_header_bar(slide, title_text, subtitle_text=None):
"""Full-width header bar with title + optional subtitle."""
add_rect(slide, Inches(0), Inches(0), prs.slide_width, Inches(1.25), DARK_BLUE)
# Gold accent stripe
add_rect(slide, Inches(0), Inches(1.20), prs.slide_width, Inches(0.06), GOLD)
add_text(slide, title_text,
Inches(0.4), Inches(0.08), Inches(12), Inches(0.75),
font_size=30, bold=True, color=GOLD, align=PP_ALIGN.LEFT)
if subtitle_text:
add_text(slide, subtitle_text,
Inches(0.4), Inches(0.80), Inches(12), Inches(0.45),
font_size=14, bold=False, color=WHITE, align=PP_ALIGN.LEFT)
def add_footer(slide, text="Anterior Uveitis | Ophthalmology"):
add_rect(slide, Inches(0), Inches(7.25), prs.slide_width, Inches(0.25), MID_BLUE)
add_text(slide, text,
Inches(0.2), Inches(7.25), Inches(13), Inches(0.25),
font_size=9, bold=False, color=WHITE, align=PP_ALIGN.CENTER)
def fetch_images(*urls):
try:
result = json.loads(subprocess.check_output(
["python", "/tmp/skills/shared/scripts/fetch_images.py"] + list(urls),
timeout=30
))
out = {}
for img in result:
if img.get("base64"):
raw = base64.b64decode(img["base64"].split(",", 1)[1])
out[img["url"]] = BytesIO(raw)
except Exception as e:
print(f"Image fetch error: {e}")
out = {}
return out
# ── Fetch images ──────────────────────────────────────────────────────────────
IMG_KP1 = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_3ecb94c3700bb920e0cb125139aaa958daccda08505ae825622d3585192da89b.jpg"
IMG_KP2 = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_77ac529ec9d990481cd17fc56d5a0686ee3e50ae130e7c52f89419a91d801d27.jpg"
IMG_SYN = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_27b944f7232b514c6ff346d5d4841ac5b88f3f87c776ac5679c1bb2e68c36883.jpg"
IMG_GRAN = "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_63335dbe9f3670ede7a6fc662e4a38783835446e1343b2c51bdc8a3e554f450e.jpg"
IMG_ANAT = "https://cdn.orris.care/cdss_images/971f059a9067e416a417450406149022457cb92f73de02f8b02a7ad57baf58d2.png"
images = fetch_images(IMG_KP1, IMG_KP2, IMG_SYN, IMG_GRAN, IMG_ANAT)
def add_image_safe(slide, url, left, top, w, h):
if url in images:
images[url].seek(0)
slide.shapes.add_picture(images[url], left, top, w, h)
# =============================================================================
# SLIDE 1 – TITLE
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, DARK_BLUE)
add_rect(s, Inches(0), Inches(0), prs.slide_width, Inches(7.5), DARK_BLUE)
# Central gradient box
add_rect(s, Inches(1.5), Inches(1.8), Inches(10.333), Inches(4.2), MID_BLUE)
add_rect(s, Inches(1.5), Inches(1.8), prs.slide_width - Inches(3), Inches(0.12), GOLD)
# Eye anatomy image on right
add_image_safe(s, IMG_ANAT, Inches(9.5), Inches(2.2), Inches(3.0), Inches(3.0))
# Title text
add_text(s, "ANTERIOR UVEITIS",
Inches(1.8), Inches(2.1), Inches(7.5), Inches(1.2),
font_size=44, bold=True, color=GOLD, align=PP_ALIGN.LEFT)
add_text(s, "A Comprehensive Ophthalmology Review",
Inches(1.8), Inches(3.3), Inches(7.5), Inches(0.6),
font_size=20, bold=False, color=WHITE, align=PP_ALIGN.LEFT)
add_text(s, "Definition | Etiology | Clinical Features | Complications\nDifferential Diagnosis | Investigations | Treatment",
Inches(1.8), Inches(3.95), Inches(7.5), Inches(0.9),
font_size=13, bold=False, color=LIGHT_BLUE, align=PP_ALIGN.LEFT)
add_text(s, "Source: Kanski's Clinical Ophthalmology, 10th Edition",
Inches(1.8), Inches(5.5), Inches(10), Inches(0.4),
font_size=11, bold=False, color=RGBColor(0xAA, 0xCC, 0xEE), align=PP_ALIGN.LEFT, italic=True)
add_footer(s)
# =============================================================================
# SLIDE 2 – DEFINITION
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "DEFINITION", "What is Anterior Uveitis?")
# Main definition box
add_rect(s, Inches(0.3), Inches(1.4), Inches(12.7), Inches(2.0), MID_BLUE)
add_text(s,
"Anterior uveitis is inflammation of the anterior uveal tract - the iris and the anterior part (pars plicata) "
"of the ciliary body - and is the most common form of uveitis.",
Inches(0.5), Inches(1.5), Inches(12.3), Inches(1.8),
font_size=18, bold=False, color=WHITE, align=PP_ALIGN.LEFT)
# Sub-terms
add_bullet_text(s,
["Iritis: inflammation primarily involving the iris",
"Iridocyclitis: inflammation of both iris and anterior ciliary body",
"Both terms are used interchangeably as they cannot be distinguished clinically"],
Inches(0.3), Inches(3.55), Inches(6.0), Inches(1.6),
bg_color=WHITE, title="Terminology", text_color=DARK_TEXT)
add_bullet_text(s,
["Acute (AAU): sudden onset, limited duration (≤3 months)",
"Chronic (CAU): persistent >3 months; less common than AAU",
"Recurrent: repeated episodes with untreated inactive periods between"],
Inches(6.5), Inches(3.55), Inches(6.5), Inches(1.6),
bg_color=WHITE, title="Classification by Course", text_color=DARK_TEXT)
add_text(s, "Most common anatomical form of uveitis worldwide",
Inches(0.3), Inches(5.3), Inches(12.7), Inches(0.4),
font_size=13, bold=True, color=MID_BLUE, align=PP_ALIGN.CENTER)
add_footer(s)
# =============================================================================
# SLIDE 3 – ETIOLOGY
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "ETIOLOGY", "Causes and Systemic Associations")
col1 = [
"Idiopathic: ~50% of all cases; no detectable systemic cause",
"HLA-B27-associated: ankylosing spondylitis, reactive arthritis (Reiter syndrome), psoriatic arthritis, IBD-associated arthritis",
"Sarcoidosis: granulomatous; may be bilateral and chronic",
"Juvenile Idiopathic Arthritis (JIA): typically chronic; pauciarticular type",
"Behcet disease: recurrent hypopyon uveitis; fibrin-poor (shifts with head position)",
]
col2 = [
"Infectious causes:",
" - Herpes simplex virus (HSV)",
" - Varicella zoster virus (VZV) - often post-shingles",
" - Cytomegalovirus (CMV)",
" - Tuberculosis",
" - Syphilis",
" - Toxoplasmosis",
"Traumatic / post-surgical uveitis",
"Lens-induced uveitis",
"Fuchs Uveitis Syndrome (FUS)",
]
add_bullet_text(s, col1, Inches(0.3), Inches(1.4), Inches(6.4), Inches(5.8),
bg_color=WHITE, title="Non-Infectious Causes", text_color=DARK_TEXT, font_size=13)
add_bullet_text(s, col2, Inches(6.8), Inches(1.4), Inches(6.3), Inches(5.8),
bg_color=WHITE, title="Infectious & Other", text_color=DARK_TEXT, font_size=13)
add_footer(s)
# =============================================================================
# SLIDE 4 – SYMPTOMS
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "SYMPTOMS", "Patient Complaints in Anterior Uveitis")
symptoms_aau = [
"Acute onset unilateral eye PAIN",
"PHOTOPHOBIA (light sensitivity)",
"VISUAL BLURRING / visual loss",
"REDNESS of the eye (circumcorneal)",
"WATERY / lacrimation discharge",
"History of previous similar episodes (recurrent AAU)",
"Sometimes preceded by mild ocular discomfort for a few days",
]
symptoms_cau = [
"Can be INSIDIOUS or asymptomatic",
"Often asymptomatic until complications arise (e.g. cataract)",
"Gradual visual decline",
"Mild to no redness in some forms",
"May be bilateral (unlike AAU which is typically unilateral)",
]
add_bullet_text(s, symptoms_aau, Inches(0.3), Inches(1.4), Inches(6.4), Inches(5.8),
bg_color=WHITE, title="Acute Anterior Uveitis (AAU)", text_color=DARK_TEXT, font_size=14)
add_bullet_text(s, symptoms_cau, Inches(6.8), Inches(1.4), Inches(6.3), Inches(5.8),
bg_color=WHITE, title="Chronic Anterior Uveitis (CAU)", text_color=DARK_TEXT, font_size=14)
add_footer(s)
# =============================================================================
# SLIDE 5 – SIGNS (with image)
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "SIGNS", "Slit-Lamp & Clinical Findings")
signs = [
"Ciliary injection: perilimbal conjunctival hyperaemia with violaceous (purple) hue",
"Miosis: pupillary sphincter spasm; predisposes to posterior synechiae",
"Anterior chamber CELLS: graded by SUN Working Group (1 mm x 1 mm slit beam)",
"Aqueous FLARE: haziness from protein leakage (blood-aqueous barrier breakdown)",
"HYPOPYON: white purulent layer in inferior AC (gravity dependent)",
"Keratic Precipitates (KP): inflammatory cell deposits on corneal endothelium",
" - Fine KP: non-granulomatous (AAU)",
" - Mutton-fat KP: large, greasy - granulomatous uveitis",
" - Stellate KP: star-shaped - Fuchs Uveitis Syndrome",
" - Arlt triangle: inferior triangular KP distribution",
"Posterior synechiae: iris-lens adhesions (irregular pupil)",
"Iris nodules: Koeppe (pupil margin) / Busacca (iris stroma) - granulomatous",
"Reduced visual acuity (variable severity)",
]
add_bullet_text(s, signs, Inches(0.3), Inches(1.4), Inches(7.5), Inches(5.8),
bg_color=WHITE, title="Key Signs", text_color=DARK_TEXT, font_size=12)
# Add KP image
add_image_safe(s, IMG_KP2, Inches(8.0), Inches(1.5), Inches(4.8), Inches(2.8))
add_text(s, "Fine KP on corneal endothelium",
Inches(8.0), Inches(4.35), Inches(4.8), Inches(0.4),
font_size=10, bold=False, color=DARK_TEXT, align=PP_ALIGN.CENTER, italic=True)
add_image_safe(s, IMG_GRAN, Inches(8.0), Inches(4.9), Inches(4.8), Inches(2.1))
add_text(s, "Mutton-fat KP (granulomatous)",
Inches(8.0), Inches(6.95), Inches(4.8), Inches(0.35),
font_size=10, bold=False, color=DARK_TEXT, align=PP_ALIGN.CENTER, italic=True)
add_footer(s)
# =============================================================================
# SLIDE 6 – CLINICAL FEATURES (combined summary with hypopyon image)
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "CLINICAL FEATURES", "Key Presentations & Grading")
features = [
"AC Cell Grading (SUN Working Group):",
" Grade 0: <1 cell | Grade 0.5+: 1-5 cells",
" Grade 1+: 6-15 | Grade 2+: 16-25 | Grade 3+: 26-50 | Grade 4+: >50 cells",
"",
"Aqueous Flare Grading:",
" Grade 0: None | Grade 1+: Faint | Grade 2+: Moderate (iris/lens clear)",
" Grade 3+: Marked (iris/lens hazy) | Grade 4+: Intense (fibrin/plastic aqueous)",
"",
"Hypopyon in HLA-B27 disease: immobile (high fibrin)",
"Hypopyon in Behcet: mobile (shifts with head position - low fibrin)",
"",
"Granulomatous vs Non-Granulomatous:",
" Non-granulomatous: fine/medium KP, no iris nodules - typical in AAU",
" Granulomatous: mutton-fat KP, Koeppe / Busacca nodules - typical in CAU",
]
add_bullet_text(s, features, Inches(0.3), Inches(1.4), Inches(7.5), Inches(5.8),
bg_color=WHITE, title=None, text_color=DARK_TEXT, font_size=13)
add_image_safe(s, IMG_SYN, Inches(8.0), Inches(1.5), Inches(4.8), Inches(5.5))
add_text(s, "Hypopyon, posterior synechiae & fibrin - acute anterior uveitis",
Inches(8.0), Inches(7.0), Inches(4.8), Inches(0.35),
font_size=9, bold=False, color=DARK_TEXT, align=PP_ALIGN.CENTER, italic=True)
add_footer(s)
# =============================================================================
# SLIDE 7 – COMPLICATIONS
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "COMPLICATIONS", "Sequelae of Untreated / Recurrent Anterior Uveitis")
comp1 = [
"Posterior synechiae: iris adherent to lens capsule; irregular pupil",
"Iris bombe: 360° synechiae; aqueous trapped; iris bows forward",
"Secondary angle-closure glaucoma: from iris bombe or PAS",
"Secondary open-angle glaucoma: trabecular obstruction by inflammatory cells",
"Steroid-induced glaucoma: from topical or systemic corticosteroids",
"Hypotony: ciliary body shutdown; reduced aqueous production",
]
comp2 = [
"Cataract (posterior subcapsular): steroid-induced or from inflammation",
"Band keratopathy: calcium deposition in Bowman layer (common in JIA-CAU)",
"Cystoid Macular Oedema (CMO): most common cause of visual loss",
"Epiretinal membrane formation",
"Corneal decompensation: from chronic endothelial damage",
"Phthisis bulbi: end-stage scarring and shrinkage of globe",
]
add_bullet_text(s, comp1, Inches(0.3), Inches(1.4), Inches(6.4), Inches(5.8),
bg_color=WHITE, title="Structural / Pressure Complications", text_color=DARK_TEXT, font_size=13)
add_bullet_text(s, comp2, Inches(6.8), Inches(1.4), Inches(6.3), Inches(5.8),
bg_color=WHITE, title="Lens, Macular & Corneal Complications", text_color=DARK_TEXT, font_size=13)
add_footer(s)
# =============================================================================
# SLIDE 8 – DIFFERENTIAL DIAGNOSIS
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "DIFFERENTIAL DIAGNOSIS", "Conditions Mimicking Anterior Uveitis")
dd = [
("Acute Conjunctivitis",
"Diffuse redness, discharge; NO KP, NO AC cells, NO photophobia; vision normal"),
("Acute Angle-Closure Glaucoma",
"Severe pain, fixed mid-dilated pupil, very high IOP, corneal oedema; no KP"),
("Scleritis",
"Deep boring pain, scleral injection; may cause secondary uveitis"),
("Keratitis (Corneal Ulcer)",
"Corneal infiltrate/ulcer; secondary AC reaction; starts with corneal signs"),
("Endophthalmitis",
"Post-surgical; severe pain and vision loss; hypopyon + vitreous cells"),
("Episcleritis",
"Sectoral redness, mild discomfort; NO AC cells; self-limiting"),
("Fuchs Uveitis Syndrome",
"Unilateral chronic; diffuse stellate KP; heterochromia; NO synechiae; minimal symptoms"),
("Posner-Schlossman Syndrome",
"Recurrent unilateral; very high IOP with minimal AC reaction; CMV-linked"),
("Masquerade Syndromes",
"Intraocular lymphoma / retinoblastoma / leukemia presenting as uveitis"),
]
tb = slide.shapes.add_textbox if False else None # placeholder
tb2 = prs.slides[-1].shapes.add_textbox(Inches(0.3), Inches(1.4), Inches(12.7), Inches(5.8))
tf2 = tb2.text_frame
tf2.word_wrap = True
tf2.margin_left = Inches(0.1)
first = True
for condition, distinction in dd:
p = tf2.paragraphs[0] if first else tf2.add_paragraph()
first = False
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = f" \u25B6 "
run.font.size = Pt(13)
run.font.bold = True
run.font.color.rgb = MID_BLUE
run.font.name = "Calibri"
run2 = p.add_run()
run2.text = f"{condition}: "
run2.font.size = Pt(13)
run2.font.bold = True
run2.font.color.rgb = DARK_BLUE
run2.font.name = "Calibri"
run3 = p.add_run()
run3.text = distinction
run3.font.size = Pt(12)
run3.font.bold = False
run3.font.color.rgb = DARK_TEXT
run3.font.name = "Calibri"
add_footer(s)
# =============================================================================
# SLIDE 9 – INVESTIGATIONS
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "INVESTIGATIONS", "Work-Up for Anterior Uveitis")
inv1 = [
"HLA-B27 typing: mandatory in recurrent / chronic non-granulomatous AU; present in 50% idiopathic AAU, 90% AAU with spondyloarthropathy",
"FBC + ESR + CRP: baseline inflammatory markers",
"Syphilis serology: VDRL/RPR (early infection) + ELISA treponemal Ab (sensitive/specific); both required",
"Serum ACE + Serum lysozyme: elevated in ~80% acute sarcoidosis; granulomatous uveitis screen",
"Chest X-ray: sarcoidosis, TB, lymphoma",
"Mantoux / IGRA (QuantiFERON-TB): latent TB screening",
"Serum calcium: hypercalcaemia in sarcoidosis",
"Rheumatoid factor + ANA: JIA, SLE screen (especially in children)",
]
inv2 = [
"OCULAR INVESTIGATIONS:",
"Slit-lamp biomicroscopy: essential - grade cells, flare, KP type, synechiae",
"Intraocular pressure (IOP): raised in secondary glaucoma",
"Gonioscopy: angle assessment for synechiae / neovascularisation",
"OCT (macula): detect cystoid macular oedema (CMO)",
"Fundus examination: rule out posterior involvement",
"Anterior segment OCT (swept-source): sensitive for cells in AC",
"Laser flare photometry: objective flare quantification",
"Aqueous tap + PCR: viral uveitis (HSV, VZV, CMV) when clinically suspected",
"Fluorescein angiography: CMO, posterior extension",
]
add_bullet_text(s, inv1, Inches(0.3), Inches(1.4), Inches(6.4), Inches(5.8),
bg_color=WHITE, title="Systemic / Lab Investigations", text_color=DARK_TEXT, font_size=12)
add_bullet_text(s, inv2, Inches(6.8), Inches(1.4), Inches(6.3), Inches(5.8),
bg_color=WHITE, title="Ocular Investigations", text_color=DARK_TEXT, font_size=12)
add_footer(s)
# =============================================================================
# SLIDE 10 – TREATMENT
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, LIGHT_BLUE)
add_header_bar(s, "TREATMENT", "Management of Anterior Uveitis")
tr1 = [
"TOPICAL CORTICOSTEROIDS (first-line):",
" - Prednisolone acetate 1% / Dexamethasone 0.1%",
" - Initially hourly (severe), taper slowly over weeks",
" - Prevent recurrence in chronic cases",
"",
"MYDRIATICS / CYCLOPLEGICS:",
" - Cyclopentolate 1% OR Atropine 1% (severe)",
" - Dilates pupil, prevents posterior synechiae formation",
" - Relieves ciliary muscle spasm (reduces pain)",
"",
"PERIOCULAR STEROIDS:",
" - Sub-Tenon triamcinolone acetonide",
" - Useful in unilateral severe or chronic AAU",
"",
"SYSTEMIC CORTICOSTEROIDS:",
" - For bilateral, severe, or systemic disease",
]
tr2 = [
"IMMUNOSUPPRESSIVE THERAPY (steroid-sparing):",
" - Methotrexate: JIA-associated CAU",
" - Azathioprine, Mycophenolate mofetil",
" - Cyclosporine",
" - Anti-TNF agents (adalimumab): FDA-approved for non-infectious uveitis",
"",
"ANTI-VIRAL THERAPY:",
" - Acyclovir / Valacyclovir: HSV / VZV uveitis",
" - Valganciclovir / Ganciclovir: CMV uveitis",
"",
"ANTI-GLAUCOMA TREATMENT:",
" - Beta-blockers, CAIs, prostaglandin analogues",
" - Avoid miotics (worsen synechiae)",
"",
"SURGICAL:",
" - Laser iridotomy (iris bombe / angle closure)",
" - Cataract extraction when cataract reduces vision",
" - Trabeculectomy / glaucoma drainage device",
]
add_bullet_text(s, tr1, Inches(0.3), Inches(1.4), Inches(6.4), Inches(5.8),
bg_color=WHITE, title="Medical Treatment", text_color=DARK_TEXT, font_size=11.5)
add_bullet_text(s, tr2, Inches(6.8), Inches(1.4), Inches(6.3), Inches(5.8),
bg_color=WHITE, title="Advanced & Surgical Treatment", text_color=DARK_TEXT, font_size=11.5)
add_footer(s)
# =============================================================================
# SLIDE 11 – SUMMARY / TAKE-HOME
# =============================================================================
s = prs.slides.add_slide(blank_layout)
slide_background(s, DARK_BLUE)
add_rect(s, Inches(0), Inches(0), prs.slide_width, Inches(7.5), DARK_BLUE)
add_rect(s, Inches(0), Inches(0), prs.slide_width, Inches(0.08), GOLD)
add_rect(s, Inches(0), Inches(7.42), prs.slide_width, Inches(0.08), GOLD)
add_text(s, "SUMMARY: KEY TAKE-HOME POINTS",
Inches(0.4), Inches(0.15), Inches(12.5), Inches(0.8),
font_size=28, bold=True, color=GOLD, align=PP_ALIGN.CENTER)
summary_points = [
"Anterior uveitis = inflammation of iris + anterior ciliary body; MOST COMMON form of uveitis",
"Symptoms (AAU): acute unilateral pain, photophobia, redness, visual blurring",
"Classic signs: ciliary injection, miosis, AC cells & flare, KP, hypopyon, posterior synechiae",
"50% idiopathic; HLA-B27-positive in 50% of AAU patients; screen for spondyloarthropathy, sarcoidosis, syphilis, TB",
"Granulomatous (mutton-fat KP, iris nodules) vs Non-granulomatous (fine KP) distinction is essential",
"Key complications: secondary glaucoma, cataract, CMO, band keratopathy, iris bombe",
"First-line treatment: topical corticosteroids + cycloplegics; antiviral for viral aetiology",
"Immunosuppressives (methotrexate, adalimumab) for refractory / systemic cases",
"Prognosis: good in idiopathic/HLA-B27 AAU with adequate treatment; variable in CAU",
]
tb = s.shapes.add_textbox(Inches(0.6), Inches(1.1), Inches(12.1), Inches(6.0))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Inches(0.1)
first = True
for pt in summary_points:
p = tf.paragraphs[0] if first else tf.add_paragraph()
first = False
run = p.add_run()
run.text = f" \u2713 {pt}"
run.font.size = Pt(14)
run.font.color.rgb = WHITE
run.font.name = "Calibri"
add_image_safe(s, IMG_KP1, Inches(10.5), Inches(5.2), Inches(2.5), Inches(1.8))
add_footer(s, "Kanski's Clinical Ophthalmology, 10th Ed. | Anterior Uveitis")
# =============================================================================
# SAVE
# =============================================================================
out_path = "/tmp/workspace/anterior-uveitis-ppt/Anterior_Uveitis_Ophthalmology.pptx"
prs.save(out_path)
print(f"Saved: {out_path}")
cd /tmp/workspace/anterior-uveitis-ppt && python build_ppt.py 2>&1
~/anterior-uveitis-ppt/build_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/anterior-uveitis-ppt/build_ppt.py'
~/anterior-uveitis-ppt/build_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/anterior-uveitis-ppt/build_ppt.py'
~/anterior-uveitis-ppt/build_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/anterior-uveitis-ppt/build_ppt.py'
~/anterior-uveitis-ppt/build_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/anterior-uveitis-ppt/build_ppt.py'
~/anterior-uveitis-ppt/build_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/anterior-uveitis-ppt/build_ppt.py'
cd /tmp/workspace/anterior-uveitis-ppt && python build_ppt.py 2>&1
ls -lh /tmp/workspace/anterior-uveitis-ppt/
Anterior Uveitis Ophthalmology
Presentation · PPTX
| Slide | Heading |
|---|---|
| 1 | Title Slide - Anterior Uveitis with eye anatomy image |
| 2 | Definition - Iritis / Iridocyclitis / AAU vs CAU classification |
| 3 | Etiology - Idiopathic (~50%), HLA-B27, sarcoidosis, JIA, Behcet, infectious (HSV, VZV, CMV, TB, syphilis), traumatic |
| 4 | Symptoms - AAU vs CAU symptom comparison (pain, photophobia, redness, blurring) |
| 5 | Signs - Ciliary injection, miosis, AC cells, flare, hypopyon, KP types (fine / mutton-fat / stellate / Arlt triangle), posterior synechiae + clinical photos of KP |
| 6 | Clinical Features - SUN grading for AC cells & flare; granulomatous vs non-granulomatous + hypopyon/synechiae photo |
| 7 | Complications - Posterior synechiae, iris bombe, secondary glaucoma (open/closed angle), steroid-induced glaucoma, cataract, band keratopathy, CMO, corneal decompensation, phthisis bulbi |
| 8 | Differential Diagnosis - 9 differentials with key distinguishing features (conjunctivitis, AACG, scleritis, keratitis, endophthalmitis, episcleritis, FUS, Posner-Schlossman, masquerade syndromes) |
| 9 | Investigations - HLA-B27, syphilis serology (VDRL + ELISA), serum ACE, CXR, IGRA, ANA, slit-lamp grading, OCT, aqueous PCR, laser flare photometry |
| 10 | Treatment - Topical steroids, cycloplegics, periocular/systemic steroids, immunosuppressives (MTX, adalimumab), antivirals (acyclovir, valganciclovir), anti-glaucoma, surgical options |
| 11 | Summary - 9 key take-home points + clinical photo |