create concise power point presentation under 12 slides on acromegaly for post graduate revision include reference slide and latest clinical trials
acromegaly treatment clinical trial
acromegaly 2024 2025 latest clinical trials treatment guidelines
PMID: 41773305
PMID: 38828555
PMID: 39378125
PMID: 41128642
PMID: 41140134
mkdir -p /tmp/workspace/acromegaly-pptx && ls /tmp/workspace/acromegaly-pptx/
~/acromegaly-pptx/build_pptx.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import io
# ─── Colour palette ───
NAVY = RGBColor(0x1A, 0x3A, 0x5C) # dark navy
TEAL = RGBColor(0x00, 0x7B, 0x8A) # accent teal
GOLD = RGBColor(0xE8, 0xA8, 0x00) # accent gold
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
LIGHT_BG = RGBColor(0xF2, 0xF6, 0xFA) # very light blue-grey
DARK_TEXT = RGBColor(0x1E, 0x2A, 0x38)
GREY_TEXT = RGBColor(0x55, 0x65, 0x72)
RED_ACCENT= RGBColor(0xC0, 0x39, 0x2B)
W = Inches(13.333)
H = Inches(7.5)
MARGIN = Inches(0.5)
prs = Presentation()
prs.slide_width = W
prs.slide_height = H
blank = prs.slide_layouts[6] # fully blank
# ═══════════════════════════════════════════════════════════════
# HELPERS
# ═══════════════════════════════════════════════════════════════
def add_rect(slide, x, y, w, h, fill_color, alpha=None):
shape = slide.shapes.add_shape(
1, # MSO_SHAPE_TYPE.RECTANGLE
x, y, w, h
)
shape.fill.solid()
shape.fill.fore_color.rgb = fill_color
shape.line.fill.background()
return shape
def add_text(slide, text, x, y, w, h,
font_name="Calibri", font_size=18, bold=False, italic=False,
color=DARK_TEXT, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.TOP,
wrap=True, margin=0):
tb = slide.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = v_anchor
tf.margin_left = Pt(margin)
tf.margin_right = Pt(margin)
tf.margin_top = Pt(margin)
tf.margin_bottom = Pt(margin)
p = tf.paragraphs[0]
p.alignment = align
run = p.add_run()
run.text = text
run.font.name = font_name
run.font.size = Pt(font_size)
run.font.bold = bold
run.font.italic = italic
run.font.color.rgb = color
return tb
def add_multiline(slide, lines, x, y, w, h,
font_name="Calibri", font_size=14, bold_first=False,
color=DARK_TEXT, align=PP_ALIGN.LEFT,
line_spacing=None, bullet_char="•"):
"""lines = list of strings. First line can be bold if bold_first."""
tb = slide.shapes.add_textbox(x, y, w, h)
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Pt(2)
tf.margin_right = Pt(2)
tf.margin_top = Pt(2)
tf.margin_bottom= Pt(2)
for i, line in enumerate(lines):
if i == 0:
p = tf.paragraphs[0]
else:
p = tf.add_paragraph()
p.alignment = align
if line_spacing:
p.line_spacing = line_spacing
run = p.add_run()
run.text = line
run.font.name = font_name
run.font.size = Pt(font_size)
run.font.bold = (i == 0 and bold_first)
run.font.color.rgb = color
return tb
def header_bar(slide, title, subtitle=None):
"""Navy header bar across the top."""
add_rect(slide, 0, 0, W, Inches(1.1), NAVY)
add_text(slide, title,
Inches(0.4), Inches(0.08), Inches(10), Inches(0.65),
font_name="Calibri", font_size=30, bold=True, color=WHITE,
v_anchor=MSO_ANCHOR.MIDDLE)
if subtitle:
add_text(slide, subtitle,
Inches(0.4), Inches(0.72), Inches(12), Inches(0.32),
font_name="Calibri", font_size=13, italic=True,
color=RGBColor(0xB0, 0xC8, 0xE0))
# thin teal accent bar
add_rect(slide, 0, Inches(1.1), W, Inches(0.04), TEAL)
def footer_bar(slide, left_text="Acromegaly | PG Revision 2025",
right_text=""):
add_rect(slide, 0, H - Inches(0.32), W, Inches(0.32),
RGBColor(0xE8, 0xEE, 0xF4))
add_text(slide, left_text,
Inches(0.3), H - Inches(0.30), Inches(8), Inches(0.28),
font_size=9, color=GREY_TEXT)
if right_text:
add_text(slide, right_text,
Inches(9), H - Inches(0.30), Inches(4), Inches(0.28),
font_size=9, color=GREY_TEXT, align=PP_ALIGN.RIGHT)
def content_area_y():
return Inches(1.18)
def content_h():
return Inches(5.9)
# ═══════════════════════════════════════════════════════════════
# SLIDE 1 — Title Slide
# ═══════════════════════════════════════════════════════════════
s1 = prs.slides.add_slide(blank)
add_rect(s1, 0, 0, W, H, NAVY)
add_rect(s1, 0, Inches(2.8), W, Inches(2.0), TEAL) # mid band
add_text(s1, "ACROMEGALY",
Inches(1), Inches(0.7), Inches(11.3), Inches(1.5),
font_size=56, bold=True, color=WHITE, align=PP_ALIGN.CENTER,
v_anchor=MSO_ANCHOR.MIDDLE)
add_text(s1, "Postgraduate Clinical Revision",
Inches(1), Inches(2.9), Inches(11.3), Inches(0.7),
font_size=24, bold=False, color=WHITE, align=PP_ALIGN.CENTER,
v_anchor=MSO_ANCHOR.MIDDLE)
add_text(s1, "Pathophysiology • Diagnosis • Management • Latest Evidence",
Inches(1), Inches(3.55), Inches(11.3), Inches(0.5),
font_size=16, italic=True, color=RGBColor(0xD0, 0xEA, 0xFF),
align=PP_ALIGN.CENTER)
add_text(s1, "Based on Harrison's 22e (2025) | Endocrine Society Guidelines | Clinical Trials 2024–2026",
Inches(1), Inches(5.5), Inches(11.3), Inches(0.4),
font_size=11, italic=True, color=RGBColor(0x90, 0xB8, 0xD8),
align=PP_ALIGN.CENTER)
add_text(s1, "July 2025",
Inches(1), Inches(6.0), Inches(11.3), Inches(0.35),
font_size=12, color=RGBColor(0x90, 0xB8, 0xD8),
align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════════
# SLIDE 2 — Overview & Epidemiology
# ═══════════════════════════════════════════════════════════════
s2 = prs.slides.add_slide(blank)
add_rect(s2, 0, 0, W, H, LIGHT_BG)
header_bar(s2, "Overview & Epidemiology",
"Rare but Treatable Endocrine Disorder")
footer_bar(s2, right_text="Slide 2")
CY = content_area_y()
CH = content_h()
# Left box
add_rect(s2, Inches(0.4), CY, Inches(5.9), Inches(5.5), WHITE)
add_text(s2, "Definition",
Inches(0.55), CY + Inches(0.1), Inches(5.6), Inches(0.4),
font_size=14, bold=True, color=TEAL)
add_multiline(s2, [
"• Chronic disorder of GH hypersecretion from a pituitary somatotroph adenoma",
"• Leads to excess IGF-1 production (predominantly hepatic)",
"• Pre-epiphyseal closure → Gigantism",
"• Post-epiphyseal closure → Acromegaly",
"• Often diagnosed with 7–10 year delay"
], Inches(0.55), CY + Inches(0.55), Inches(5.6), Inches(2.0), font_size=13, color=DARK_TEXT)
add_text(s2, "Epidemiology",
Inches(0.55), CY + Inches(2.65), Inches(5.6), Inches(0.4),
font_size=14, bold=True, color=TEAL)
add_multiline(s2, [
"• Prevalence: ~60 cases/million; Incidence: ~3–4/million/year",
"• Peak age: 40–50 years; equal sex distribution",
"• ~20,000 cases/year in USA; global prevalence rising with better detection",
"• Mortality: 2–3× increased vs general population (CV, respiratory, malignancy)"
], Inches(0.55), CY + Inches(3.1), Inches(5.6), Inches(1.8), font_size=13, color=DARK_TEXT)
# Right box
add_rect(s2, Inches(6.6), CY, Inches(6.3), Inches(5.5), WHITE)
add_text(s2, "Aetiology",
Inches(6.75), CY + Inches(0.1), Inches(6.0), Inches(0.4),
font_size=14, bold=True, color=TEAL)
add_multiline(s2, [
"95–98% — Sporadic GH-secreting pituitary adenoma",
"",
"Rare causes:",
"• Familial isolated pituitary adenoma (FIPA) — AIP gene mutations",
"• MEN1 (Multiple Endocrine Neoplasia type 1)",
"• Carney complex (PRKAR1A mutations)",
"• McCune-Albright syndrome (GNAS mutations)",
"• X-LAG (Xq26 duplication) — early-onset gigantism",
"• Ectopic GHRH secretion (carcinoid, SCLC, pancreatic tumours) — very rare",
"",
"Tumour classification:",
" Microadenoma < 1 cm | Macroadenoma ≥ 1 cm"
], Inches(6.75), CY + Inches(0.55), Inches(6.0), Inches(4.7), font_size=12.5, color=DARK_TEXT)
# ═══════════════════════════════════════════════════════════════
# SLIDE 3 — Pathophysiology
# ═══════════════════════════════════════════════════════════════
s3 = prs.slides.add_slide(blank)
add_rect(s3, 0, 0, W, H, LIGHT_BG)
header_bar(s3, "Pathophysiology", "GH–IGF-1 Axis Dysregulation")
footer_bar(s3, right_text="Slide 3")
CY = content_area_y()
# Pathway boxes
steps = [
("Hypothalamus\n(GHRH ↑ / SMS ↓)", NAVY),
("Pituitary\nSomatotroph Adenoma", TEAL),
("GH Hypersecretion\n(pulsatile loss)", RED_ACCENT),
("↑ IGF-1\n(liver)", GOLD),
("Multi-system\nEffects", RGBColor(0x27, 0xAE, 0x60)),
]
box_w = Inches(2.0)
box_h = Inches(1.1)
gap = Inches(0.22)
start_x = Inches(0.55)
y = CY + Inches(0.3)
for i, (label, col) in enumerate(steps):
x = start_x + i * (box_w + gap)
add_rect(s3, x, y, box_w, box_h, col)
add_text(s3, label, x + Inches(0.05), y + Inches(0.05),
box_w - Inches(0.1), box_h - Inches(0.1),
font_size=12, bold=True, color=WHITE,
align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
if i < len(steps) - 1:
arr_x = x + box_w
add_text(s3, "→", arr_x, y + Inches(0.3),
gap, Inches(0.5), font_size=18, bold=True,
color=NAVY, align=PP_ALIGN.CENTER)
# Molecular mechanisms
add_text(s3, "Molecular Mechanisms",
Inches(0.4), CY + Inches(1.65), Inches(12.5), Inches(0.35),
font_size=14, bold=True, color=TEAL)
add_multiline(s3, [
"• Somatic GNAS mutations (Gsα): constitutive adenylate cyclase activation → uncontrolled cAMP → GH secretion (40% of sporadic cases)",
"• Loss of somatostatin (SMS) inhibitory tone",
"• IGF-1 mediates most peripheral effects (proliferation, organomegaly, metabolic changes)",
"• GH directly promotes lipolysis, insulin resistance, protein anabolism",
"• Loss of glucose-mediated GH suppression (key for oral glucose tolerance test diagnosis)"
], Inches(0.4), CY + Inches(2.05), Inches(12.5), Inches(2.0), font_size=13, color=DARK_TEXT)
add_text(s3, "SSTR subtypes targeted by therapy: SSTR2 (octreotide/lanreotide), SSTR5 (pasireotide) | GHR antagonism (pegvisomant)",
Inches(0.4), CY + Inches(4.3), Inches(12.5), Inches(0.4),
font_size=12, italic=True, color=TEAL)
# ═══════════════════════════════════════════════════════════════
# SLIDE 4 — Clinical Features
# ═══════════════════════════════════════════════════════════════
s4 = prs.slides.add_slide(blank)
add_rect(s4, 0, 0, W, H, LIGHT_BG)
header_bar(s4, "Clinical Features", "Insidious Onset — Mean 7–10 Year Delay to Diagnosis")
footer_bar(s4, right_text="Slide 4")
CY = content_area_y()
cols = [
("Acral / Skeletal", [
"• Enlarged hands & feet (ring/shoe size change)",
"• Frontal bossing, prognathism",
"• Malocclusion, interdental spacing",
"• Macroglossia",
"• Heel pad thickening (>23 mm)",
"• Carpal tunnel syndrome",
"• Arthralgia / arthropathy (large joints)",
]),
("Soft Tissue / Skin", [
"• Coarsening of facial features",
"• Skin tags (acrochordon)",
"• Oily skin, hyperhidrosis",
"• Acanthosis nigricans",
"• Voice deepening (laryngeal hypertrophy)",
"• Organomegaly (thyroid, liver, spleen)",
"• Visceromegaly"
]),
("Systemic", [
"• Hypertension (30–50%)",
"• Cardiomegaly, LVH, arrhythmias",
"• Diabetes / impaired glucose tolerance (25–50%)",
"• Sleep apnea (60–80%)",
"• Colon polyps → CRC risk 3× ↑",
"• Headache, visual field defects (bitemporal hemianopia)",
"• Hypopituitarism (from mass effect)"
]),
]
col_w = Inches(4.0)
col_gap = Inches(0.22)
x0 = Inches(0.4)
for i, (title, items) in enumerate(cols):
cx = x0 + i * (col_w + col_gap)
add_rect(s4, cx, CY, col_w, Inches(5.5), WHITE)
add_rect(s4, cx, CY, col_w, Inches(0.38), TEAL)
add_text(s4, title, cx + Inches(0.1), CY + Inches(0.01),
col_w - Inches(0.15), Inches(0.36),
font_size=13, bold=True, color=WHITE,
v_anchor=MSO_ANCHOR.MIDDLE)
add_multiline(s4, items,
cx + Inches(0.1), CY + Inches(0.45),
col_w - Inches(0.2), Inches(4.9),
font_size=12, color=DARK_TEXT)
# Red flag note
add_rect(s4, Inches(0.4), CY + Inches(5.52), Inches(12.5), Inches(0.35), RED_ACCENT)
add_text(s4, "⚠ Red Flags: New macroglossia, progressive jaw malocclusion, new-onset T2DM with coarse facies, unexplained CTS — screen for acromegaly",
Inches(0.55), CY + Inches(5.53), Inches(12.2), Inches(0.33),
font_size=11, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
# ═══════════════════════════════════════════════════════════════
# SLIDE 5 — Diagnosis
# ═══════════════════════════════════════════════════════════════
s5 = prs.slides.add_slide(blank)
add_rect(s5, 0, 0, W, H, LIGHT_BG)
header_bar(s5, "Diagnosis", "Biochemical Confirmation + Pituitary Imaging")
footer_bar(s5, right_text="Slide 5")
CY = content_area_y()
# Left: Lab
add_rect(s5, Inches(0.4), CY, Inches(6.1), Inches(5.5), WHITE)
add_rect(s5, Inches(0.4), CY, Inches(6.1), Inches(0.38), TEAL)
add_text(s5, "Biochemical Diagnosis (Step-wise)",
Inches(0.55), CY + Inches(0.01), Inches(5.9), Inches(0.36),
font_size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
steps_text = [
"Step 1 — Screening:",
" • Serum IGF-1 (age/sex matched) — BEST single test",
" • Elevated in >95% of active acromegaly",
"",
"Step 2 — Confirmation:",
" • Oral Glucose Tolerance Test (OGTT): 75g glucose",
" • Normal: GH suppressed to <0.4 ng/mL at 2 h",
" • Acromegaly: GH fails to suppress (nadir ≥1 ng/mL)",
" • Avoid random GH (pulsatile; unreliable)",
"",
"Step 3 — Exclude ectopic GHRH:",
" • If IGF-1 ↑ but no pituitary adenoma → serum GHRH",
" • Somatotroph hyperplasia (not adenoma) on histology",
"",
"Also check: PRL, TSH, ACTH, FSH/LH (pituitary function panel)"
]
add_multiline(s5, steps_text,
Inches(0.55), CY + Inches(0.45), Inches(5.8), Inches(4.9),
font_size=12.5, color=DARK_TEXT)
# Right: Imaging
add_rect(s5, Inches(6.8), CY, Inches(6.1), Inches(5.5), WHITE)
add_rect(s5, Inches(6.8), CY, Inches(6.1), Inches(0.38), TEAL)
add_text(s5, "Imaging & Additional Workup",
Inches(6.95), CY + Inches(0.01), Inches(5.9), Inches(0.36),
font_size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
img_text = [
"MRI Pituitary (gadolinium-enhanced):",
" • First-line imaging — Gold standard",
" • Assess: tumour size, cavernous sinus invasion, optic chiasm",
" • ~75% macroadenomas at diagnosis",
"",
"If MRI inconclusive:",
" • CT pituitary (if MRI contraindicated)",
" • Somatostatin receptor scintigraphy (DOTATATE PET)",
"",
"Complication screening at diagnosis:",
" • Echo / ECG (cardiomyopathy, LVH)",
" • Colonoscopy (polyps, CRC risk)",
" • Sleep study (OSA — 60–80%)",
" • Thyroid USS (multinodular goitre)",
" • Bone densitometry (DXA)",
" • FPG / HbA1c (DM screening)"
]
add_multiline(s5, img_text,
Inches(6.95), CY + Inches(0.45), Inches(5.8), Inches(4.9),
font_size=12.5, color=DARK_TEXT)
# ═══════════════════════════════════════════════════════════════
# SLIDE 6 — Biochemical Targets & Disease Control Criteria
# ═══════════════════════════════════════════════════════════════
s6 = prs.slides.add_slide(blank)
add_rect(s6, 0, 0, W, H, LIGHT_BG)
header_bar(s6, "Biochemical Control Criteria & Targets",
"Endocrine Society & Acromegaly Consensus 2024")
footer_bar(s6, right_text="Slide 6")
CY = content_area_y()
# Main criteria table
criteria = [
("Parameter", "Target (Controlled)", "Comment"),
("IGF-1", "Age/sex-matched normal range (≤1.0× ULN)", "Best marker of chronic disease activity"),
("GH (random)", "< 1.0 ng/mL", "Multiple random samples preferable"),
("GH (nadir, OGTT)", "< 0.4 ng/mL", "Confirmatory / post-treatment monitoring"),
("GH (mean 5-sample)", "< 1.0 ng/mL", "Used in clinical trials"),
("Symptoms", "Resolution of headache, sweating, fatigue", "Patient-reported outcomes important"),
("Tumour volume", "Stable or reduced on MRI", "Key for surgical/radiotherapy assessment"),
]
row_h = Inches(0.55)
col_ws = [Inches(2.3), Inches(5.3), Inches(4.8)]
x_starts = [Inches(0.4), Inches(2.8), Inches(8.2)]
for ri, row in enumerate(criteria):
is_header = ri == 0
bg = NAVY if is_header else (LIGHT_BG if ri % 2 == 0 else WHITE)
text_col = WHITE if is_header else DARK_TEXT
y = CY + ri * row_h
for ci, (cell, cw, cx) in enumerate(zip(row, col_ws, x_starts)):
add_rect(s6, cx, y, cw - Inches(0.05), row_h - Inches(0.02), bg)
add_text(s6, cell, cx + Inches(0.08), y + Inches(0.04),
cw - Inches(0.15), row_h - Inches(0.08),
font_size=12 if not is_header else 13,
bold=is_header, color=text_col,
v_anchor=MSO_ANCHOR.MIDDLE)
note_y = CY + len(criteria) * row_h + Inches(0.15)
add_text(s6,
"Note: Biochemical control does not equate to cure. Ongoing surveillance recommended even in 'controlled' disease.\n"
"16th Acromegaly Consensus Conference (Sept 2024) updated comorbidity management recommendations including CV, bone, metabolic outcomes.",
Inches(0.4), note_y, Inches(12.5), Inches(0.9),
font_size=11.5, italic=True, color=GREY_TEXT)
# ═══════════════════════════════════════════════════════════════
# SLIDE 7 — Management Overview (Algorithm)
# ═══════════════════════════════════════════════════════════════
s7 = prs.slides.add_slide(blank)
add_rect(s7, 0, 0, W, H, LIGHT_BG)
header_bar(s7, "Management Algorithm",
"Surgery First, Then Stepwise Medical Therapy")
footer_bar(s7, right_text="Slide 7")
CY = content_area_y()
boxes = [
(Inches(5.2), CY + Inches(0.1), Inches(3.0), Inches(0.85),
"DIAGNOSIS\nGH-secreting pituitary adenoma", NAVY),
(Inches(5.2), CY + Inches(1.2), Inches(3.0), Inches(0.85),
"1st LINE: Transsphenoidal Surgery\n(TSS) — Gold Standard", TEAL),
(Inches(5.2), CY + Inches(2.3), Inches(3.0), Inches(0.85),
"CURED?\n(GH nadir <0.4 + IGF-1 normal)", RGBColor(0x27, 0xAE, 0x60)),
(Inches(1.0), CY + Inches(3.4), Inches(3.0), Inches(0.85),
"YES → Surveillance\n(IGF-1, MRI q1–2 yr)", RGBColor(0x27, 0xAE, 0x60)),
(Inches(5.2), CY + Inches(3.4), Inches(3.0), Inches(0.85),
"NO → Residual disease:\n1st-gen SRL\n(Octreotide LAR / Lanreotide)", TEAL),
(Inches(9.3), CY + Inches(3.4), Inches(3.5), Inches(0.85),
"Inoperable/refuses surgery:\nPrimary medical therapy\n(SRL ± Cabergoline)", TEAL),
(Inches(5.2), CY + Inches(4.5), Inches(3.0), Inches(0.85),
"Uncontrolled on 1st-gen SRL:\nPasireotide LAR\nor Pegvisomant\nor Combination", RED_ACCENT),
(Inches(5.2), CY + Inches(5.55), Inches(3.0), Inches(0.55),
"Refractory: Radiotherapy (SRS/FSRT)", GREY_TEXT),
]
for (x, y, w, h, txt, col) in boxes:
add_rect(s7, x, y, w, h, col)
add_text(s7, txt, x + Inches(0.08), y + Inches(0.05),
w - Inches(0.15), h - Inches(0.1),
font_size=11, bold=True, color=WHITE,
align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
# Arrows (simplified as text)
arrows = [
(Inches(6.5), CY + Inches(0.97), "↓"),
(Inches(6.5), CY + Inches(2.07), "↓"),
(Inches(3.1), CY + Inches(3.4), "← YES"),
(Inches(6.5), CY + Inches(3.37), "↓"),
(Inches(8.5), CY + Inches(3.4), "→ NO SURGERY"),
(Inches(6.5), CY + Inches(4.37), "↓"),
(Inches(6.5), CY + Inches(5.43), "↓"),
]
for (ax, ay, txt) in arrows:
add_text(s7, txt, ax, ay, Inches(1.5), Inches(0.3),
font_size=11, bold=True, color=NAVY, align=PP_ALIGN.CENTER)
# ═══════════════════════════════════════════════════════════════
# SLIDE 8 — Medical Therapy Details
# ═══════════════════════════════════════════════════════════════
s8 = prs.slides.add_slide(blank)
add_rect(s8, 0, 0, W, H, LIGHT_BG)
header_bar(s8, "Medical Therapies",
"Mechanism, Efficacy & Key Side Effects")
footer_bar(s8, right_text="Slide 8")
CY = content_area_y()
drugs = [
("1st-Gen SRLs\n(Octreotide LAR /\nLanreotide)", TEAL,
[
"Mechanism: SSTR2 > SSTR5 agonist",
"Efficacy: IGF-1 norm ~45–65%",
"Tumour shrinkage ~50%",
"Route: IM/SC depot monthly",
"SE: GI (diarrhoea), gallstones,",
" glucose dysregulation (mild)"
]),
("Pasireotide LAR\n(Signifor LAR)", RED_ACCENT,
[
"Mechanism: SSTR1,2,3,5 (broad)",
"Efficacy: IGF-1 norm ~25–30%",
"Superior tumour shrinkage",
"Route: IM depot monthly",
"SE: Hyperglycaemia (common, 57%)",
" Requires DM monitoring"
]),
("Pegvisomant\n(Somavert)", RGBColor(0x8E, 0x44, 0xAD),
[
"Mechanism: GH receptor antagonist",
"Efficacy: IGF-1 norm ~65–90%",
"Does NOT suppress GH levels",
"Route: SC daily injection",
"SE: LFT elevation, lipodystrophy",
" Monitor tumour size (MRI)"
]),
("Cabergoline\n(Dostinex)", GOLD,
[
"Mechanism: Dopamine D2 agonist",
"Efficacy: IGF-1 norm ~35% (low GH)",
"Oral; useful if co-secretes PRL",
"Route: Oral twice weekly",
"SE: Nausea, dizziness, cardiac",
" valvulopathy (high doses)"
]),
("Paltusotine\n(Palsonify) — NEW\nFDA approved Sep 2025", RGBColor(0x16, 0x85, 0x5A),
[
"Mechanism: Oral SSTR2 agonist",
"Dose: 40–60 mg OD fasting",
"Phase 3 RCTs: IGF-1 norm 55% (untreated)",
"Maintains control switching from injectables",
"Oral convenience; comparable safety",
"to parenteral SRLs"
]),
]
dw = Inches(2.35)
gap2 = Inches(0.18)
x0 = Inches(0.42)
for i, (name, col, details) in enumerate(drugs):
cx = x0 + i * (dw + gap2)
bh = Inches(5.45)
add_rect(s8, cx, CY, dw, bh, WHITE)
add_rect(s8, cx, CY, dw, Inches(0.72), col)
add_text(s8, name, cx + Inches(0.05), CY + Inches(0.03),
dw - Inches(0.1), Inches(0.66),
font_size=11, bold=True, color=WHITE,
align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE)
add_multiline(s8, details,
cx + Inches(0.08), CY + Inches(0.78),
dw - Inches(0.15), Inches(4.55),
font_size=11, color=DARK_TEXT)
# ═══════════════════════════════════════════════════════════════
# SLIDE 9 — Surgery & Radiotherapy
# ═══════════════════════════════════════════════════════════════
s9 = prs.slides.add_slide(blank)
add_rect(s9, 0, 0, W, H, LIGHT_BG)
header_bar(s9, "Surgery & Radiotherapy",
"Definitive and Adjuvant Modalities")
footer_bar(s9, right_text="Slide 9")
CY = content_area_y()
# Surgery
add_rect(s9, Inches(0.4), CY, Inches(6.1), Inches(5.55), WHITE)
add_rect(s9, Inches(0.4), CY, Inches(6.1), Inches(0.38), TEAL)
add_text(s9, "Transsphenoidal Surgery (TSS)",
Inches(0.55), CY + Inches(0.01), Inches(5.9), Inches(0.36),
font_size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
add_multiline(s9, [
"Approach: Endoscopic (preferred) or microscopic",
"",
"Cure rates:",
" • Microadenoma: 70–90%",
" • Macroadenoma: 40–60%",
" • Cavernous sinus invasion: <20%",
"",
"RCT Evidence (Vassilyeva et al., 2023):",
" Endoscopic vs microscopic adenoma removal — comparable",
" biochemical outcomes; endoscopic has lower nasal morbidity",
"",
"Predictors of surgical cure:",
" • Microadenoma, no cavernous sinus invasion",
" • Pre-op GH < 30 ng/mL",
" • Experienced pituitary surgeon (>50 cases/year)",
"",
"Post-op assessment: GH nadir (OGTT) at 12 weeks",
" IGF-1 reassessment at 3–6 months"
], Inches(0.55), CY + Inches(0.45), Inches(5.8), Inches(4.9),
font_size=12.5, color=DARK_TEXT)
# Radiotherapy
add_rect(s9, Inches(6.8), CY, Inches(6.1), Inches(5.55), WHITE)
add_rect(s9, Inches(6.8), CY, Inches(6.1), Inches(0.38), RED_ACCENT)
add_text(s9, "Radiotherapy (RT)",
Inches(6.95), CY + Inches(0.01), Inches(5.9), Inches(0.36),
font_size=13, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
add_multiline(s9, [
"Indications:",
" • Residual tumour post-surgery",
" • Refractory to medical therapy",
" • Aggressive/invasive adenoma",
"",
"Types:",
" • Stereotactic Radiosurgery (SRS/GammaKnife)",
" - Single fraction; precise tumour targeting",
" - GH control in 20–60% at 5–10 years",
" • Fractionated Stereotactic RT (FSRT)",
" - For larger tumours near optic chiasm",
" • Conventional RT (historical; avoid if possible)",
"",
"Key limitations:",
" • Delayed biochemical effect (years)",
" • Hypopituitarism risk (40–60% at 10 years)",
" • Requires medical therapy bridging",
" • Rare: radiation-induced neoplasm, cognitive effects"
], Inches(6.95), CY + Inches(0.45), Inches(5.8), Inches(4.9),
font_size=12.5, color=DARK_TEXT)
# ═══════════════════════════════════════════════════════════════
# SLIDE 10 — Comorbidities & Long-term Monitoring
# ═══════════════════════════════════════════════════════════════
s10 = prs.slides.add_slide(blank)
add_rect(s10, 0, 0, W, H, LIGHT_BG)
header_bar(s10, "Comorbidities & Long-term Monitoring",
"16th Acromegaly Consensus Conference 2024 — Updated Comorbidity Management")
footer_bar(s10, right_text="Slide 10")
CY = content_area_y()
comorbidity_data = [
("Cardiovascular\n(30–50%)", TEAL,
"LVH, biventricular dysfunction, diastolic HF, arrhythmias, hypertension\n"
"Echo baseline + q2yr; optimise BP/lipids; GH control improves cardiac function"),
("Metabolic\n(25–50%)", GOLD,
"IGF-1/GH → insulin resistance, DM, dyslipidaemia\n"
"FPG/HbA1c at baseline; pasireotide worsens glucose — close monitoring required"),
("Sleep Apnea\n(60–80%)", RED_ACCENT,
"Both OSA and central SA; soft tissue hypertrophy + skeletal changes\n"
"Polysomnography at baseline; CPAP; biochemical control reduces severity"),
("GI / Oncology\n(3× CRC risk)", RGBColor(0x8E, 0x44, 0xAD),
"Colon polyps, colorectal cancer risk × 3\n"
"Colonoscopy at diagnosis; q3–5 yr if adenomas; q5–10 yr if normal"),
("Bone / Joints", RGBColor(0x16, 0x85, 0x5A),
"Arthropathy (knees, hips, spine), carpal tunnel, fracture risk\n"
"DXA; arthropathy may persist even after biochemical control"),
("Pituitary Function", NAVY,
"Mass effect / surgery → hypopituitarism (GH deficiency, hypogonadism, hypothyroidism)\n"
"Annual pituitary function panel; hormone replacement as needed"),
]
bw = Inches(3.9)
bh = Inches(1.7)
bgap = Inches(0.22)
bx0 = Inches(0.4)
for i, (title, col, detail) in enumerate(comorbidity_data):
row = i // 3
ci = i % 3
bx = bx0 + ci * (bw + bgap)
by = CY + row * (bh + Inches(0.15))
add_rect(s10, bx, by, bw, bh, WHITE)
add_rect(s10, bx, by, bw, Inches(0.35), col)
add_text(s10, title, bx + Inches(0.08), by + Inches(0.01),
bw - Inches(0.15), Inches(0.33),
font_size=12, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
add_text(s10, detail, bx + Inches(0.1), by + Inches(0.38),
bw - Inches(0.18), bh - Inches(0.45),
font_size=11, color=DARK_TEXT, wrap=True)
# ═══════════════════════════════════════════════════════════════
# SLIDE 11 — Latest Clinical Trials (2024–2026)
# ═══════════════════════════════════════════════════════════════
s11 = prs.slides.add_slide(blank)
add_rect(s11, 0, 0, W, H, LIGHT_BG)
header_bar(s11, "Latest Clinical Trials & Evidence (2024–2026)",
"Key Phase 3 RCTs & Network Meta-Analyses")
footer_bar(s11, right_text="Slide 11")
CY = content_area_y()
trials = [
("Paltusotine Phase 3 RCT\n(Gadelha et al., JCEM 2024\nPMID: 38828555)",
TEAL, RGBColor(0xE0, 0xF5, 0xF7),
"Switch from injectables: 83.3% paltusotine vs 3.6% placebo maintained IGF-1 ≤1.0×ULN (p<0.0001)\n"
"Phase 3 double-blind, placebo-controlled | Oral once-daily convenience"),
("Paltusotine — Untreated Acromegaly\n(Biller et al., JCEM 2026\nPMID: 41128642)",
RGBColor(0x16, 0x85, 0x5A), RGBColor(0xDF, 0xF5, 0xEB),
"55.6% IGF-1 normalization vs 5.3% placebo (OR 42.81, p<0.0001); rapid response in 92.6% within 4 wks\n"
"FDA approved Palsonify (paltusotine) September 2025 — first oral SSTR2 agonist"),
("CAM2029 (SC Octreotide Depot)\nACROINNOVA 1 — JCEM 2025\nPMID: 39378125",
RED_ACCENT, RGBColor(0xFAE8E8),
"72.2% vs 37.5% placebo IGF-1 control at wk 22/24 (p=0.0018)\n"
"Self-injectable, room-temp storage; FluidCrystal technology — patient convenience advantage"),
("Network Meta-Analysis\n(Salvatori et al., JCEM 2026\nPMID: 41773305)",
NAVY, RGBColor(0xE0, 0xE8, 0xF0),
"22 RCTs (n=18): Paltusotine highest probability of best efficacy+tolerability\n"
"Pasireotide > OCT-LAR for IGF-1 normalization; all injectable SRLs comparable"),
("Network Meta-Analysis\n(Kaparounaki et al., Eur J Endocrinol 2025\nPMID: 41140134)",
RGBColor(0x8E, 0x44, 0xAD), RGBColor(0xF3, 0xE8, 0xFA),
"27 studies, 4131 pts, 11 treatments: Pegvisomant best for IGF-1 norm; Pasireotide best for tumour shrinkage\n"
"Octreotide LAR > oral octreotide capsules; supports individualized treatment selection"),
("OXTEND-03 Phase 3 Trial\n(Debiopharm, 2025 — ongoing)\nNCT06930625",
GOLD, RGBColor(0xFCF5E0),
"First patient randomized Dec 2025 — quarterly (3-month) octreotide depot (Debio 4126)\n"
"Could reduce injection frequency from monthly to every 3 months — ongoing trial"),
]
tw = Inches(6.1)
th = Inches(1.62)
tgap = Inches(0.2)
tx0 = Inches(0.4)
for i, (title, hdr_col, bg_col, detail) in enumerate(trials):
row = i // 2
ci = i % 2
tx = tx0 + ci * (tw + tgap)
ty = CY + row * (th + Inches(0.12))
add_rect(s11, tx, ty, tw, th, bg_col)
add_rect(s11, tx, ty, tw, Inches(0.42), hdr_col)
add_text(s11, title, tx + Inches(0.08), ty + Inches(0.01),
tw - Inches(0.15), Inches(0.4),
font_size=11, bold=True, color=WHITE, v_anchor=MSO_ANCHOR.MIDDLE)
add_text(s11, detail, tx + Inches(0.1), ty + Inches(0.46),
tw - Inches(0.18), th - Inches(0.53),
font_size=11, color=DARK_TEXT, wrap=True)
# ═══════════════════════════════════════════════════════════════
# SLIDE 12 — References
# ═══════════════════════════════════════════════════════════════
s12 = prs.slides.add_slide(blank)
add_rect(s12, 0, 0, W, H, NAVY)
add_rect(s12, 0, Inches(1.15), W, Inches(0.04), TEAL)
header_bar(s12, "References", "")
# Override header background to keep navy theme
# Body
add_rect(s12, 0, Inches(1.19), W, H - Inches(1.19), LIGHT_BG)
refs = [
"[1] Harrison's Principles of Internal Medicine, 22nd Edition (2025). McGraw Hill. Chapter 392: Pituitary Adenomas and Hypersecretion Syndromes.",
"[2] Katznelson L et al. Acromegaly: An Endocrine Society Clinical Practice Guideline. JCEM 2014;99(11):3933–51.",
"[3] Giustina A et al. 16th Acromegaly Consensus Conference. Consensus on acromegaly complications: an update. Pituitary 2026.",
"[4] Gadelha MR et al. Acromegaly Disease Control Maintained After Switching From Injected SRLs to Oral Paltusotine (Phase 3 RCT). JCEM 2024. PMID: 38828555.",
"[5] Biller BMK et al. Rapid and Sustained Response of Biochemically Uncontrolled Acromegaly to Once-daily Oral Paltusotine. JCEM 2026. PMID: 41128642.",
"[6] Ferone D et al. Octreotide Subcutaneous Depot (CAM2029) for Acromegaly: ACROINNOVA 1 Phase 3 Trial. JCEM 2025. PMID: 39378125.",
"[7] Salvatori R et al. Efficacy and safety of pharmacologic therapies in acromegaly: a systematic review and NMA. JCEM 2026. PMID: 41773305.",
"[8] Kaparounaki C et al. Medical treatment in acromegaly: a network meta-analysis. Eur J Endocrinol 2025. PMID: 41140134.",
"[9] Vassilyeva N et al. Comparative effectiveness of endoscopic and microscopic adenoma removal in acromegaly (RCT). Front Endocrinol 2023. PMID: 37766690.",
"[10] US FDA. Approval of Palsonify (paltusotine) for acromegaly. September 26, 2025.",
"[11] Debiopharm. OXTEND-03 Phase 3 Trial (NCT06930625): quarterly Debio 4126. First patient Dec 2025.",
"[12] Textbook of Family Medicine, 9th Edition. Elsevier. | Andrews' Diseases of the Skin. Elsevier.",
]
add_multiline(s12, refs,
Inches(0.55), Inches(1.35), Inches(12.2), Inches(5.8),
font_size=11.5, color=DARK_TEXT)
footer_bar(s12, right_text="Slide 12")
# ═══════════════════════════════════════════════════════════════
# SAVE
# ═══════════════════════════════════════════════════════════════
out_path = "/tmp/workspace/acromegaly-pptx/Acromegaly_PG_Revision_2025.pptx"
from io import BytesIO
buf = BytesIO()
prs.save(buf)
with open(out_path, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out_path}")
print(f"Slides: {len(prs.slides)}")
cd /tmp/workspace/acromegaly-pptx && python build_pptx.py
~/acromegaly-pptx/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/acromegaly-pptx/build_pptx.py'
cd /tmp/workspace/acromegaly-pptx && python build_pptx.py
grep -n "RGBColor(0x[0-9A-Fa-f]\{6\})" /tmp/workspace/acromegaly-pptx/build_pptx.py
~/acromegaly-pptx/build_pptx.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/acromegaly-pptx/build_pptx.py'
cd /tmp/workspace/acromegaly-pptx && python build_pptx.py 2>&1
python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/acromegaly-pptx/Acromegaly_PG_Revision_2025.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text.strip()[:60] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] print(f'Slide {i}: {texts[0] if texts else \"(no text)\"}') "
Acromegaly PG Revision 2025
Presentation · PPTX
| # | Slide Title | Key Content |
|---|---|---|
| 1 | Title Slide | Acromegaly - PG Clinical Revision, sources cited |
| 2 | Overview & Epidemiology | Definition, prevalence ~60/million, aetiology (AIP, MEN1, McCune-Albright, X-LAG) |
| 3 | Pathophysiology | GH-IGF1 axis, GNAS mutations, SSTR subtypes, GHR antagonism |
| 4 | Clinical Features | 3-column layout: Acral/Skeletal, Soft Tissue/Skin, Systemic + red flag callout |
| 5 | Diagnosis | Step-wise: IGF-1 screening → OGTT confirmation → MRI; complication screening checklist |
| 6 | Biochemical Control Criteria | Table: IGF-1, GH nadir, GH mean, tumour volume targets; 2024 Consensus updates |
| 7 | Management Algorithm | Visual flowchart: Surgery → cure vs residual → SRL → pasireotide/pegvisomant → RT |
| 8 | Medical Therapies | 5-drug comparison: Octreotide/Lanreotide, Pasireotide, Pegvisomant, Cabergoline, Paltusotine (FDA approved Sep 2025) |
| 9 | Surgery & Radiotherapy | TSS cure rates, RCT evidence (endoscopic vs microscopic), RT types and limitations |
| 10 | Comorbidities & Monitoring | CV, metabolic, OSA, GI/oncology, bone, pituitary function - all with monitoring intervals |
| 11 | Latest Clinical Trials 2024-2026 | 6 highlighted trials: Paltusotine Phase 3 (×2), CAM2029 ACROINNOVA 1, 2 network meta-analyses, OXTEND-03 |
| 12 | References | 12 fully cited references (Harrison's 22e, Endocrine Society guidelines, PMIDs) |