Make a ppt on proptosis for ent post graduates
mkdir -p /home/daytona/workspace/proptosis-ppt && ls /home/daytona/workspace/proptosis-ppt/
~/proptosis-ppt/proptosis.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Proptosis - ENT Postgraduate Seminar";
pres.author = "ENT Department";
// ─── COLOR PALETTE ───────────────────────────────────────────────
const C = {
bg_dark: "0D1B2A", // deep navy
bg_mid: "1B2E45", // mid navy
bg_light: "F5F7FA", // near white
accent1: "2EC4B6", // teal
accent2: "F4A261", // amber
accent3: "E63946", // red
white: "FFFFFF",
text_dark: "1A1A2E",
text_gray: "455A64",
sep_line: "2EC4B6",
};
// ─── HELPER: dark slide background ───────────────────────────────
function darkBg(slide) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.bg_dark }, line: { color: C.bg_dark } });
}
function lightBg(slide) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.bg_light }, line: { color: C.bg_light } });
}
function midBg(slide) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.bg_mid }, line: { color: C.bg_mid } });
}
// ─── SLIDE TITLE BAR (dark slides) ───────────────────────────────
function darkTitleBar(slide, text) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.accent1 }, line: { color: C.accent1 } });
slide.addText(text, { x: 0.3, y: 0, w: 9.4, h: 0.85, fontSize: 22, bold: true, color: C.bg_dark, valign: "middle", margin: 0 });
}
// ─── SLIDE TITLE BAR (light slides) ──────────────────────────────
function lightTitleBar(slide, text) {
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: C.bg_dark }, line: { color: C.bg_dark } });
slide.addText(text, { x: 0.3, y: 0, w: 9.4, h: 0.85, fontSize: 22, bold: true, color: C.accent1, valign: "middle", margin: 0 });
// teal underline
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 10, h: 0.06, fill: { color: C.accent1 }, line: { color: C.accent1 } });
}
// ─── bullet helper ────────────────────────────────────────────────
function mkBullets(items, opts = {}) {
return items.map((item, i) => ({
text: item,
options: { bullet: { code: "2022" }, breakLine: i < items.length - 1, ...opts }
}));
}
// =================================================================
// SLIDE 1 – TITLE SLIDE
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
// Large dark block left
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: C.accent1 }, line: { color: C.accent1 } });
// Orbital eye circle graphic placeholder
s.addShape(pres.ShapeType.ellipse, { x: 6.5, y: 0.6, w: 3.1, h: 3.1, fill: { color: C.bg_mid }, line: { color: C.accent1, width: 4 } });
s.addShape(pres.ShapeType.ellipse, { x: 7.3, y: 1.4, w: 1.5, h: 1.5, fill: { color: C.accent1 }, line: { color: C.accent1 } });
s.addShape(pres.ShapeType.ellipse, { x: 7.75, y: 1.85, w: 0.6, h: 0.6, fill: { color: C.bg_dark }, line: { color: C.bg_dark } });
s.addText("PROPTOSIS", { x: 0.4, y: 1.0, w: 6, h: 1.1, fontSize: 48, bold: true, color: C.white, charSpacing: 4 });
s.addText("Exophthalmos & Orbital Disease", { x: 0.4, y: 2.15, w: 6, h: 0.55, fontSize: 20, color: C.accent1, italic: true });
s.addShape(pres.ShapeType.rect, { x: 0.4, y: 2.75, w: 5.5, h: 0.05, fill: { color: C.accent2 }, line: { color: C.accent2 } });
s.addText("ENT Postgraduate Seminar", { x: 0.4, y: 2.9, w: 6, h: 0.4, fontSize: 15, color: C.text_gray });
s.addText("Based on KJ Lee's Essential Otolaryngology &\nKanski's Clinical Ophthalmology", { x: 0.4, y: 4.6, w: 6, h: 0.7, fontSize: 10, color: "607D8B", italic: true });
}
// =================================================================
// SLIDE 2 – OVERVIEW / AGENDA
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
darkTitleBar(s, "Lecture Overview");
const topics = [
["01", "Definition & Anatomy"],
["02", "Clinical Assessment & Measurement"],
["03", "Classification of Causes"],
["04", "Inflammatory / Thyroid Eye Disease"],
["05", "Infectious Causes - Orbital Cellulitis"],
["06", "Neoplastic Causes"],
["07", "Vascular & Traumatic Causes"],
["08", "Investigation & Workup"],
["09", "Management Principles"],
["10", "Surgical Decompression"],
];
topics.forEach(([num, title], i) => {
const col = i < 5 ? 0 : 1;
const row = i < 5 ? i : i - 5;
const x = 0.4 + col * 4.9;
const y = 1.05 + row * 0.82;
s.addShape(pres.ShapeType.rect, { x, y, w: 0.5, h: 0.45, fill: { color: C.accent1 }, line: { color: C.accent1 }, rectRadius: 0.06 });
s.addText(num, { x, y, w: 0.5, h: 0.45, fontSize: 11, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addText(title, { x: x + 0.58, y: y + 0.02, w: 4.1, h: 0.42, fontSize: 13, color: C.white, valign: "middle" });
});
}
// =================================================================
// SLIDE 3 – DEFINITION & ANATOMY
// =================================================================
{
const s = pres.addSlide();
lightBg(s);
lightTitleBar(s, "Definition & Orbital Anatomy");
// Two-column layout
// LEFT column – definitions
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.1, w: 4.5, h: 4.0, fill: { color: C.bg_dark }, line: { color: C.bg_dark }, rectRadius: 0.1 });
s.addText("Definitions", { x: 0.4, y: 1.15, w: 4.3, h: 0.45, fontSize: 15, bold: true, color: C.accent1 });
s.addText([
{ text: "Proptosis", options: { bold: true, color: C.accent2, breakLine: true } },
{ text: "Abnormal anterior protrusion of the eyeball beyond the orbital rim. Broadly applied to any organ protrusion.\n", options: { color: C.white, fontSize: 11, breakLine: true } },
{ text: "Exophthalmos", options: { bold: true, color: C.accent2, breakLine: true } },
{ text: "Specifically refers to protrusion of the eyeball only (Greek: ex = out, ophthalmos = eye).\n", options: { color: C.white, fontSize: 11, breakLine: true } },
{ text: "Normal values", options: { bold: true, color: C.accent1, breakLine: true } },
{ text: "> 20 mm = proptosis\n2-3 mm asymmetry = significant\n(Hertel exophthalmometer)", options: { color: C.white, fontSize: 11 } },
], { x: 0.4, y: 1.65, w: 4.3, h: 3.3, valign: "top" });
// RIGHT column – anatomy bullets
s.addShape(pres.ShapeType.rect, { x: 5.1, y: 1.1, w: 4.55, h: 4.0, fill: { color: "E8F0F5" }, line: { color: C.accent1, width: 1 }, rectRadius: 0.1 });
s.addText("Orbital Anatomy (Relevant)", { x: 5.2, y: 1.15, w: 4.3, h: 0.45, fontSize: 15, bold: true, color: C.bg_dark });
s.addText([
{ text: "Volume: ~30 mL; 4-walled bony cone", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Roof: Orbital plate of frontal bone + lesser wing of sphenoid", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Medial wall: Lamina papyracea (ethmoid) - thinnest wall; route for sinus spread", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Floor: Maxillary + zygomatic bone", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Lateral wall: Zygomatic + greater sphenoid wing (strongest)", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Optic nerve: 25 mm intraorbital length vs 18 mm orbital depth → allows protrusion without stretching", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Orbital septum: Key landmark - preseptal vs postseptal disease distinction", options: { bullet: { code: "25B8" }, color: C.text_dark, fontSize: 11 } },
], { x: 5.2, y: 1.65, w: 4.3, h: 3.35, valign: "top" });
}
// =================================================================
// SLIDE 4 – CLINICAL ASSESSMENT
// =================================================================
{
const s = pres.addSlide();
lightBg(s);
lightTitleBar(s, "Clinical Assessment of Proptosis");
// History box
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.05, w: 4.5, h: 2.1, fill: { color: C.bg_dark }, line: { color: C.bg_dark }, rectRadius: 0.08 });
s.addText("History", { x: 0.45, y: 1.1, w: 4.2, h: 0.4, fontSize: 14, bold: true, color: C.accent1 });
s.addText([
{ text: "Onset: Acute (infection/trauma) vs chronic (tumor)", options: { bullet: true, color: C.white, fontSize: 11, breakLine: true } },
{ text: "Unilateral vs bilateral (bilateral suggests systemic cause)", options: { bullet: true, color: C.white, fontSize: 11, breakLine: true } },
{ text: "Associated pain, diplopia, visual loss, epiphora", options: { bullet: true, color: C.white, fontSize: 11, breakLine: true } },
{ text: "Thyroid disease, malignancy, sinus disease, trauma history", options: { bullet: true, color: C.white, fontSize: 11 } },
], { x: 0.45, y: 1.52, w: 4.2, h: 1.55, valign: "top" });
// Examination box
s.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.05, w: 4.5, h: 2.1, fill: { color: C.bg_dark }, line: { color: C.bg_dark }, rectRadius: 0.08 });
s.addText("Examination", { x: 5.35, y: 1.1, w: 4.2, h: 0.4, fontSize: 14, bold: true, color: C.accent1 });
s.addText([
{ text: "Exophthalmometry (Hertel): > 20 mm or > 2 mm asymmetry", options: { bullet: true, color: C.white, fontSize: 11, breakLine: true } },
{ text: "Direction: Axial (intraconal) vs dystopic (extraconal)", options: { bullet: true, color: C.white, fontSize: 11, breakLine: true } },
{ text: "Pulsation (bruit) → carotid-cavernous fistula or roof defect", options: { bullet: true, color: C.white, fontSize: 11, breakLine: true } },
{ text: "Valsalva manoeuvre: varices or capillary haemangioma", options: { bullet: true, color: C.white, fontSize: 11 } },
], { x: 5.35, y: 1.52, w: 4.2, h: 1.55, valign: "top" });
// Measurement box
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 3.3, w: 9.4, h: 2.05, fill: { color: "E3F6F5" }, line: { color: C.accent1, width: 1 }, rectRadius: 0.08 });
s.addText("Pseudoproptosis - Must Exclude!", { x: 0.45, y: 3.35, w: 9, h: 0.4, fontSize: 14, bold: true, color: C.accent3 });
s.addText([
{ text: "Facial asymmetry / shallow orbit", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Enlarged globe: high myopia, buphthalmos", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Eyelid retraction (lid lag, thyroid without true proptosis)", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Contralateral enophthalmos (e.g., post-orbital floor fracture on opposite side)", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11 } },
], { x: 0.45, y: 3.78, w: 4.6, h: 1.5, valign: "top" });
s.addText([
{ text: "Axial proptosis: intraconal lesion (e.g., cavernous haemangioma, optic nerve tumour)", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Dystopia: extraconal lesion displaces globe in coronal plane", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Lacrimal gland tumour → inferiomedial dystopia", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11, breakLine: true } },
{ text: "Forced duction test: restricts = myopathy; no resistance = neurological", options: { bullet: { code: "25CF" }, color: C.text_dark, fontSize: 11 } },
], { x: 5.1, y: 3.78, w: 4.55, h: 1.5, valign: "top" });
}
// =================================================================
// SLIDE 5 – CLASSIFICATION
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
darkTitleBar(s, "Classification of Causes");
const cats = [
{ label: "Inflammatory", color: C.accent1, items: ["Thyroid Eye Disease (most common)", "Idiopathic Orbital Inflammatory Syndrome (IOIS)", "Sarcoidosis", "Wegener's (GPA)", "IgG4-related disease"] },
{ label: "Infectious", color: C.accent3, items: ["Orbital cellulitis", "Subperiosteal abscess", "Mucormycosis (emergency!)", "Aspergillosis"] },
{ label: "Neoplastic", color: C.accent2, items: ["Primary: cavernous haemangioma, optic nerve glioma/meningioma, lacrimal gland tumour", "Secondary: sinus/intracranial extension", "Metastatic: breast, prostate, lung, melanoma"] },
{ label: "Vascular", color: "A29BFE", items: ["Carotid-cavernous fistula (pulsatile + bruit)", "Orbital varices (positional)", "Capillary haemangioma (children)"] },
{ label: "Traumatic", color: "FD79A8", items: ["Retrobulbar haemorrhage (emergency)", "Orbital fracture with emphysema", "Foreign body", "Carotid-cavernous fistula (post-trauma)"] },
{ label: "Structural", color: "55EFC4", items: ["Mucocele (fronto-ethmoidal most common)", "Sinus tumour extension", "Fibrous dysplasia", "Dermoid cyst"] },
];
cats.forEach((cat, i) => {
const col = i % 3;
const row = Math.floor(i / 3);
const x = 0.25 + col * 3.22;
const y = 1.0 + row * 2.25;
s.addShape(pres.ShapeType.rect, { x, y, w: 3.1, h: 2.1, fill: { color: C.bg_mid }, line: { color: cat.color, width: 2 }, rectRadius: 0.08 });
s.addShape(pres.ShapeType.rect, { x, y, w: 3.1, h: 0.38, fill: { color: cat.color }, line: { color: cat.color }, rectRadius: 0.06 });
s.addText(cat.label, { x, y, w: 3.1, h: 0.38, fontSize: 12, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addText(cat.items.map((it, idx) => ({
text: it,
options: { bullet: { code: "2022" }, color: C.white, fontSize: 9.5, breakLine: idx < cat.items.length - 1 }
})), { x: x + 0.12, y: y + 0.42, w: 2.9, h: 1.65, valign: "top" });
});
}
// =================================================================
// SLIDE 6 – THYROID EYE DISEASE (Graves Orbitopathy)
// =================================================================
{
const s = pres.addSlide();
lightBg(s);
lightTitleBar(s, "Thyroid Eye Disease (Graves Orbitopathy)");
// Pathophysiology strip
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.0, w: 9.4, h: 0.7, fill: { color: C.bg_dark }, line: { color: C.bg_dark }, rectRadius: 0.06 });
s.addText("Pathophysiology: Autoimmune disorder → TSH receptor (TSHR) auto-antigen → Orbitofibroblasts activated → Excessive adipogenesis + extraocular muscle volume ↑ (collagen / ECM overproduction)", {
x: 0.4, y: 1.0, w: 9.2, h: 0.7, fontSize: 11, color: C.white, valign: "middle"
});
// Two phases
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.82, w: 4.5, h: 1.65, fill: { color: "FFF3E0" }, line: { color: C.accent2, width: 1.5 }, rectRadius: 0.08 });
s.addText("Active Inflammatory Phase (1.5-3 years)", { x: 0.42, y: 1.87, w: 4.25, h: 0.4, fontSize: 12, bold: true, color: C.accent3 });
s.addText([
{ text: "Conjunctival injection & chemosis, lid redness/oedema", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Retrobulbar pain at rest / with gaze", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Immunosuppressive Rx effective in this phase", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Surgery CONTRAINDICATED in active phase", options: { bullet: true, color: C.accent3, bold: true, fontSize: 10.5 } },
], { x: 0.42, y: 2.3, w: 4.25, h: 1.12, valign: "top" });
s.addShape(pres.ShapeType.rect, { x: 5.2, y: 1.82, w: 4.5, h: 1.65, fill: { color: "E8F5E9" }, line: { color: C.accent1, width: 1.5 }, rectRadius: 0.08 });
s.addText("Cicatrizing/Inactive Phase", { x: 5.32, y: 1.87, w: 4.25, h: 0.4, fontSize: 12, bold: true, color: C.bg_dark });
s.addText([
{ text: "Structural changes stabilized", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Sequence of surgery: 1) Orbital decompression → 2) Strabismus surgery → 3) Lid surgery", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "DO NOT operate while active", options: { bullet: true, color: C.text_dark, fontSize: 10.5 } },
], { x: 5.32, y: 2.3, w: 4.25, h: 1.12, valign: "top" });
// EUGOGO / VISA grading + complications
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 3.6, w: 9.4, h: 1.75, fill: { color: C.bg_dark }, line: { color: C.bg_dark }, rectRadius: 0.08 });
s.addText("Clinical Features & Grading", { x: 0.45, y: 3.65, w: 4, h: 0.38, fontSize: 13, bold: true, color: C.accent1 });
s.addText("Grading Systems", { x: 5.0, y: 3.65, w: 4.5, h: 0.38, fontSize: 13, bold: true, color: C.accent1 });
s.addText([
{ text: "Upper lid retraction + scleral show (earliest sign)", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "Proptosis: globe decompresses anteriorly", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "Corneal exposure → keratopathy / ulcer", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "Restrictive myopathy: earliest ↓ in upgaze", options: { bullet: true, color: C.white, fontSize: 10.5 } },
], { x: 0.45, y: 4.05, w: 4.4, h: 1.2, valign: "top" });
s.addText([
{ text: "VISA (N. America): Vision, Inflammation, Strabismus, Appearance", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "EUGOGO (Europe): mild / moderate-severe / sight-threatening", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "NO SPEC (Werner) - obsolete, no longer used", options: { bullet: true, color: "B2DFDB", fontSize: 10.5, italic: true } },
], { x: 5.0, y: 4.05, w: 4.6, h: 1.2, valign: "top" });
}
// =================================================================
// SLIDE 7 – ORBITAL CELLULITIS
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
darkTitleBar(s, "Infectious Causes - Orbital Cellulitis");
// Chandler classification
s.addText("Chandler Classification (Post-septal / orbital complications of rhinosinusitis)", { x: 0.3, y: 0.95, w: 9.4, h: 0.38, fontSize: 13, bold: true, color: C.accent2 });
const stages = [
{ n: "I", label: "Preseptal (Periorbital) Cellulitis", desc: "Infection ANTERIOR to orbital septum. No proptosis. No restriction of EOM. IV antibiotics; no surgery." },
{ n: "II", label: "Orbital Cellulitis", desc: "Infection POSTERIOR to orbital septum. Chemosis + mild proptosis WITHOUT ophthalmoplegia." },
{ n: "III", label: "Subperiosteal Abscess", desc: "Pus between periorbita & bony wall. Proptosis + restricted EOM. CT scan essential. Surgical drainage ± IV antibiotics." },
{ n: "IV", label: "Orbital Abscess", desc: "Pus within orbital fat. Significant proptosis + ophthalmoplegia. HIGH risk of blindness. Urgent surgical drainage." },
{ n: "V", label: "Cavernous Sinus Thrombosis", desc: "Bilateral signs, high fever, meningism, sepsis. Life-threatening emergency. Systemic anticoagulation debated." },
];
stages.forEach((st, i) => {
const y = 1.4 + i * 0.79;
s.addShape(pres.ShapeType.rect, { x: 0.3, y, w: 0.55, h: 0.55, fill: { color: i < 2 ? C.accent1 : i < 4 ? C.accent2 : C.accent3 }, line: { color: "transparent" }, rectRadius: 0.08 });
s.addText(st.n, { x: 0.3, y, w: 0.55, h: 0.55, fontSize: 14, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addShape(pres.ShapeType.rect, { x: 1.0, y, w: 8.7, h: 0.55, fill: { color: C.bg_mid }, line: { color: i < 2 ? C.accent1 : i < 4 ? C.accent2 : C.accent3, width: 1 }, rectRadius: 0.06 });
s.addText([
{ text: st.label + ": ", options: { bold: true, color: i < 2 ? C.accent1 : i < 4 ? C.accent2 : C.accent3, fontSize: 11 } },
{ text: st.desc, options: { color: C.white, fontSize: 11 } },
], { x: 1.1, y, w: 8.5, h: 0.55, valign: "middle" });
});
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 5.3, w: 9.4, h: 0.2, fill: { color: C.bg_mid }, line: { color: C.bg_mid } });
s.addText("Key point: 80% of orbital cellulitis originates from paranasal sinuses (ethmoid most common). Fungal infection (mucormycosis/aspergillosis) = surgical emergency, especially in immunocompromised.", {
x: 0.35, y: 5.2, w: 9.3, h: 0.35, fontSize: 9.5, color: C.accent1, italic: true
});
}
// =================================================================
// SLIDE 8 – NEOPLASTIC CAUSES
// =================================================================
{
const s = pres.addSlide();
lightBg(s);
lightTitleBar(s, "Neoplastic Causes of Proptosis");
// Three categories
const cols = [
{
title: "Primary Orbital Tumours",
color: C.accent1,
items: [
"Cavernous haemangioma (most common benign adult orbital tumour) — intraconal, well-encapsulated",
"Hemangiopericytoma",
"Lymphoproliferative lesions",
"Optic nerve glioma (children) — NF1 association",
"Optic nerve sheath meningioma — optociliary shunts",
"Schwannoma / Neurofibroma",
"Lacrimal gland: Pleomorphic adenoma (benign) vs Adenoid cystic carcinoma (malignant, painful, perineural invasion)",
"Melanoma, Rhabdomyosarcoma (children)",
]
},
{
title: "Secondary / Invasive",
color: C.accent2,
items: [
"Sinus tumours: SCC, adenocarcinoma extending into orbit",
"Frontal sinus osteoma — superomedial displacement",
"Mucocele: fronto-ethmoidal, cystic expansion",
"Polypoid sinus disease",
"Intracranial meningioma — sphenoid wing extension",
"Nasopharyngeal carcinoma",
]
},
{
title: "Metastatic (order of frequency)",
color: C.accent3,
items: [
"1. Breast cancer (most common metastasis to orbit)",
"2. Prostate cancer",
"3. Melanoma",
"4. Lung cancer",
"Any Hx of malignancy → assume metastasis until proven otherwise",
"Treatment: chemotherapy + radiation (orbital exenteration usually not performed)",
]
},
];
cols.forEach((col, i) => {
const x = 0.3 + i * 3.22;
s.addShape(pres.ShapeType.rect, { x, y: 1.0, w: 3.1, h: 4.45, fill: { color: C.bg_dark }, line: { color: col.color, width: 2 }, rectRadius: 0.08 });
s.addShape(pres.ShapeType.rect, { x, y: 1.0, w: 3.1, h: 0.4, fill: { color: col.color }, line: { color: col.color }, rectRadius: 0.06 });
s.addText(col.title, { x: x + 0.1, y: 1.0, w: 2.9, h: 0.4, fontSize: 11, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addText(col.items.map((it, idx) => ({
text: it,
options: { bullet: { code: "2022" }, color: C.white, fontSize: 9.5, breakLine: idx < col.items.length - 1 }
})), { x: x + 0.1, y: 1.45, w: 2.95, h: 3.9, valign: "top" });
});
}
// =================================================================
// SLIDE 9 – VASCULAR & STRUCTURAL CAUSES
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
darkTitleBar(s, "Vascular, Traumatic & Structural Causes");
// 3 boxes top row
const topBoxes = [
{
title: "Carotid-Cavernous Fistula",
color: "A29BFE",
content: [
"Direct: High-flow (trauma, aneurysm rupture)",
"Indirect (dural): Low-flow (spontaneous, middle-aged women)",
"CLASSIC TRIAD: Pulsatile proptosis + Bruit + Chemosis (red eye)",
"Bruit abolished by carotid compression",
"Diagnosis: Angiography (gold standard)",
"Treatment: Endovascular occlusion",
]
},
{
title: "Retrobulbar Haemorrhage",
color: C.accent3,
content: [
"SURGICAL EMERGENCY - causes compartment syndrome",
"After trauma or retrobulbar block",
"Rapid proptosis + visual loss + firm orbit",
"Afferent pupillary defect = optic nerve compromise",
"Tx: Lateral canthotomy + cantholysis IMMEDIATELY",
"Target IOP relief before permanent vision loss",
]
},
{
title: "Orbital Varices",
color: "55EFC4",
content: [
"Venous malformation - intermittent proptosis",
"Classic: positional proptosis (bending forward, Valsalva, dependency)",
"No pulsation, no bruit",
"Diagnosis: CT/MRI (phleboliths)",
"Conservative management usually",
"Excision if severe functional impairment",
]
},
];
topBoxes.forEach((b, i) => {
const x = 0.25 + i * 3.22;
s.addShape(pres.ShapeType.rect, { x, y: 0.98, w: 3.1, h: 2.55, fill: { color: C.bg_mid }, line: { color: b.color, width: 2 }, rectRadius: 0.08 });
s.addShape(pres.ShapeType.rect, { x, y: 0.98, w: 3.1, h: 0.38, fill: { color: b.color }, line: { color: b.color }, rectRadius: 0.06 });
s.addText(b.title, { x: x + 0.1, y: 0.98, w: 2.9, h: 0.38, fontSize: 11, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addText(b.content.map((it, idx) => ({
text: it,
options: { bullet: { code: "2022" }, color: C.white, fontSize: 9.5, breakLine: idx < b.content.length - 1 }
})), { x: x + 0.1, y: 1.4, w: 2.95, h: 2.0, valign: "top" });
});
// Structural causes bottom strip
s.addShape(pres.ShapeType.rect, { x: 0.25, y: 3.68, w: 9.5, h: 1.75, fill: { color: C.bg_mid }, line: { color: "55EFC4", width: 1 }, rectRadius: 0.08 });
s.addText("Structural Causes", { x: 0.4, y: 3.73, w: 9, h: 0.38, fontSize: 13, bold: true, color: "55EFC4" });
s.addText([
{ text: "Dermoid cyst: superolateral (most common benign lesion in children); CT shows bony remodelling", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "Mucocele: fronto-ethmoidal sinus cystic expansion; displaces globe inferolaterally; treatment = endoscopic sinus surgery", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "Fibrous dysplasia: bony expansion narrows orbital space; treat if vision threatened", options: { bullet: true, color: C.white, fontSize: 10.5, breakLine: true } },
{ text: "IOIS (Orbital Pseudotumour): idiopathic orbital inflammation; diagnosis of exclusion; exquisitely steroid-responsive", options: { bullet: true, color: C.white, fontSize: 10.5 } },
], { x: 0.4, y: 4.13, w: 9.2, h: 1.2, valign: "top" });
}
// =================================================================
// SLIDE 10 – INVESTIGATION
// =================================================================
{
const s = pres.addSlide();
lightBg(s);
lightTitleBar(s, "Investigation & Workup");
// Imaging
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.05, w: 6.0, h: 4.35, fill: { color: C.bg_dark }, line: { color: C.bg_dark }, rectRadius: 0.08 });
s.addText("Imaging", { x: 0.45, y: 1.1, w: 5.7, h: 0.4, fontSize: 14, bold: true, color: C.accent1 });
const imgData = [
{ mod: "CT Orbit", color: C.accent1, points: ["Best for bony details - fractures, foreign bodies, bony destruction", "Identifies location: intraconal vs extraconal", "Choice for trauma, orbital cellulitis (identify abscess)", "Demonstrate sinus disease (source of spread)", "Soft tissue windowing also helpful"] },
{ mod: "MRI Orbit", color: C.accent2, points: ["Superior soft tissue detail - optic nerve, orbital apex", "Best for optic nerve tumours (glioma, meningioma)", "Choice for cavernous sinus pathology, perineural invasion", "No radiation (preferred in children)", "Contrast useful for inflammatory vs neoplastic"] },
{ mod: "Angiography", color: "A29BFE", points: ["Gold standard for carotid-cavernous fistula", "Vascular tumours diagnosis", "Also therapeutic (endovascular occlusion)"] },
{ mod: "US (B-scan)", color: "55EFC4", points: ["Bedside, quick, no radiation", "Detect axial length (high myopia pseudoproptosis)", "Cystic vs solid lesions", "Varices (real-time Valsalva)"] },
];
imgData.forEach((im, i) => {
const y = 1.55 + i * 0.95;
s.addShape(pres.ShapeType.rect, { x: 0.4, y, w: 1.0, h: 0.38, fill: { color: im.color }, line: { color: im.color }, rectRadius: 0.05 });
s.addText(im.mod, { x: 0.4, y, w: 1.0, h: 0.38, fontSize: 9, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addText(im.points.map((p, idx) => ({
text: p,
options: { bullet: { code: "2022" }, color: C.white, fontSize: 9.5, breakLine: idx < im.points.length - 1 }
})), { x: 1.5, y, w: 4.65, h: 0.9, valign: "top" });
});
// Lab investigations
s.addShape(pres.ShapeType.rect, { x: 6.5, y: 1.05, w: 3.2, h: 4.35, fill: { color: "E3F6F5" }, line: { color: C.accent1, width: 1 }, rectRadius: 0.08 });
s.addText("Laboratory / Other", { x: 6.62, y: 1.1, w: 3.0, h: 0.4, fontSize: 13, bold: true, color: C.bg_dark });
s.addText([
{ text: "Thyroid function tests (T3, T4, TSH)", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "TSH receptor antibodies (TRAb/TSI)", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "cANCA/pANCA → GPA (Wegener's)", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "ACE level → Sarcoidosis", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "IgG4 levels → IgG4-related disease", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Blood cultures (orbital cellulitis)", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "FBC, CRP, ESR (inflammatory markers)", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Biopsy: open / FNAC for neoplastic lesions (medial or lateral orbitotomy approach)", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Exophthalmometry (Hertel): baseline + serial", options: { bullet: true, color: C.text_dark, fontSize: 10.5, breakLine: true } },
{ text: "Visual acuity + colour vision (RAPD if optic nerve involved)", options: { bullet: true, color: C.text_dark, fontSize: 10.5 } },
], { x: 6.62, y: 1.55, w: 3.0, h: 3.75, valign: "top" });
}
// =================================================================
// SLIDE 11 – MANAGEMENT PRINCIPLES
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
darkTitleBar(s, "Management Principles");
const mgmt = [
{
cond: "Thyroid Eye Disease",
color: C.accent1,
rx: "Active phase: IV methylprednisolone, Teprotumumab (anti-IGF-1R), selenium supplementation (mild). Avoid radioiodine (worsens GO). Smoking cessation. Inactive phase: orbital decompression → strabismus surgery → lid surgery."
},
{
cond: "Orbital Cellulitis",
color: C.accent3,
rx: "Broad-spectrum IV antibiotics (e.g., co-amoxiclav / ceftriaxone + metronidazole). CT imaging essential. Chandler III-IV: surgical drainage via anterior orbitotomy. Mucormycosis: urgent debridement + IV amphotericin B + reverse immunosuppression."
},
{
cond: "IOIS (Pseudotumour)",
color: C.accent2,
rx: "Systemic high-dose corticosteroids (diagnostic + therapeutic). Dramatic response confirms diagnosis. Refractory cases: immunosuppressants (methotrexate, mycophenolate), rituximab, low-dose radiotherapy."
},
{
cond: "Orbital Tumours",
color: "A29BFE",
rx: "Benign: observation vs surgical excision (lateral orbitotomy for intraconal lesions). Lacrimal gland: complete excision (biopsy may seed). Malignant: combined surgery + radiotherapy ± chemotherapy. Metastatic: systemic Rx + palliative RT."
},
{
cond: "Retrobulbar Haemorrhage",
color: "FD79A8",
rx: "EMERGENCY: Lateral canthotomy + inferior cantholysis within 2 hours. Reduce IOP (mannitol, acetazolamide). Surgical decompression if vision failing. This is a sight-saving procedure."
},
{
cond: "Carotid-Cavernous Fistula",
color: "55EFC4",
rx: "Endovascular occlusion (transarterial / transvenous coil embolisation). Low-flow dural fistulae: intermittent carotid compression (self-treatment). High-flow direct fistulae: urgent intervention to prevent vision loss."
},
];
mgmt.forEach((m, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.25 + col * 4.88;
const y = 1.0 + row * 1.5;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.72, h: 1.38, fill: { color: C.bg_mid }, line: { color: m.color, width: 1.5 }, rectRadius: 0.07 });
s.addText(m.cond, { x: x + 0.12, y: y + 0.04, w: 4.5, h: 0.35, fontSize: 12, bold: true, color: m.color });
s.addText(m.rx, { x: x + 0.12, y: y + 0.4, w: 4.5, h: 0.9, fontSize: 9.5, color: C.white, valign: "top" });
});
}
// =================================================================
// SLIDE 12 – SURGICAL DECOMPRESSION
// =================================================================
{
const s = pres.addSlide();
lightBg(s);
lightTitleBar(s, "Orbital Decompression - The ENT Perspective");
s.addShape(pres.ShapeType.rect, { x: 0.3, y: 1.05, w: 9.4, h: 0.65, fill: { color: "FFF3E0" }, line: { color: C.accent2, width: 1 }, rectRadius: 0.06 });
s.addText("Indications: Sight-threatening compressive optic neuropathy | Severe cosmetic/functional proptosis | Corneal exposure not controlled medically | Performed in INACTIVE phase of Graves orbitopathy", {
x: 0.45, y: 1.05, w: 9.1, h: 0.65, fontSize: 10.5, color: C.text_dark, valign: "middle"
});
// Approaches
const approaches = [
{ label: "Endoscopic (Transethmoidal)", color: C.accent1, details: ["CURRENT TREATMENT OF CHOICE for medial orbital wall", "Ethmoidectomy + removal of lamina papyracea + partial orbital floor resection", "Minimally invasive, excellent visualisation", "1-2 mm of proptosis reduction per wall decompressed", "Can be combined with open approach for lateral wall"] },
{ label: "Transantral (Caldwell-Luc)", color: C.accent2, details: ["Access to orbital floor via maxillary sinus", "Less commonly used now", "Risk: infraorbital nerve hypoesthesia", "May cause diplopia (inferior rectus herniation)"] },
{ label: "Lateral Orbitotomy (Krönlein)", color: "A29BFE", details: ["Removes lateral orbital wall (zygomatic-sphenoid)", "Best lateral decompression", "Used for intraconal tumour access", "Combined with medial for 2-wall decompression"] },
{ label: "Combined / Fat Removal", color: C.accent3, details: ["2-wall: medial + floor (most common for TED)", "3-wall: adds lateral (maximum decompression)", "Fat decompression alone: 2-4 mm reduction", "DOED (diplopia-oriented endoscopic decompression)"] },
];
approaches.forEach((a, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.3 + col * 4.85;
const y = 1.82 + row * 1.82;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 1.7, fill: { color: C.bg_dark }, line: { color: a.color, width: 2 }, rectRadius: 0.08 });
s.addShape(pres.ShapeType.rect, { x, y, w: 4.65, h: 0.38, fill: { color: a.color }, line: { color: a.color }, rectRadius: 0.06 });
s.addText(a.label, { x: x + 0.1, y, w: 4.45, h: 0.38, fontSize: 11, bold: true, color: C.bg_dark, align: "center", valign: "middle", margin: 0 });
s.addText(a.details.map((d, idx) => ({
text: d,
options: { bullet: { code: "2022" }, color: C.white, fontSize: 10, breakLine: idx < a.details.length - 1 }
})), { x: x + 0.12, y: y + 0.42, w: 4.42, h: 1.2, valign: "top" });
});
}
// =================================================================
// SLIDE 13 – SUMMARY / KEY POINTS
// =================================================================
{
const s = pres.addSlide();
darkBg(s);
// large teal header
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 1.1, fill: { color: C.accent1 }, line: { color: C.accent1 } });
s.addText("Summary & High-Yield Points", { x: 0.4, y: 0, w: 9.2, h: 1.1, fontSize: 26, bold: true, color: C.bg_dark, valign: "middle", charSpacing: 1 });
const points = [
["Normal Hertel value", "> 20 mm = proptosis; > 2-3 mm asymmetry = significant"],
["Most common cause (adult)", "Thyroid Eye Disease (Graves orbitopathy)"],
["Most common cause (child)", "Orbital cellulitis (from ethmoid sinusitis); dermoid cyst (benign tumour)"],
["Axial proptosis", "Intraconal lesion (cavernous haemangioma, optic nerve tumour)"],
["Pulsatile proptosis + Bruit", "Carotid-cavernous fistula"],
["Positional (Valsalva) proptosis", "Orbital varices"],
["Surgical emergency", "Retrobulbar haemorrhage → lateral canthotomy/cantholysis"],
["GO surgery sequence", "Decompression → Strabismus surgery → Lid surgery (inactive phase only)"],
["Decompression of choice", "Endoscopic transethmoidal (medial wall + floor)"],
["Orbital cellulitis source", "80% from paranasal sinuses; ethmoid most common"],
["Chandler III-IV", "Requires surgical drainage via orbitotomy"],
["Metastatic orbit", "Breast > Prostate > Melanoma > Lung"],
];
points.forEach((p, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const x = 0.3 + col * 4.88;
const y = 1.2 + row * 0.72;
s.addShape(pres.ShapeType.rect, { x, y, w: 4.72, h: 0.62, fill: { color: C.bg_mid }, line: { color: C.bg_mid }, rectRadius: 0.06 });
s.addShape(pres.ShapeType.rect, { x, y, w: 2.0, h: 0.62, fill: { color: "1F3551" }, line: { color: "1F3551" }, rectRadius: 0.06 });
s.addText(p[0], { x: x + 0.08, y, w: 1.9, h: 0.62, fontSize: 9.5, bold: true, color: C.accent1, valign: "middle" });
s.addText(p[1], { x: x + 2.1, y, w: 2.5, h: 0.62, fontSize: 9.5, color: C.white, valign: "middle" });
});
}
// =================================================================
// WRITE FILE
// =================================================================
pres.writeFile({ fileName: "/home/daytona/workspace/proptosis-ppt/Proptosis_ENT_PG.pptx" })
.then(() => console.log("DONE: /home/daytona/workspace/proptosis-ppt/Proptosis_ENT_PG.pptx"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/proptosis-ppt && node proptosis.js
Generate a quick reference PDF guide on proptosis differential diagnosis