explain me full pdf in simple language
cd /tmp/workspace/attachments/7e25ff37-5056-4741-ad6f-9e3b03cef2bc/ && python3 -c " import pdfplumber with pdfplumber.open('maharana college.pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): print(f'\n===== PAGE {i+1} =====') text = page.extract_text() if text: print(text) else: print('[No text found on this page - may be image-based]') "
| # | Suggestion | What it means simply |
|---|---|---|
| 1 | Better cover page | Add college name, theme, team names, and event branding to the front page |
| 2 | Add a Table of Contents | Include a list with page numbers so it's easy to navigate |
| 3 | Include a Baseline Survey | Do a health survey of students BEFORE the event to show what problems existed |
| 4 | Document unique activities properly | Ideas like "Indriya Assessment" were mentioned but not explained with evidence |
| 5 | Show behavioural change data | Activities like screen-time reduction and digital wellness were described but not tracked/reported |
| 6 | Add SOPs (Standard Operating Procedures) | Write step-by-step instructions for each activity so they can be repeated |
| 7 | Add structured training modules | Include learning goals and outcomes for lectures and demonstrations |
| 8 | Show measurable results | Instead of just saying "the programme was completed," show what changed - e.g., before/after awareness test scores |
| 9 | Clarify number of beneficiaries | The report shows many participants in photos, but the form says only 36 beneficiaries - explain the difference |
| 10 | Add a Sustainability Plan | Explain how healthy habits introduced during the week will continue long-term |
| 11 | Write a strong final summary | Add a conclusion with key achievements, lessons learned, and future plans |
| 12 | Fix minor editing issues | Improve formatting, grammar, photo captions for a more professional look |
Ohk based on this make sop ppt what they actually need and keep it professional because it's very imp for me we want to add objective , materials , procedure , responsibilities , precautions so prepare ppt isko bhi dhyaan rakh kr Shirodhara , padha abhyanga, nasya , karn puran , akshi tarpana and we did trataka also and netra prashalan and eye exercise photo I want all objectives, materials, procedure, responsibilities, precautions I want allbut before this our head department is Dr. sandeep jain and his ass. Rahul & vikas and hum har ek unit mai gye the to perform panchkarma and students also perform the panchkarma and don't use simple language use professional language so add these point also for trataka We went in department of yoga and Our head is Dr. Vimla Sidar and for Netra prashalan ( Eye wash ) we went in OPD and our head is Dr. vaishali pawar so add this info also Make it look like professional
mkdir -p /tmp/workspace/maharana-sop-ppt && ls /tmp/workspace/maharana-sop-ppt/
~/maharana-sop-ppt/build_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.oxml.ns import qn
from lxml import etree
from io import BytesIO
# ─── COLOUR PALETTE ───────────────────────────────────────────────
DARK_GREEN = RGBColor(0x01, 0x4D, 0x2E) # deep Ayurvedic green
MID_GREEN = RGBColor(0x02, 0x7A, 0x48)
LIGHT_GREEN = RGBColor(0xD6, 0xF0, 0xE0)
GOLD = RGBColor(0xC8, 0x9B, 0x2A)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
OFF_WHITE = RGBColor(0xF7, 0xF9, 0xF7)
DARK_TEXT = RGBColor(0x1A, 0x1A, 0x2E)
LIGHT_TEXT = RGBColor(0x4A, 0x4A, 0x4A)
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)
blank = prs.slide_layouts[6]
# ─── HELPER FUNCTIONS ─────────────────────────────────────────────
def add_rect(slide, x, y, w, h, fill_color, alpha=None):
shape = slide.shapes.add_shape(
1, # MSO_SHAPE_TYPE.RECTANGLE
Inches(x), Inches(y), Inches(w), Inches(h)
)
shape.line.fill.background()
shape.line.width = 0
fill = shape.fill
fill.solid()
fill.fore_color.rgb = fill_color
return shape
def add_text(slide, text, x, y, w, h, font_name="Calibri", font_size=18,
bold=False, color=DARK_TEXT, align=PP_ALIGN.LEFT,
wrap=True, italic=False, anchor=MSO_ANCHOR.TOP):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = wrap
tf.vertical_anchor = anchor
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.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_bullet_box(slide, items, x, y, w, h, font_size=13, color=DARK_TEXT, heading=None):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = True
tf.margin_left = Inches(0.1)
tf.margin_right = Inches(0.1)
tf.margin_top = Inches(0.05)
tf.margin_bottom = Inches(0.05)
first = True
if heading:
p = tf.paragraphs[0] if first else tf.add_paragraph()
p.alignment = PP_ALIGN.LEFT
run = p.add_run()
run.text = heading
run.font.name = "Calibri"
run.font.size = Pt(font_size + 1)
run.font.bold = True
run.font.color.rgb = DARK_GREEN
first = False
for item in items:
p = tf.add_paragraph() if not first else tf.paragraphs[0]
first = False
p.alignment = PP_ALIGN.LEFT
p.level = 0
run = p.add_run()
run.text = f" • {item}"
run.font.name = "Calibri"
run.font.size = Pt(font_size)
run.font.color.rgb = color
# paragraph spacing
p.space_before = Pt(3)
return tb
def slide_header(slide, title, subtitle=None):
# top bar
add_rect(slide, 0, 0, 13.333, 1.15, DARK_GREEN)
# gold accent line
add_rect(slide, 0, 1.15, 13.333, 0.06, GOLD)
# title
add_text(slide, title, 0.35, 0.12, 12.5, 0.75,
font_name="Calibri", font_size=28, bold=True,
color=WHITE, align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.MIDDLE)
if subtitle:
add_text(slide, subtitle, 0.35, 0.78, 12.5, 0.38,
font_name="Calibri", font_size=13, bold=False,
color=LIGHT_GREEN, align=PP_ALIGN.LEFT, italic=True)
# footer bar
add_rect(slide, 0, 7.2, 13.333, 0.30, DARK_GREEN)
add_text(slide, "Maharana Pratap Ayurvedic Medical College & Hospital, Kanpur | AYURGRAMA 3.0 – Indriya Arogya Saptaha | SOP Document",
0.2, 7.2, 13.0, 0.28, font_size=8.5, color=LIGHT_GREEN,
align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
def sop_section_label(slide, label, x, y, w=2.5, h=0.32):
add_rect(slide, x, y, w, h, MID_GREEN)
add_text(slide, label, x+0.08, y+0.02, w-0.1, h-0.04,
font_size=11, bold=True, color=WHITE,
align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.MIDDLE)
# ══════════════════════════════════════════════════════════════════
# SLIDE 1 – TITLE / COVER
# ══════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
# full background
add_rect(slide, 0, 0, 13.333, 7.5, OFF_WHITE)
# left dark panel
add_rect(slide, 0, 0, 4.8, 7.5, DARK_GREEN)
# gold accent strip
add_rect(slide, 4.8, 0, 0.08, 7.5, GOLD)
add_text(slide, "STANDARD OPERATING\nPROCEDURES", 0.3, 0.5, 4.2, 1.6,
font_size=26, bold=True, color=WHITE, align=PP_ALIGN.LEFT)
add_text(slide, "Panchakarma & Indriya Chikitsa", 0.3, 2.1, 4.2, 0.6,
font_size=15, bold=False, color=GOLD, italic=True, align=PP_ALIGN.LEFT)
add_text(slide, "INDRIYA AROGYA SAPTAHA\nAYURGRAMA 3.0", 0.3, 2.75, 4.2, 1.0,
font_size=14, bold=True, color=LIGHT_GREEN, align=PP_ALIGN.LEFT)
add_text(slide, "Maharana Pratap Ayurvedic\nMedical College & Hospital\nIshwari Ganj, Bithoor Road, Kanpur",
0.3, 5.2, 4.2, 1.2, font_size=12, color=LIGHT_GREEN, align=PP_ALIGN.LEFT)
# right panel content
add_text(slide, "Procedures Covered", 5.3, 0.5, 7.8, 0.55,
font_size=20, bold=True, color=DARK_GREEN, align=PP_ALIGN.LEFT)
add_rect(slide, 5.3, 1.05, 7.6, 0.05, GOLD)
procedures = [
"01 | Shirodhara",
"02 | Padha Abhyanga (Foot Massage)",
"03 | Nasya (Nasal Administration)",
"04 | Karna Purana (Ear Oleation)",
"05 | Akshi Tarpana (Eye Nourishment)",
"06 | Trataka (Ocular Concentration)",
"07 | Netra Prakshalana (Eye Wash)",
"08 | Netra Vyayama (Eye Exercises)",
]
for i, proc in enumerate(procedures):
yy = 1.2 + i * 0.66
bg = LIGHT_GREEN if i % 2 == 0 else WHITE
add_rect(slide, 5.3, yy, 7.6, 0.58, bg)
add_text(slide, proc, 5.5, yy+0.05, 7.2, 0.46,
font_size=14, bold=(i % 2 == 0), color=DARK_GREEN,
align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.MIDDLE)
# footer
add_rect(slide, 0, 7.2, 13.333, 0.30, DARK_GREEN)
add_text(slide, "Maharana Pratap Ayurvedic Medical College & Hospital, Kanpur | AYURGRAMA 3.0 – Indriya Arogya Saptaha | SOP Document",
0.2, 7.2, 13.0, 0.28, font_size=8.5, color=LIGHT_GREEN,
align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
# ══════════════════════════════════════════════════════════════════
# SLIDE 2 – TEAM & LEADERSHIP
# ══════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, OFF_WHITE)
slide_header(slide, "Programme Leadership & Team Structure",
"AYURGRAMA 3.0 – Indriya Arogya Saptaha | Maharana Pratap Ayurvedic Medical College & Hospital")
# three cards
cards = [
{
"dept": "Department of Panchakarma",
"role": "Head of Department",
"name": "Dr. Sandeep Jain",
"assistants": ["Dr. Rahul", "Dr. Vikas"],
"scope": "Supervised all Panchakarma SOP demonstrations across all units; facilitated faculty–student participation for Shirodhara, Padha Abhyanga, Nasya, Karna Purana & Akshi Tarpana.",
},
{
"dept": "Department of Yoga",
"role": "Head of Department",
"name": "Dr. Vimla Sidar",
"assistants": [],
"scope": "Supervised Trataka (ocular concentration) sessions conducted within the Yoga Department; guided students in yogic methodology and ocular discipline.",
},
{
"dept": "OPD – Shalakya Tantra",
"role": "Head of Department",
"name": "Dr. Vaishali Pawar",
"assistants": [],
"scope": "Supervised Netra Prakshalana (eye wash) and Netra Vyayama (eye exercises) sessions conducted in the OPD setting; ensured clinical standards during procedures.",
},
]
for idx, c in enumerate(cards):
cx = 0.25 + idx * 4.35
# card background
add_rect(slide, cx, 1.45, 4.1, 5.5, WHITE)
# card top bar
add_rect(slide, cx, 1.45, 4.1, 0.48, MID_GREEN)
add_text(slide, c["dept"], cx+0.1, 1.45, 3.9, 0.46,
font_size=12, bold=True, color=WHITE,
align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
add_text(slide, c["role"], cx+0.1, 1.98, 3.9, 0.3,
font_size=10, bold=False, color=LIGHT_TEXT,
align=PP_ALIGN.CENTER, italic=True)
add_text(slide, c["name"], cx+0.1, 2.25, 3.9, 0.42,
font_size=17, bold=True, color=DARK_GREEN,
align=PP_ALIGN.CENTER)
if c["assistants"]:
add_text(slide, "Assistants:", cx+0.15, 2.72, 3.8, 0.28,
font_size=10, bold=True, color=MID_GREEN)
add_text(slide, " • " + " • ".join(c["assistants"]),
cx+0.15, 3.0, 3.8, 0.3,
font_size=11, bold=False, color=DARK_TEXT)
scope_y = 3.35
else:
scope_y = 2.75
add_rect(slide, cx+0.1, scope_y, 3.9, 0.04, GOLD)
add_text(slide, "Scope of Involvement", cx+0.1, scope_y+0.08, 3.9, 0.28,
font_size=10, bold=True, color=MID_GREEN)
add_text(slide, c["scope"], cx+0.1, scope_y+0.35, 3.8, 2.4,
font_size=10.5, color=DARK_TEXT, wrap=True)
# ══════════════════════════════════════════════════════════════════
# HELPER: SOP SLIDE (full 5-section layout)
# ══════════════════════════════════════════════════════════════════
def make_sop_slide(title, subtitle, sno,
objectives, materials, procedure,
responsibilities, precautions):
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, OFF_WHITE)
slide_header(slide, f"SOP – {sno} | {title}", subtitle)
# ── ROW 1: Objective (full width) ─────────────────────────────
add_rect(slide, 0.25, 1.35, 12.8, 1.35, WHITE)
sop_section_label(slide, "🎯 OBJECTIVE", 0.25, 1.35, 2.3, 0.3)
add_bullet_box(slide, objectives, 0.35, 1.68, 12.5, 0.95, font_size=11.5)
# ── ROW 2: Materials | Responsibilities ──────────────────────
add_rect(slide, 0.25, 2.82, 6.1, 2.05, WHITE)
sop_section_label(slide, "🧴 MATERIALS REQUIRED", 0.25, 2.82, 2.8, 0.3)
add_bullet_box(slide, materials, 0.35, 3.14, 5.9, 1.6, font_size=11)
add_rect(slide, 6.98, 2.82, 6.1, 2.05, WHITE)
sop_section_label(slide, "👤 RESPONSIBILITIES", 6.98, 2.82, 2.8, 0.3)
add_bullet_box(slide, responsibilities, 7.08, 3.14, 5.9, 1.6, font_size=11)
# ── ROW 3: Procedure | Precautions ───────────────────────────
add_rect(slide, 0.25, 5.0, 6.1, 2.05, WHITE)
sop_section_label(slide, "📋 PROCEDURE", 0.25, 5.0, 2.3, 0.3)
add_bullet_box(slide, procedure, 0.35, 5.32, 5.9, 1.6, font_size=10.5)
add_rect(slide, 6.98, 5.0, 6.1, 2.05, WHITE)
sop_section_label(slide, "⚠️ PRECAUTIONS", 6.98, 5.0, 2.3, 0.3)
add_bullet_box(slide, precautions, 7.08, 5.32, 5.9, 1.6, font_size=10.5)
return slide
# ══════════════════════════════════════════════════════════════════
# SLIDE 3 – SHIRODHARA
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Shirodhara",
subtitle="Department of Panchakarma | HOD: Dr. Sandeep Jain | Assistants: Dr. Rahul & Dr. Vikas",
sno="01",
objectives=[
"To administer a continuous stream of medicated oil/liquid over the forehead (Shira) to pacify Vata and Pitta doshas and promote psycho-neuro relaxation.",
"To enhance sensory acuity of Indriya (sense organs) by stimulating the Sthapani Marma and modulating the neuro-endocrine axis.",
"To demonstrate correct droni positioning, dhara vessel calibration, and temperature regulation to students across all clinical units.",
],
materials=[
"Shirodhara droni (wooden treatment table with head groove)",
"Dhara vessel (clay/metal) with adjustable nozzle and string suspension",
"Medicated oil: Ksheerabala Taila / Brahmi Taila (1–2 L, warmed to 37–40°C)",
"Eye pads / cotton gauze for eye protection",
"Headband / forehead cloth strip",
"Warm water bowl for reheating oil",
"Towels, drape sheets, and disposable cap",
"Thermometer to monitor oil temperature",
],
procedure=[
"Patient positioned in supine on Shirodhara droni; pillow under knees for comfort.",
"Preliminary Abhyanga (oil massage) of scalp and forehead for 5 minutes.",
"Cotton eye pads secured; headband applied to prevent oil seepage.",
"Dhara vessel filled with warm medicated oil and suspended 8–10 cm above forehead.",
"Oil stream directed in a continuous oscillating motion across forehead (Nasika to Shikhara) for 30–45 minutes.",
"Attendant monitors oil temperature every 5–7 min and replenishes vessel.",
"Post-procedure: oil gently wiped; patient rests for 10–15 min in supine.",
"Nasya/steam therapy may be combined as per physician prescription.",
],
responsibilities=[
"Dr. Sandeep Jain: Overall clinical supervision; patient case selection and contraindication screening.",
"Dr. Rahul & Dr. Vikas: Real-time procedure monitoring, oil temperature management, vessel adjustments.",
"Performing Faculty: Demonstration of technique to students before patient procedure.",
"Students (UG/PG): Observed procedure in all units; performed under direct faculty supervision.",
"Attendant/Technician: Vessel refilling, linen management, post-procedure cleanup.",
],
precautions=[
"Strictly contraindicated in: acute fever, scalp wounds/infection, acute cervical spondylosis, severe hypertension, recent head trauma.",
"Oil temperature must not exceed 40°C to prevent thermal injury.",
"Eye pads must be secured before commencement; ensure no oil contact with eyes.",
"Patient must not be left unattended at any point during the procedure.",
"In case of discomfort, giddiness, or diaphoresis — discontinue immediately and inform HOD.",
"Informed consent must be documented prior to procedure.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 4 – PADHA ABHYANGA
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Padha Abhyanga",
subtitle="Foot Oleation & Massage Therapy | Department of Panchakarma | HOD: Dr. Sandeep Jain | Assistants: Dr. Rahul & Dr. Vikas",
sno="02",
objectives=[
"To administer medicated oil massage to the feet and lower limbs for stimulation of Padha Marma points and promotion of peripheral circulation.",
"To alleviate Vata aggravation, reduce stress, improve sleep quality, and strengthen sensory perception through Srotas stimulation.",
"To train students in identification of Marma points of the foot and application of appropriate stroking, kneading, and friction techniques.",
],
materials=[
"Medicated oil: Til Taila (Sesame) / Ksheerabala Taila / Pinda Taila",
"Warm water basin for pre-procedure foot soak",
"Kansa (bronze) bowl or wooden massage tool for friction technique",
"Disposable towels and foot drape",
"Warm towel for post-massage wiping",
"Treatment table/chair with leg support",
"Gauze / cotton swabs",
],
procedure=[
"Patient comfortably seated or in supine position; feet and lower legs exposed.",
"Pre-procedure foot wash with warm water for 5 minutes; dry thoroughly.",
"Warm medicated oil applied in moderate quantity to both feet and ankles.",
"Effleurage (long strokes) applied from toes to ankles for 3–5 minutes.",
"Friction massage over plantar surface and Kurchashira Marma using thumb pressure.",
"Kneading (petrissage) applied to calf muscles and gastrocnemius.",
"Kansa bowl friction on plantar surface for 5 min if indicated (Daha/burning relief).",
"Post-massage: warm towel wiping; patient advised rest for 10 minutes.",
],
responsibilities=[
"Dr. Sandeep Jain: Patient prescription, Marma point guidance and case supervision.",
"Dr. Rahul & Dr. Vikas: Hands-on demonstration for students; monitoring technique correctness.",
"Students: Performed Padha Abhyanga under supervision in all departmental units.",
"Technician/Attendant: Oil preparation, heating, and post-procedure linen disposal.",
],
precautions=[
"Contraindicated in: open wounds, diabetic foot ulcers, deep vein thrombosis, varicose veins with skin changes, acute inflammation.",
"Oil must be warmed (37–39°C); avoid overheating — test on inner wrist before application.",
"Avoid strong pressure over Kurcha, Kurchashira and Talahridaya Marmas in Pitta-dominant patients.",
"Nail care assessment mandatory before procedure; trim if required.",
"Allergy history to oils must be checked prior to application.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 5 – NASYA
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Nasya",
subtitle="Nasal Administration Therapy | Department of Panchakarma | HOD: Dr. Sandeep Jain | Assistants: Dr. Rahul & Dr. Vikas",
sno="03",
objectives=[
"To administer medicated oil/powder/juice through the nasal route (Uttamanga Shodhana) for purification of Urdhva Jatrugata Vikara (head and neck disorders).",
"To demonstrate the clinical significance of Nasya as the primary route for drug delivery to Shiro Pradesh and its effect on olfactory Indriya (Ghranendriya).",
"To impart practical competency in Purva Karma, Pradhana Karma, and Pashchata Karma of Nasya procedure.",
],
materials=[
"Nasya oil: Anu Taila / Shadbindu Taila (as prescribed)",
"Dropper / Nasya applicator",
"Cotton swabs",
"Warm water for Mukha Lepa (face steam)",
"Steam inhaler / Nadi Sweda apparatus",
"Supine positioning pillow (neck extended)",
"Tissue papers, kidney tray",
"Warm towel for face massage (Purva karma)",
],
procedure=[
"Purva Karma: Mild facial Abhyanga with warm oil followed by facial steam (Nadi Sweda) for 5 minutes.",
"Patient positioned supine with neck in slight extension; head tilted back gently.",
"Medicated nasal drops (2–4 drops per nostril) instilled using dropper.",
"Immediately post-instillation: patient advised to sniff gently; nostrils massaged upward.",
"Patient remains supine for 2–3 minutes to allow drug absorption.",
"Pashchata Karma: Patient asked to spit out any oral secretions; Gandoosha (oil pulling) may follow.",
"Document number of drops, side, drug used, and patient response.",
],
responsibilities=[
"Dr. Sandeep Jain: Clinical indication, drug selection, dose determination, overall supervision.",
"Dr. Rahul & Dr. Vikas: Administration of Purva karma; student guidance during Pradhana karma.",
"Students: Observed/performed Nasya instillation under direct faculty supervision in all units.",
"Technician: Preparation of oil, warming to body temperature, instrument sterilisation.",
],
precautions=[
"Contraindicated in: acute rhinitis, epistaxis, recent nasal surgery, indigestion, during menstruation, after meals.",
"Oil temperature must be lukewarm (body temperature ~37°C) before instillation.",
"Patient must not speak, cough forcefully, or sit up immediately after instillation.",
"Single-use droppers must be used per patient to prevent cross-contamination.",
"Monitor for sneezing episodes, lacrimation, or discomfort; discontinue if severe reaction occurs.",
"Nasya should be performed in the morning on an empty or light stomach.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 6 – KARNA PURANA
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Karna Purana",
subtitle="Ear Oleation Therapy | Department of Panchakarma | HOD: Dr. Sandeep Jain | Assistants: Dr. Rahul & Dr. Vikas",
sno="04",
objectives=[
"To instil warm medicated oil into the external auditory canal for lubrication, nourishment, and purification of Karnendriya (auditory organ).",
"To alleviate Vata-dominant Karna Roga including Karna Shoola (earache), Karna Kandu (itching), and hearing impairment through Srotas anulomakarana.",
"To demonstrate correct patient positioning, oil temperature management, and retention time to undergraduate students.",
],
materials=[
"Medicated oil: Bilva Taila / Sarshapa Taila / Anu Taila (as prescribed)",
"Dropper / small syringe (without needle)",
"Warm water bath for oil warming",
"Thermometer",
"Cotton balls for ear plugging",
"Kidney tray and tissue",
"Torch/otoscope for pre-procedure ear examination",
],
procedure=[
"Pre-procedure otoscopic examination to rule out perforation or infection.",
"Patient positioned in lateral decubitus (affected ear uppermost).",
"Oil warmed to 37–40°C; temperature verified on inner wrist.",
"Pinna gently pulled upward-backward (in adults) to straighten the canal.",
"5–10 drops of medicated oil instilled slowly into the ear canal.",
"Patient remains in lateral position for 5–10 minutes; ear gently massaged.",
"Cotton plug inserted loosely; patient turns to drain excess oil after retention.",
"Procedure repeated on contralateral side as prescribed.",
],
responsibilities=[
"Dr. Sandeep Jain: Prescription, contraindication screening, clinical oversight.",
"Dr. Rahul & Dr. Vikas: Demonstration to students; supervision of oil instillation technique.",
"Students: Performed Karna Purana under faculty guidance in all clinical units.",
"Technician: Oil preparation, heating, and sterilisation of instruments.",
],
precautions=[
"Absolutely contraindicated in: tympanic membrane perforation, active otitis media, acute ear infection, recent ear surgery.",
"Oil temperature must be verified before instillation — never exceed 40°C.",
"Do not use force; instil oil gently to prevent vestibular stimulation or pain.",
"Do not use same dropper for both ears without sterilisation.",
"Patient should not swim or expose ears to water on the day of procedure.",
"Inform HOD immediately if patient reports vertigo, sudden hearing loss, or severe pain.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 7 – AKSHI TARPANA
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Akshi Tarpana",
subtitle="Ocular Nourishment Therapy | Department of Panchakarma | HOD: Dr. Sandeep Jain | Assistants: Dr. Rahul & Dr. Vikas",
sno="05",
objectives=[
"To administer medicated ghee (clarified butter) within a dough reservoir around the eyes for nourishment of Chakshurendriya (visual organ) and Drishti Prasadana.",
"To alleviate Vata-Pitta vitiation causing Akshi Roga such as dryness, blurring, fatigue, and degenerative changes of ocular tissues.",
"To demonstrate correct construction of the dough well (Atasi/black gram), ghee filling, retention monitoring, and post-procedure Anjana application to students.",
],
materials=[
"Medicated ghee: Triphala Ghrita / Jeevantyadhi Ghrita (warmed to 35–37°C)",
"Black gram (Masha) dough for constructing orbital well",
"Gauze pads and tissue",
"Warm water for post-procedure eye wash",
"Eye cup / Netra Prakshalana equipment",
"Anjana material (collyrium) for post-procedure application (if prescribed)",
"Thermometer, small ladle",
"Supine positioning pillow",
],
procedure=[
"Patient positioned supine; face cleansed with warm water.",
"Masha (black gram) dough rolled into rings and sealed around bilateral orbital rims to form watertight wells.",
"Patient asked to keep eyes gently closed.",
"Warm medicated ghee poured carefully into each dough well to fill (ghee should cover the eyelids).",
"Patient asked to slowly blink; ghee level maintained throughout procedure.",
"Retention time: 5–15 minutes as prescribed (Samyak Yoga indicated by heaviness, lacrimation).",
"Post-procedure: dough rings removed; excess ghee wiped; eyes washed with Triphala Kashaya.",
"Anjana application and rest in low-light environment for 15 minutes.",
],
responsibilities=[
"Dr. Sandeep Jain: Indication, ghrita selection, Samyak Yoga assessment.",
"Dr. Rahul & Dr. Vikas: Dough construction demonstration; ghee temperature and retention monitoring.",
"Students: Participated in dough construction and ghee application under supervision.",
"Technician: Ghrita preparation, dough preparation, post-procedure cleanup.",
],
precautions=[
"Contraindicated in: acute conjunctivitis, corneal ulcer, recent ocular surgery, high intraocular pressure.",
"Dough well must be completely leak-proof before ghee filling — re-seal any gaps immediately.",
"Ghee must be comfortably warm (not hot); overheated ghee causes corneal injury.",
"Patient must not forcefully squeeze or rub eyes during retention.",
"Post-procedure eye wash mandatory to remove residual ghee.",
"Procedure should be done in a calm, low-light environment; avoid direct sunlight immediately after.",
"Informed consent compulsory; document any changes in visual acuity post-procedure.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 8 – TRATAKA
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Trataka",
subtitle="Ocular Concentration Practice (Shatkarma) | Department of Yoga | HOD: Dr. Vimla Sidar",
sno="06",
objectives=[
"To practice fixed, unblinking gazing at a defined visual object (Ghee lamp/black dot) for strengthening the ocular muscles, improving visual concentration, and purifying the optic pathway.",
"To stimulate Ajna Chakra and enhance the neuro-cognitive clarity, memory, and concentration of students through systematic yogic ocular discipline.",
"To introduce students to the methodology of Bahiranga Trataka (external gazing) and Antaranga Trataka (internal visualization) under expert yogic supervision.",
],
materials=[
"Ghee lamp (Deepa) / black dot on white paper / candle",
"Yoga mat / comfortable seated cushion (Sukhasana/Padmasana)",
"Dark or semi-dark, draught-free room",
"Eye wash cup with clean water (Netra Prakshalana post-practice)",
"Triphala water (for post-Trataka eye wash if indicated)",
"Timer",
],
procedure=[
"Session conducted in the Department of Yoga under supervision of Dr. Vimla Sidar.",
"Participants seated in Sukhasana/Vajrasana at a distance of 60–90 cm from the lamp.",
"Lamp placed at eye level; room dimmed with minimal external light.",
"Participants instructed to gaze at the tip of the flame without blinking for 1–3 minutes initially.",
"Upon onset of lacrimation, eyes gently closed and the after-image is observed internally.",
"Cycle repeated 3 times progressively, extending duration with practice.",
"Session concluded with palming (Trataka Shavasana) — palms warmed by friction placed over closed eyes.",
"Post-practice: gentle eye wash with clean water or Triphala water performed.",
],
responsibilities=[
"Dr. Vimla Sidar (HOD, Yoga Dept.): Overall session leadership, technique guidance, safety monitoring.",
"Yoga Faculty/Demonstrators: Pre-session briefing, positioning correction, individual guidance.",
"Students: Practiced Trataka under direct supervision; maintained silence and concentration protocols.",
"Support Staff: Room preparation, lamp arrangement, post-practice water provision.",
],
precautions=[
"Contraindicated in: epilepsy, severe myopia/hyperopia without correction, recent eye surgery, active conjunctivitis.",
"Session to be performed in a draught-free environment — lamp flickering must be minimised.",
"Never force suppression of lacrimation; natural tearing is an expected and beneficial response.",
"Participants with spectacles: may perform with glasses initially; advanced practice without glasses under guidance.",
"Duration must be gradually increased — overpractice causes ocular strain.",
"Immediate cessation required if participant reports severe eye pain, dizziness, or photophobia.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 9 – NETRA PRAKSHALANA (Eye Wash)
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Netra Prakshalana",
subtitle="Therapeutic Eye Wash | OPD – Shalakya Tantra | HOD: Dr. Vaishali Pawar",
sno="07",
objectives=[
"To cleanse the ocular surface, conjunctival sac, and palpebral margins using medicated decoctions for removal of Dosha accumulation, foreign particles, and secretions.",
"To alleviate Shopha (inflammation), Kandu (itching), and Daha (burning) of Netra through the local Shodhana action of Kashaya/Jala.",
"To demonstrate correct eye cup technique, solution preparation, and patient positioning to students in the OPD clinical setting.",
],
materials=[
"Triphala Kashaya (decoction) / Rose water / Normal saline (as prescribed)",
"Sterile eye wash cup (Netra cup)",
"Gauze pads and sterile cotton",
"Kidney tray",
"Towel and neck drape",
"Warm water for solution preparation",
"pH indicator strips (if saline prepared in-house)",
"Torch for pre-procedure ocular examination",
],
procedure=[
"Session conducted in OPD (Shalakya Tantra) under supervision of Dr. Vaishali Pawar.",
"Pre-procedure visual acuity and ocular examination by the supervising physician.",
"Solution prepared and cooled to a comfortable temperature (32–36°C).",
"Patient seated upright; neck drape applied; kidney tray held below chin.",
"Eye wash cup filled with solution and pressed gently against the orbital rim, forming a seal.",
"Patient asked to open eye within the cup and blink several times for 1–2 minutes.",
"Cup removed; excess solution blotted with sterile gauze.",
"Procedure repeated for the other eye with fresh solution and clean cup.",
"Post-wash: ocular surface examined; any prescribed Anjana applied.",
],
responsibilities=[
"Dr. Vaishali Pawar (HOD, OPD): Clinical diagnosis, solution prescription, student supervision.",
"OPD Staff/Residents: Solution preparation, patient positioning, post-procedure documentation.",
"Students: Observed and performed Netra Prakshalana under faculty guidance in OPD.",
"Pharmacist/Technician: Preparation of Triphala Kashaya and sterilisation of eye cups.",
],
precautions=[
"Contraindicated in: open globe injury, perforating eye wounds, corneal ulcer with hypopyon.",
"Use separate, sterile eye cups for each eye and each patient — never share equipment.",
"Solution temperature must be verified before application; hot solution causes corneal damage.",
"Patient must not press the cup hard against the eye — gentle seal only.",
"Instruct patient not to rub eyes immediately after wash.",
"Any worsening of symptoms post-procedure must be reported to Dr. Vaishali Pawar immediately.",
"Single-use cups to be discarded after each session; reusable cups must be autoclaved.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 10 – NETRA VYAYAMA (Eye Exercises)
# ══════════════════════════════════════════════════════════════════
make_sop_slide(
title="Netra Vyayama",
subtitle="Therapeutic Eye Exercises | OPD – Shalakya Tantra | HOD: Dr. Vaishali Pawar",
sno="08",
objectives=[
"To systematically exercise the extraocular muscles, ciliary body, and iris sphincter through a structured protocol of directional, accommodative, and relaxation eye movements.",
"To reduce asthenopia (eye fatigue), improve accommodation, and prevent degenerative changes of the visual apparatus through regular Netra Vyayama practice.",
"To train students and beneficiaries in self-administered eye exercise protocols applicable for daily Dinacharya adherence.",
],
materials=[
"Comfortable seating (chair/mat)",
"Well-lit, clutter-free room",
"Printed exercise chart (for patient reference)",
"Pencil or finger (for accommodation exercises)",
"Timer/metronome",
"Clean palms (for palming relaxation)",
],
procedure=[
"Session conducted in OPD under supervision of Dr. Vaishali Pawar.",
"Participants seated comfortably; spectacles removed if clinically safe to do so.",
"Warm-up: Palming — rubbed palms placed over closed eyes for 30 seconds.",
"Directional movements: Eyes moved slowly UP-DOWN × 10, LEFT-RIGHT × 10, DIAGONAL × 10.",
"Rotational movement: Full clockwise and anti-clockwise circles × 5 each.",
"Accommodation exercise: Near-far focusing — pencil held 30 cm away, alternate focus to distant object × 10.",
"Blinking exercise: Rapid voluntary blinking × 20 for lacrimal stimulation.",
"Cool-down: Palming repeated for 1 minute; eyes remain closed in relaxation.",
"Patients instructed on twice-daily home practice protocol.",
],
responsibilities=[
"Dr. Vaishali Pawar: Programme design, individual patient suitability assessment, group instruction.",
"OPD Residents/Faculty: Live demonstration; correction of technique errors.",
"Students: Led and co-facilitated exercise sessions; distributed printed exercise charts.",
"Support Staff: Room setup, printed material distribution.",
],
precautions=[
"Contraindicated in: recent retinal detachment surgery, acute uveitis, severe photophobia.",
"Patients with strabismus or amblyopia must be assessed individually before group protocol.",
"Exercises must be performed gently — no forceful eye movements.",
"Patients are advised to stop and rest if any exercise causes pain, excessive tearing, or dizziness.",
"Accommodation exercises must not be performed by post-cataract surgery patients without physician clearance.",
"Adequate lighting is mandatory — performing exercises in dim light is counterproductive.",
],
)
# ══════════════════════════════════════════════════════════════════
# SLIDE 11 – CLOSING / DOCUMENT CONTROL
# ══════════════════════════════════════════════════════════════════
slide = prs.slides.add_slide(blank)
add_rect(slide, 0, 0, 13.333, 7.5, OFF_WHITE)
# top bar
add_rect(slide, 0, 0, 13.333, 1.15, DARK_GREEN)
add_rect(slide, 0, 1.15, 13.333, 0.06, GOLD)
add_text(slide, "Document Control & Acknowledgements", 0.35, 0.12, 12.5, 0.75,
font_name="Calibri", font_size=26, bold=True,
color=WHITE, align=PP_ALIGN.LEFT, anchor=MSO_ANCHOR.MIDDLE)
# Document info table
headers = ["SOP No.", "Procedure", "Department", "Supervising Faculty"]
rows_data = [
["SOP-01", "Shirodhara", "Panchakarma", "Dr. Sandeep Jain"],
["SOP-02", "Padha Abhyanga", "Panchakarma", "Dr. Sandeep Jain"],
["SOP-03", "Nasya", "Panchakarma", "Dr. Sandeep Jain"],
["SOP-04", "Karna Purana", "Panchakarma", "Dr. Sandeep Jain"],
["SOP-05", "Akshi Tarpana", "Panchakarma", "Dr. Sandeep Jain"],
["SOP-06", "Trataka", "Yoga", "Dr. Vimla Sidar"],
["SOP-07", "Netra Prakshalana", "OPD (Shalakya)", "Dr. Vaishali Pawar"],
["SOP-08", "Netra Vyayama", "OPD (Shalakya)", "Dr. Vaishali Pawar"],
]
col_x = [0.3, 1.8, 5.0, 8.3]
col_w = [1.4, 3.0, 3.1, 4.4]
row_h = 0.42
header_y = 1.35
# header row
for ci, (hdr, cx, cw) in enumerate(zip(headers, col_x, col_w)):
add_rect(slide, cx, header_y, cw, row_h, MID_GREEN)
add_text(slide, hdr, cx+0.06, header_y+0.04, cw-0.1, row_h-0.06,
font_size=11, bold=True, color=WHITE,
align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
for ri, row in enumerate(rows_data):
ry = header_y + (ri+1) * row_h
bg = LIGHT_GREEN if ri % 2 == 0 else WHITE
for ci, (cell, cx, cw) in enumerate(zip(row, col_x, col_w)):
add_rect(slide, cx, ry, cw, row_h, bg)
add_text(slide, cell, cx+0.06, ry+0.04, cw-0.1, row_h-0.06,
font_size=11, bold=(ci == 0), color=DARK_TEXT,
align=PP_ALIGN.CENTER if ci == 0 else PP_ALIGN.LEFT,
anchor=MSO_ANCHOR.MIDDLE)
# acknowledgement
add_rect(slide, 0.3, 5.6, 12.7, 1.35, WHITE)
add_rect(slide, 0.3, 5.6, 0.08, 1.35, GOLD)
add_text(slide, "Acknowledgements", 0.55, 5.65, 12.2, 0.32,
font_size=13, bold=True, color=DARK_GREEN)
add_text(slide,
"The organizing team gratefully acknowledges the leadership and guidance of the Principal & Management of Maharana Pratap Ayurvedic Medical College & Hospital. "
"Special recognition to Dr. Sandeep Jain (HOD, Panchakarma), Dr. Rahul & Dr. Vikas (Assistants, Panchakarma), Dr. Vimla Sidar (HOD, Yoga), and Dr. Vaishali Pawar (HOD, OPD Shalakya Tantra) "
"for their dedicated mentorship, clinical expertise, and commitment to student education during AYURGRAMA 3.0 – Indriya Arogya Saptaha.",
0.55, 6.0, 12.2, 0.9, font_size=10.5, color=DARK_TEXT, wrap=True)
# footer
add_rect(slide, 0, 7.2, 13.333, 0.30, DARK_GREEN)
add_text(slide, "Maharana Pratap Ayurvedic Medical College & Hospital, Kanpur | AYURGRAMA 3.0 – Indriya Arogya Saptaha | SOP Document",
0.2, 7.2, 13.0, 0.28, font_size=8.5, color=LIGHT_GREEN,
align=PP_ALIGN.CENTER, anchor=MSO_ANCHOR.MIDDLE)
# ══════════════════════════════════════════════════════════════════
# SAVE
# ══════════════════════════════════════════════════════════════════
out = "/tmp/workspace/maharana-sop-ppt/Maharana_SOP_Panchakarma_Indriya.pptx"
buf = BytesIO()
prs.save(buf)
with open(out, "wb") as f:
f.write(buf.getvalue())
print(f"Saved: {out}")
python3 /tmp/workspace/maharana-sop-ppt/build_ppt.py
python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/maharana-sop-ppt/Maharana_SOP_Panchakarma_Indriya.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): texts = [s.text_frame.text[:60] for s in slide.shapes if s.has_text_frame and s.text_frame.text.strip()] print(f' Slide {i}: {texts[:2]}') "
Maharana SOP Panchakarma Indriya
Presentation · PPTX
| Slide | Content |
|---|---|
| Slide 1 | Cover Page - Title, all 8 procedures listed, college name & branding |
| Slide 2 | Programme Leadership - Dr. Sandeep Jain + Dr. Rahul & Vikas (Panchakarma), Dr. Vimla Sidar (Yoga), Dr. Vaishali Pawar (OPD) |
| Slide 3 | SOP-01 Shirodhara |
| Slide 4 | SOP-02 Padha Abhyanga |
| Slide 5 | SOP-03 Nasya |
| Slide 6 | SOP-04 Karna Purana |
| Slide 7 | SOP-05 Akshi Tarpana |
| Slide 8 | SOP-06 Trataka (Yoga Dept. - Dr. Vimla Sidar) |
| Slide 9 | SOP-07 Netra Prakshalana/Eye Wash (OPD - Dr. Vaishali Pawar) |
| Slide 10 | SOP-08 Netra Vyayama/Eye Exercises (OPD - Dr. Vaishali Pawar) |
| Slide 11 | Document Control Table + Full Acknowledgements |
Add images of procedures to specific SOP slides for visual documentation
Shirodhara Panchakarma procedure image ayurvedic treatment photo
Nasya Karna Purana Akshi Tarpana Padha Abhyanga Trataka Netra Prakshalana ayurvedic procedure photos
mkdir -p /tmp/workspace/maharana-sop-ppt/images # Download images for each procedure using direct, reliable Wikimedia/public domain URLs declare -A URLS=( ["shirodhara"]="https://www.keralatourism.org/images/ayurveda/static-banner/large/Shirodhara-18022020061530.jpg" ["shirodhara2"]="https://www.nimba.in/wp-content/uploads/2024/06/Shirodhara-Treatment-Procedure-Benefits.jpeg" ["padha"]="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Ayurvedic_foot_massage.jpg/800px-Ayurvedic_foot_massage.jpg" ["nasya"]="https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Nasya_Panchakarma.jpg/800px-Nasya_Panchakarma.jpg" ["karna"]="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Karna_Purana.jpg/800px-Karna_Purana.jpg" ["akshi"]="https://aayushreeayurved.com/wp-content/uploads/2023/06/netra-tarpan-scaled.jpg" ["trataka"]="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Trataka.jpg/800px-Trataka.jpg" ["netra"]="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/Netra_Prakshalana.jpg/800px-Netra_Prakshalana.jpg" ) for key in "${!URLS[@]}"; do echo "Downloading $key..." wget -q --timeout=15 -O "/tmp/workspace/maharana-sop-ppt/images/${key}.jpg" "${URLS[$key]}" 2>&1 size=$(stat -c%s "/tmp/workspace/maharana-sop-ppt/images/${key}.jpg" 2>/dev/null || echo 0) echo " -> $key: ${size} bytes" done
python3 /tmp/skills/shared/scripts/fetch_images.py \ "https://www.keralatourism.org/images/ayurveda/static-banner/large/Shirodhara-18022020061530.jpg" \ "https://www.nimba.in/wp-content/uploads/2024/06/Shirodhara-Treatment-Procedure-Benefits.jpeg" \ "https://aayushreeayurved.com/wp-content/uploads/2023/06/netra-tarpan-scaled.jpg" \ "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Ayurvedic_foot_massage.jpg/800px-Ayurvedic_foot_massage.jpg" \ "https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Nasya_Panchakarma.jpg/800px-Nasya_Panchakarma.jpg" \ "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Karna_Purana.jpg/800px-Karna_Purana.jpg" \ 2>&1 | head -100
Nasya treatment nose drops Akshi Tarpana eye ghee Karna Purana ear oil Padha Abhyanga foot massage Trataka candle gaze Netra Prakshalana eye wash ayurvedic images
mkdir -p /tmp/workspace/maharana-sop-ppt/images # Try multiple image URLs for each procedure # Shirodhara - already downloaded before, let's re-check ls /tmp/workspace/maharana-sop-ppt/images/ 2>/dev/null || echo "No images yet" # Try Pexels / direct public domain sources declare -A URLS=( ["shirodhara"]="https://www.keralatourism.org/images/ayurveda/ayurveda-treatments/shirodhara/shirodhara-1.jpg" ["nasya"]="https://www.nimba.in/wp-content/uploads/2019/06/nasya.jpg" ["padha_abhyanga"]="https://www.nimba.in/wp-content/uploads/2019/06/padabhyanga.jpg" ["karna_purana"]="https://www.nimba.in/wp-content/uploads/2019/06/karna-poorna.jpg" ["akshi_tarpana"]="https://www.nimba.in/wp-content/uploads/2019/06/netra-tarpan.jpg" ["trataka"]="https://www.artofliving.org/sites/default/files/styles/original_image/public/trataka.jpg" ["netra_prakshalana"]="https://www.nimba.in/wp-content/uploads/2019/06/netra-prakshalana.jpg" ["eye_exercises"]="https://www.nimba.in/wp-content/uploads/2019/06/eye-exercises.jpg" ) for key in "${!URLS[@]}"; do url="${URLS[$key]}" out="/tmp/workspace/maharana-sop-ppt/images/${key}.jpg" echo "Downloading $key from $url ..." curl -s -L --max-time 10 -A "Mozilla/5.0" -o "$out" "$url" size=$(stat -c%s "$out" 2>/dev/null || echo 0) echo " -> $key: $size bytes" done
# Check file types - 218566 bytes same for all nimba = probably same fallback image for f in /tmp/workspace/maharana-sop-ppt/images/*.jpg; do echo -n "$f: " file "$f" | grep -o "JPEG\|PNG\|GIF\|HTML\|ASCII" echo " $(stat -c%s "$f") bytes" done # Check shirodhara - 16 bytes is definitely not an image echo "---" cat /tmp/workspace/maharana-sop-ppt/images/shirodhara.jpg
Shirodhara Ayurvedic therapy - patient lying down with warm medicated oil flowing in a steady stream from a copper vessel onto the forehead, peaceful spa setting, professional medical illustration style
Nasya Ayurvedic treatment - patient reclined with head tilted back, practitioner administering medicated oil drops into the nostrils using a dropper, traditional Ayurvedic setting
Padha Abhyanga Ayurvedic foot massage - both feet being massaged with warm medicated oil by a therapist, traditional brass oil lamp nearby, relaxing therapeutic setting
Karna Purana Ayurvedic ear treatment - patient lying on side, warm medicated oil being poured gently into the ear canal with a small vessel, traditional therapy room
404 Not Found. {'message': '{\n "error": {\n "code": 404,\n "message": "Publisher model `projects/engaged-beaker-474810-u2/locations/global/publishers/google/models/gemini-3-pro-image-preview` was not found or your project does not have access to it. Ensure you are using a valid model name and that the model is available in the specified region. For more information, see: https://docs.cloud.google.com/gemini-enterprise-agent-platform/resources/locations.",\n "status": "NOT_FOUND"\n }\n}\n', 'status': 'Not Found'}
We encountered an error while processing your request. Please try again or reach out to us for help.
reppare and add these logos in front page
mkdir -p /tmp/workspace/maharana-sop-ppt/logos # Download all 3 logos curl -s -L --max-time 15 -o /tmp/workspace/maharana-sop-ppt/logos/mpgi.jpg "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000090892-1784794507283-f78i86.jpg" curl -s -L --max-time 15 -o /tmp/workspace/maharana-sop-ppt/logos/ncism.jpg "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000090902-1784794512787-g6jd04.jpg" curl -s -L --max-time 15 -o /tmp/workspace/maharana-sop-ppt/logos/ayurgrama.jpg "https://d361swluvexzqs.cloudfront.net/chats-attachments/1000090903-1784794513098-7drqxn.jpg" for f in /tmp/workspace/maharana-sop-ppt/logos/*.jpg; do echo "$f: $(stat -c%s "$f") bytes - $(file "$f" | grep -oE 'JPEG|PNG|GIF|HTML|ASCII')" done
~/maharana-sop-ppt/add_logos.py
"""
Add 3 logos to Slide 1 (title/cover) of the existing PPTX.
Layout:
- Left dark green panel is 4.8 inches wide, 7.5 inches tall
- Place logos near the bottom of the left panel, side by side, centered
- Order (left to right): MPGI | NCISM | AYURGRAMA 3.0
- Each logo: ~1.2 inches wide, proportional height, with small labels beneath
"""
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 PIL import Image
import io
INPUT = "/tmp/workspace/maharana-sop-ppt/Maharana_SOP_Panchakarma_Indriya.pptx"
OUTPUT = "/tmp/workspace/maharana-sop-ppt/Maharana_SOP_Panchakarma_Indriya.pptx"
LOGOS = [
{
"path": "/tmp/workspace/maharana-sop-ppt/logos/mpgi.jpg",
"label": "MPGI",
},
{
"path": "/tmp/workspace/maharana-sop-ppt/logos/ncism.jpg",
"label": "NCISM",
},
{
"path": "/tmp/workspace/maharana-sop-ppt/logos/ayurgrama.jpg",
"label": "Ayurgrama 3.0",
},
]
GOLD = RGBColor(0xC8, 0x9B, 0x2A)
LIGHT_GREEN = RGBColor(0xD6, 0xF0, 0xE0)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
prs = Presentation(INPUT)
slide = prs.slides[0] # Slide 1 – cover
# ── Logo placement geometry ──────────────────────────────────────
# Left panel width = 4.8 in. Available width for 3 logos + gaps.
# Each logo box: 1.3 in wide. Total 3*1.3 = 3.9 in.
# Left margin inside panel: (4.8 - 3.9) / 2 = 0.45 in → start at x=0.45
# Logo row top: y = 3.8 in (below the existing text which ends ~3.7)
# Logo image height: 1.1 in (max)
# Label beneath: 0.25 in
LOGO_W = 1.3 # inches – each logo slot width
GAP = 0.0 # inches – gap between logo slots (they are packed tightly)
START_X = 0.15 # inches – left margin inside panel
LOGO_Y = 3.85 # inches – top of logo area
IMG_H = 1.1 # inches – max height for image
LABEL_H = 0.28 # inches – label text height
def add_logo(slide, img_path, x, y, slot_w, max_h):
"""Add a logo image centered in a slot, preserving aspect ratio."""
with Image.open(img_path) as img:
iw, ih = img.size
aspect = iw / ih
# fit within slot_w x max_h
if (slot_w / max_h) > aspect:
# height-constrained
disp_h = max_h
disp_w = max_h * aspect
else:
# width-constrained
disp_w = slot_w
disp_h = slot_w / aspect
# center horizontally in slot
offset_x = (slot_w - disp_w) / 2
pic = slide.shapes.add_picture(
img_path,
Inches(x + offset_x),
Inches(y),
Inches(disp_w),
Inches(disp_h),
)
return pic
def add_label(slide, text, x, y, w, h):
tb = slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf = tb.text_frame
tf.word_wrap = False
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run = p.add_run()
run.text = text
run.font.name = "Calibri"
run.font.size = Pt(8)
run.font.bold = True
run.font.color.rgb = GOLD
# ── Add a thin gold divider line above logos ─────────────────────
from pptx.util import Inches
from pptx.oxml.ns import qn
from lxml import etree
def add_line(slide, x1, y1, x2, y2, color_rgb, width_pt=0.75):
"""Add a straight line connector."""
from pptx.util import Pt as ptU
line = slide.shapes.add_connector(
1, # MSO_CONNECTOR_TYPE.STRAIGHT
Inches(x1), Inches(y1), Inches(x2), Inches(y2)
)
line.line.color.rgb = color_rgb
line.line.width = ptU(width_pt)
# Gold separator line across the left panel
add_line(slide, 0.2, 3.75, 4.6, 3.75, GOLD, width_pt=1.0)
# Add small "Supported by:" label
tb = slide.shapes.add_textbox(Inches(0.2), Inches(3.78), Inches(4.4), Inches(0.22))
tf = tb.text_frame
tf.word_wrap = False
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
run = p.add_run()
run.text = "Supported & Guided By"
run.font.name = "Calibri"
run.font.size = Pt(8.5)
run.font.bold = False
run.font.italic = True
run.font.color.rgb = LIGHT_GREEN
# ── Place each logo ───────────────────────────────────────────────
for i, logo in enumerate(LOGOS):
x_slot = START_X + i * (LOGO_W + GAP)
add_logo(slide, logo["path"], x_slot, LOGO_Y, LOGO_W, IMG_H)
add_label(slide, logo["label"], x_slot, LOGO_Y + IMG_H + 0.02, LOGO_W, LABEL_H)
# ── Save ──────────────────────────────────────────────────────────
prs.save(OUTPUT)
print(f"Saved: {OUTPUT}")
# Quick check: count shapes on slide 1
prs2 = Presentation(OUTPUT)
print(f"Slide 1 shapes after update: {len(prs2.slides[0].shapes)}")
cd /tmp/workspace/maharana-sop-ppt && python add_logos.py
python3 - <<'EOF' from pptx import Presentation from pptx.util import Inches prs = Presentation("/tmp/workspace/maharana-sop-ppt/Maharana_SOP_Panchakarma_Indriya.pptx") slide = prs.slides[0] print("=== Slide 1 Shapes ===") for i, shape in enumerate(slide.shapes): stype = shape.shape_type name = shape.name left = round(shape.left / 914400, 2) top = round(shape.top / 914400, 2) w = round(shape.width / 914400, 2) h = round(shape.height/ 914400, 2) label = "" if hasattr(shape, "text") and shape.text: label = f' text="{shape.text[:40]}"' print(f" [{i:02d}] type={stype} '{name}' pos=({left},{top}) size=({w}x{h}){label}") print(f"\nTotal slides: {len(prs.slides)}") EOF
Maharana SOP Panchakarma Indriya
Presentation · PPTX