Make ppt on agnitia amara on second page include characteristics
Agnitia amara plant characteristics medicinal uses
mkdir -p /tmp/workspace/ignatia-amara-ppt
~/ignatia-amara-ppt/create_ppt.py
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.util import Inches, Pt
import io
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
# ─────────────────────────────────────────────────────────────────────────────
# SLIDE 1 – Title Slide
# ─────────────────────────────────────────────────────────────────────────────
s1 = prs.slides.add_slide(blank)
def fill_bg(slide, r, g, b):
from pptx.oxml.ns import qn
from lxml import etree
bg = slide.background
fill = bg.fill
fill.solid()
fill.fore_color.rgb = RGBColor(r, g, b)
fill_bg(s1, 20, 60, 40) # dark green
# Decorative top strip
from pptx.util import Inches
top_bar = s1.shapes.add_shape(
1, # MSO_SHAPE_TYPE.RECTANGLE = 1
Inches(0), Inches(0), Inches(13.333), Inches(0.18)
)
top_bar.fill.solid()
top_bar.fill.fore_color.rgb = RGBColor(180, 210, 100)
top_bar.line.fill.background()
# Bottom strip
bot_bar = s1.shapes.add_shape(
1, Inches(0), Inches(7.32), Inches(13.333), Inches(0.18)
)
bot_bar.fill.solid()
bot_bar.fill.fore_color.rgb = RGBColor(180, 210, 100)
bot_bar.line.fill.background()
# Main title
tb = s1.shapes.add_textbox(Inches(0.8), Inches(1.8), Inches(11.7), Inches(1.6))
tf = tb.text_frame
tf.word_wrap = True
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run = p.add_run()
run.text = "Ignatia Amara"
run.font.name = "Georgia"
run.font.size = Pt(64)
run.font.bold = True
run.font.color.rgb = RGBColor(230, 255, 200)
# Subtitle
tb2 = s1.shapes.add_textbox(Inches(0.8), Inches(3.5), Inches(11.7), Inches(0.9))
tf2 = tb2.text_frame
p2 = tf2.paragraphs[0]
p2.alignment = PP_ALIGN.CENTER
r2 = p2.add_run()
r2.text = "St. Ignatius Bean | A Homeopathic Remedy"
r2.font.name = "Calibri"
r2.font.size = Pt(26)
r2.font.italic = True
r2.font.color.rgb = RGBColor(180, 230, 150)
# divider line
line = s1.shapes.add_shape(1, Inches(3.5), Inches(4.5), Inches(6.3), Pt(3))
line.fill.solid()
line.fill.fore_color.rgb = RGBColor(180, 210, 100)
line.line.fill.background()
# Tagline
tb3 = s1.shapes.add_textbox(Inches(0.8), Inches(4.8), Inches(11.7), Inches(0.7))
tf3 = tb3.text_frame
p3 = tf3.paragraphs[0]
p3.alignment = PP_ALIGN.CENTER
r3 = p3.add_run()
r3.text = "Family: Loganiaceae | Genus: Strychnos | Species: S. ignatii"
r3.font.name = "Calibri"
r3.font.size = Pt(18)
r3.font.color.rgb = RGBColor(200, 240, 180)
# ─────────────────────────────────────────────────────────────────────────────
# SLIDE 2 – Characteristics
# ─────────────────────────────────────────────────────────────────────────────
s2 = prs.slides.add_slide(blank)
fill_bg(s2, 245, 250, 240) # light off-white/green tint
# Header bar
hbar = s2.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(1.2))
hbar.fill.solid()
hbar.fill.fore_color.rgb = RGBColor(20, 80, 45)
hbar.line.fill.background()
# Slide title
htb = s2.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12), Inches(1.0))
htf = htb.text_frame
hp = htf.paragraphs[0]
hp.alignment = PP_ALIGN.LEFT
hr = hp.add_run()
hr.text = "Characteristics of Ignatia Amara"
hr.font.name = "Georgia"
hr.font.size = Pt(32)
hr.font.bold = True
hr.font.color.rgb = RGBColor(230, 255, 200)
# Accent bar under header
abar = s2.shapes.add_shape(1, Inches(0), Inches(1.2), Inches(13.333), Pt(4))
abar.fill.solid()
abar.fill.fore_color.rgb = RGBColor(140, 195, 80)
abar.line.fill.background()
# ── Left column (Botanical / Physical)
def add_section_box(slide, left, top, width, height, title, bullets, title_color, accent_color):
# Section card background
card = slide.shapes.add_shape(1, left, top, width, height)
card.fill.solid()
card.fill.fore_color.rgb = RGBColor(255, 255, 255)
card.line.color.rgb = RGBColor(180, 210, 100)
card.line.width = Pt(1.2)
# Section title strip
stitle = slide.shapes.add_shape(1, left, top, width, Pt(32))
stitle.fill.solid()
stitle.fill.fore_color.rgb = accent_color
stitle.line.fill.background()
ttb = slide.shapes.add_textbox(left + Inches(0.12), top, width - Inches(0.2), Pt(34))
ttf = ttb.text_frame
ttf.margin_top = Pt(3)
ttf.margin_bottom = 0
tp = ttf.paragraphs[0]
tr = tp.add_run()
tr.text = title
tr.font.name = "Calibri"
tr.font.size = Pt(15)
tr.font.bold = True
tr.font.color.rgb = title_color
# Bullet content
ctb = slide.shapes.add_textbox(
left + Inches(0.18), top + Pt(36),
width - Inches(0.3), height - Pt(42)
)
ctf = ctb.text_frame
ctf.word_wrap = True
ctf.margin_top = Pt(4)
ctf.margin_left = 0
ctf.margin_right = 0
for i, bullet in enumerate(bullets):
if i == 0:
cp = ctf.paragraphs[0]
else:
cp = ctf.add_paragraph()
cp.space_before = Pt(3)
cr = cp.add_run()
cr.text = f"• {bullet}"
cr.font.name = "Calibri"
cr.font.size = Pt(13)
cr.font.color.rgb = RGBColor(40, 60, 40)
# Column layout
col1_left = Inches(0.25)
col2_left = Inches(4.55)
col3_left = Inches(8.85)
row1_top = Inches(1.40)
row2_top = Inches(4.10)
col_w = Inches(4.05)
row1_h = Inches(2.55)
row2_h = Inches(2.75)
G1 = RGBColor(20, 100, 50)
G2 = RGBColor(60, 140, 80)
G3 = RGBColor(100, 170, 60)
TW = RGBColor(255, 255, 255)
add_section_box(s2, col1_left, row1_top, col_w, row1_h,
"Botanical Identity",
[
"Family: Loganiaceae",
"Genus & Species: Strychnos ignatii",
"Common name: St. Ignatius Bean",
"Native to Philippines & Southeast Asia",
], TW, G1)
add_section_box(s2, col2_left, row1_top, col_w, row1_h,
"Physical Description",
[
"Large climbing woody vine / liana",
"Fruit: pear-shaped, contains 20-24 seeds",
"Seeds: oblong/ovate, ~2.5 cm, angular",
"Seed color: grey to clear-brown, translucent shell",
], TW, G2)
add_section_box(s2, col3_left, row1_top, col_w, row1_h,
"Organoleptic Properties",
[
"Taste: intensely bitter",
"Odor: slight, pleasant fragrance",
"Texture: hard, almond-like seed coat",
"Appearance: smooth, brownish surface",
], TW, G3)
add_section_box(s2, col1_left, row2_top, col_w, row2_h,
"Key Chemical Constituents",
[
"Strychnine – primary alkaloid (toxic in excess)",
"Brucine – secondary alkaloid",
"Loganin – iridoid glycoside",
"Tetrahydroharman – psychoactive compound",
"Flavonoids & volatile oils",
], TW, G1)
add_section_box(s2, col2_left, row2_top, col_w, row2_h,
"Homeopathic Characteristics",
[
"Remedy type: polychrest (wide-ranging use)",
"Potencies: 3C, 5C, 7C, 9C, 30C common",
"Form: pellets, liquid dilutions",
"Keynote: emotional hypersensitivity & grief",
"Contradictory / paradoxical symptom picture",
], TW, G2)
add_section_box(s2, col3_left, row2_top, col_w, row2_h,
"Therapeutic Indications",
[
"Grief, emotional shock, depression",
"Anxiety, nervousness, stress",
"Insomnia & sleep disturbances",
"Headaches / migraines",
"Oral lichen planus (clinical study)",
], TW, G3)
# Footer
ftb = s2.shapes.add_textbox(Inches(0.3), Inches(7.2), Inches(12.7), Pt(22))
ftf = ftb.text_frame
fp = ftf.paragraphs[0]
fp.alignment = PP_ALIGN.CENTER
fr = fp.add_run()
fr.text = "Ignatia Amara | Homeopathic Materia Medica"
fr.font.name = "Calibri"
fr.font.size = Pt(11)
fr.font.italic = True
fr.font.color.rgb = RGBColor(100, 140, 80)
# ─────────────────────────────────────────────────────────────────────────────
# SLIDE 3 – Medicinal Uses & Action
# ─────────────────────────────────────────────────────────────────────────────
s3 = prs.slides.add_slide(blank)
fill_bg(s3, 245, 250, 240)
hbar3 = s3.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(1.2))
hbar3.fill.solid()
hbar3.fill.fore_color.rgb = RGBColor(20, 80, 45)
hbar3.line.fill.background()
htb3 = s3.shapes.add_textbox(Inches(0.4), Inches(0.1), Inches(12), Inches(1.0))
htf3 = htb3.text_frame
hp3 = htf3.paragraphs[0]
hp3.alignment = PP_ALIGN.LEFT
hr3 = hp3.add_run()
hr3.text = "Medicinal Uses & Pharmacology"
hr3.font.name = "Georgia"
hr3.font.size = Pt(32)
hr3.font.bold = True
hr3.font.color.rgb = RGBColor(230, 255, 200)
abar3 = s3.shapes.add_shape(1, Inches(0), Inches(1.2), Inches(13.333), Pt(4))
abar3.fill.solid()
abar3.fill.fore_color.rgb = RGBColor(140, 195, 80)
abar3.line.fill.background()
uses = [
("Mental & Emotional", [
"Primary remedy for acute grief and bereavement",
"Emotional shock, hysteria, and mood swings",
"Suppressed emotions leading to physical symptoms",
"Situational anxiety and nervous exhaustion",
]),
("Nervous System", [
"Neuralgic headaches and migraines",
"Spasms, tics, and involuntary movements",
"Insomnia from over-active mind",
"Hypersensitivity to pain, light, and noise",
]),
("Digestive System", [
"Spasmodic hiccup and globus sensation (lump in throat)",
"Nausea and vomiting from emotional upset",
"Cramping abdominal pain",
"Paradoxical: sore throat better swallowing solids",
]),
]
box_top = Inches(1.45)
box_h = Inches(5.5)
box_w = Inches(4.05)
for idx, (title, bullets) in enumerate(uses):
left = Inches(0.25 + idx * 4.3)
add_section_box(s3, left, box_top, box_w, box_h, title, bullets,
TW, [G1, G2, G3][idx])
ftb3 = s3.shapes.add_textbox(Inches(0.3), Inches(7.2), Inches(12.7), Pt(22))
ftf3 = ftb3.text_frame
fp3 = ftf3.paragraphs[0]
fp3.alignment = PP_ALIGN.CENTER
fr3 = fp3.add_run()
fr3.text = "Ignatia Amara | Homeopathic Materia Medica"
fr3.font.name = "Calibri"
fr3.font.size = Pt(11)
fr3.font.italic = True
fr3.font.color.rgb = RGBColor(100, 140, 80)
# ─────────────────────────────────────────────────────────────────────────────
# SLIDE 4 – Safety & Summary
# ─────────────────────────────────────────────────────────────────────────────
s4 = prs.slides.add_slide(blank)
fill_bg(s4, 20, 60, 40)
top_bar4 = s4.shapes.add_shape(1, Inches(0), Inches(0), Inches(13.333), Inches(0.18))
top_bar4.fill.solid()
top_bar4.fill.fore_color.rgb = RGBColor(180, 210, 100)
top_bar4.line.fill.background()
tb_t4 = s4.shapes.add_textbox(Inches(0.5), Inches(0.6), Inches(12.3), Inches(1.0))
tf_t4 = tb_t4.text_frame
p_t4 = tf_t4.paragraphs[0]
p_t4.alignment = PP_ALIGN.CENTER
r_t4 = p_t4.add_run()
r_t4.text = "Safety Profile & Key Summary"
r_t4.font.name = "Georgia"
r_t4.font.size = Pt(36)
r_t4.font.bold = True
r_t4.font.color.rgb = RGBColor(230, 255, 200)
# Two-column layout
def summary_col(slide, left, top, width, height, title, points, accent):
card = slide.shapes.add_shape(1, left, top, width, height)
card.fill.solid()
card.fill.fore_color.rgb = RGBColor(255, 255, 255)
card.fill.fore_color.theme_color = None
card.line.color.rgb = accent
card.line.width = Pt(1.5)
strip = slide.shapes.add_shape(1, left, top, width, Pt(36))
strip.fill.solid()
strip.fill.fore_color.rgb = accent
strip.line.fill.background()
stb = slide.shapes.add_textbox(left + Inches(0.15), top + Pt(2), width - Inches(0.2), Pt(36))
stf = stb.text_frame
stf.margin_top = 0
sp = stf.paragraphs[0]
sr = sp.add_run()
sr.text = title
sr.font.name = "Calibri"
sr.font.size = Pt(16)
sr.font.bold = True
sr.font.color.rgb = RGBColor(255, 255, 255)
ctb = slide.shapes.add_textbox(left + Inches(0.2), top + Pt(44), width - Inches(0.35), height - Pt(50))
ctf = ctb.text_frame
ctf.word_wrap = True
for i, pt in enumerate(points):
cp = ctf.paragraphs[0] if i == 0 else ctf.add_paragraph()
cp.space_before = Pt(5)
cr = cp.add_run()
cr.text = f"• {pt}"
cr.font.name = "Calibri"
cr.font.size = Pt(14)
cr.font.color.rgb = RGBColor(30, 50, 30)
summary_col(s4,
Inches(0.5), Inches(1.85), Inches(5.8), Inches(4.9),
"Safety & Toxicology",
[
"Strychnine is toxic at high doses – lethal in large quantities",
"Homeopathic dilutions (3C-200C) contain negligible active substance",
"Generally regarded as safe at homeopathic potencies",
"Avoid crude/unprepared seed extracts",
"Consult a practitioner before use in pregnancy or children",
"Not a replacement for conventional psychiatric treatment",
],
RGBColor(200, 60, 60)
)
summary_col(s4,
Inches(7.0), Inches(1.85), Inches(5.8), Inches(4.9),
"Key Takeaways",
[
"Derived from seeds of Strychnos ignatii (Philippines)",
"Rich in strychnine and brucine alkaloids",
"One of the most widely used emotional/grief remedies",
"Paradoxical symptom picture is its hallmark",
"Animal studies suggest anxiolytic-like effects (2012)",
"Evidence base remains limited – further RCTs needed",
],
RGBColor(80, 160, 60)
)
bot_bar4 = s4.shapes.add_shape(1, Inches(0), Inches(7.32), Inches(13.333), Inches(0.18))
bot_bar4.fill.solid()
bot_bar4.fill.fore_color.rgb = RGBColor(180, 210, 100)
bot_bar4.line.fill.background()
# ─────────────────────────────────────────────────────────────────────────────
# Save
# ─────────────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/ignatia-amara-ppt/Ignatia_Amara.pptx"
prs.save(out)
print(f"Saved: {out}")
cd /tmp/workspace/ignatia-amara-ppt && python create_ppt.py 2>&1
~/ignatia-amara-ppt/create_ppt.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/ignatia-amara-ppt/create_ppt.py'
cd /tmp/workspace/ignatia-amara-ppt && python create_ppt.py 2>&1
Ignatia Amara
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 - Title | "Ignatia Amara" on a dark green background with family/genus/species info |
| 2 - Characteristics | Six info cards covering: Botanical Identity, Physical Description, Organoleptic Properties, Key Chemical Constituents, Homeopathic Characteristics, and Therapeutic Indications |
| 3 - Medicinal Uses | Three sections: Mental & Emotional, Nervous System, and Digestive System uses |
| 4 - Safety & Summary | Safety/toxicology notes (strychnine warning) and key takeaways |