Garbha samskara instagram id ke liye bio and ad ke liye ach sa information vala page bna do
Garbha Samskara benefits pregnancy ancient Indian practice
Garbha samskara instagram id ke liye bio and ad ke liye ach sa information vala page bna do
Garbha Samskara benefits pregnancy ancient Indian practice details
🌿 गर्भ संस्कार | Garbha Samskara 🌿
✨ Shishu ke Jeevan ki Shubh Shuruaat
🤰 Garbhavastha mein Maa aur Shishu ka Samagra Vikas
🧘 Ayurvedic | Vedic | Pranayam | Mantra | Poshan
📿 Sanatan Parampara se inspired prenatal care
📩 DM for Classes / Sessions
👇 Abhi Judiye — Link in Bio
"गर्भ" = माँ का गर्भ (Womb) "संस्कार" = शिशु पर सकारात्मक संस्कारों का आरोपण
| 🔷 स्तंभ | 🌿 विवरण |
|---|---|
| 🧘 मानसिक | Meditation, सकारात्मक विचार, तनाव मुक्ति |
| 🎵 संगीत | Vedic Mantras, Classical Music, शिशु से संवाद |
| 🥗 आहार | Ayurvedic Sattvic Diet, पौष्टिक भोजन |
| 📖 अध्ययन | अच्छी कहानियाँ, धर्मग्रंथ, प्रेरणादायक पुस्तकें |
| 🌿 योग | Garbhini Yoga, Pranayam, Light Exercises |
| 🙏 आध्यात्म | Puja, Mantra, Sanskara Vidhi |
"एक सुसंस्कृत माँ — एक संस्कारवान राष्ट्र की नींव है।"
#गर्भसंस्कार #GarbhaSamskara #GarbhSanskar
#PregnancyWellness #AyurvedicPregnancy
#VedicMotherhood #ConsciousParenting
#HappyPregnancy #MaaAurShishu #MotherhoodIndia
#PregnancyYoga #GarbhSanskarClass
#VedicBabyDevelopment #SattvicDiet
#IndianPregnancyTradition #HolisticPregnancy
#NewMom #MomToBe #PregnancyJourney
#गर्भावस्था #माँ_और_शिशु
Make a professional PDF poster for this information
ls /home/daytona/workspace/ 2>/dev/null && mkdir -p /home/daytona/workspace/garb…
~/garbha-samskara/create_poster.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import KeepTogether
import os
OUTPUT = "/home/daytona/workspace/garbha-samskara/GarbhaSamskara_Poster.pdf"
# Color Palette - Earthy, spiritual, warm
SAFFRON = colors.HexColor("#E8792C")
DARK_SAFFRON = colors.HexColor("#C05C10")
CREAM = colors.HexColor("#FFF8EE")
GOLD = colors.HexColor("#D4A017")
LIGHT_GOLD = colors.HexColor("#FFF0C0")
GREEN = colors.HexColor("#4A7C59")
LIGHT_GREEN = colors.HexColor("#E8F5EE")
MAROON = colors.HexColor("#7B1A1A")
BROWN_LIGHT = colors.HexColor("#FBF0E0")
TEXT_DARK = colors.HexColor("#2B1A0A")
TEXT_MID = colors.HexColor("#5A3A1A")
WHITE = colors.white
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm,
leftMargin=1.8*cm,
topMargin=1.5*cm,
bottomMargin=1.5*cm,
)
W, H = A4
styles = getSampleStyleSheet()
def style(name, **kwargs):
s = ParagraphStyle(name, **kwargs)
return s
# ── Styles ──────────────────────────────────────────────────────
TITLE_STYLE = style("Title",
fontSize=28, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=34, spaceAfter=2)
SUBTITLE_STYLE = style("Subtitle",
fontSize=13, textColor=LIGHT_GOLD, alignment=TA_CENTER,
fontName="Helvetica-Oblique", leading=18, spaceAfter=4)
TAGLINE_STYLE = style("Tagline",
fontSize=10, textColor=CREAM, alignment=TA_CENTER,
fontName="Helvetica", leading=14)
SECTION_HEAD = style("SectionHead",
fontSize=13, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", leading=18)
BODY = style("Body",
fontSize=10, textColor=TEXT_DARK, alignment=TA_JUSTIFY,
fontName="Helvetica", leading=15, spaceAfter=4)
BODY_CENTER = style("BodyCenter",
fontSize=10, textColor=TEXT_DARK, alignment=TA_CENTER,
fontName="Helvetica", leading=14)
BULLET = style("Bullet",
fontSize=10, textColor=TEXT_DARK, alignment=TA_LEFT,
fontName="Helvetica", leading=16, leftIndent=10, spaceAfter=2)
BOLD_BULLET = style("BoldBullet",
fontSize=10, textColor=MAROON, alignment=TA_LEFT,
fontName="Helvetica-Bold", leading=16, leftIndent=10, spaceAfter=2)
QUOTE = style("Quote",
fontSize=11, textColor=MAROON, alignment=TA_CENTER,
fontName="Helvetica-Oblique", leading=16)
CONTACT = style("Contact",
fontSize=10, textColor=TEXT_MID, alignment=TA_CENTER,
fontName="Helvetica", leading=15)
FOOTER = style("Footer",
fontSize=8, textColor=TEXT_MID, alignment=TA_CENTER,
fontName="Helvetica", leading=12)
# ── Helper: colored banner ───────────────────────────────────────
def banner(text_para, bg_color, padding_top=8, padding_bottom=8):
t = Table([[text_para]], colWidths=[W - 3.6*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg_color),
("ROUNDEDCORNERS", [6]),
("TOPPADDING", (0,0), (-1,-1), padding_top),
("BOTTOMPADDING", (0,0), (-1,-1), padding_bottom),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
return t
def two_col_table(left_items, right_items, left_color, right_color):
col_w = (W - 3.6*cm) / 2 - 4
left_cells = [Paragraph(x, BULLET) for x in left_items]
right_cells = [Paragraph(x, BULLET) for x in right_items]
data = list(zip(left_cells, right_cells))
t = Table(data, colWidths=[col_w, col_w])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), left_color),
("BACKGROUND", (1,0), (1,-1), right_color),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
# ── Build Story ──────────────────────────────────────────────────
story = []
# ═══ HEADER BANNER ═══
header_content = [
Paragraph("🌸 गर्भ संस्कार 🌸", TITLE_STYLE),
Paragraph("Garbha Samskara", SUBTITLE_STYLE),
Paragraph("Shishu ke Jeevan ki Shubh Shuruaat — Womb to Wisdom", TAGLINE_STYLE),
]
header_table = Table([[p] for p in header_content], colWidths=[W - 3.6*cm])
header_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), SAFFRON),
("TOPPADDING", (0,0), (-1,-1), 12),
("BOTTOMPADDING", (0,0), (-1,-1), 12),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
story.append(header_table)
story.append(Spacer(1, 10))
# ═══ WHAT IS GARBHA SAMSKARA ═══
story.append(banner(Paragraph("🌿 Garbha Samskara Kya Hai?", SECTION_HEAD), GREEN, 7, 7))
story.append(Spacer(1, 6))
story.append(Paragraph(
"<b>Garbha Samskara</b> Bharat ki sabse prachin aur vaigyanik prenatal (garbhakalin) dekhbhal paddhati hai. "
"Yeh manyata hai ki <b>garbhavastha ke dauran maa ke vichar, bhavanaein, aahar aur jeevanshaili</b> — "
"shishu ke mastishk, vyaktitva aur swasthya ko gehrai se prabhavit karti hai.",
BODY))
story.append(Spacer(1, 4))
# Sanskrit box
skt_data = [
[Paragraph("<b>GARBHA</b>", style("skt1", fontSize=11, textColor=SAFFRON, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=14)),
Paragraph("<b>SANSKARA</b>", style("skt2", fontSize=11, textColor=GREEN, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=14))],
[Paragraph("Maa ka Garbh (Womb)", style("skt3", fontSize=9, textColor=TEXT_MID, alignment=TA_CENTER, fontName="Helvetica", leading=12)),
Paragraph("Shishu par Sakaratmak Samskaaron ka Aropaṇ", style("skt4", fontSize=9, textColor=TEXT_MID, alignment=TA_CENTER, fontName="Helvetica", leading=12))],
]
col_w = (W - 3.6*cm) / 2
skt_table = Table(skt_data, colWidths=[col_w, col_w])
skt_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#FFF0D8")),
("BACKGROUND", (1,0), (1,-1), LIGHT_GREEN),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.5, GOLD),
("LINEAFTER", (0,0), (0,-1), 0.5, GOLD),
]))
story.append(skt_table)
story.append(Spacer(1, 10))
# ═══ 6 PILLARS ═══
story.append(banner(Paragraph("✨ Garbha Samskara ke 6 Mukhya Stambh", SECTION_HEAD), DARK_SAFFRON, 7, 7))
story.append(Spacer(1, 6))
pillars = [
["🧘 Mansik Shakti", "Meditation, sakaratmak vichar, tanav mukti"],
["🎵 Sangeet & Mantra", "Vedic Mantras, Classical Music, Shishu se Samvaad"],
["🥗 Sattvic Aahar", "Ayurvedic poshtik bhojan, trinasari diet plan"],
["📖 Adhyayan", "Acchi kahaniyaan, dharmagranth, preranadayak pustak"],
["🌿 Yoga & Pranayam", "Garbhini Yoga, breathing exercises"],
["🙏 Adhyatm", "Puja, Mantra, Sapta Sanskara Vidhi"],
]
pdata = []
for row in pillars:
pdata.append([
Paragraph(f"<b>{row[0]}</b>", style("ph", fontSize=10, textColor=MAROON, fontName="Helvetica-Bold", leading=13)),
Paragraph(row[1], style("pb", fontSize=10, textColor=TEXT_DARK, fontName="Helvetica", leading=13)),
])
col1 = 5.5*cm
col2 = W - 3.6*cm - col1
ptable = Table(pdata, colWidths=[col1, col2])
ptable.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), BROWN_LIGHT),
("ROWBACKGROUNDS", (0,0), (-1,-1), [BROWN_LIGHT, CREAM]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("LINEBELOW", (0,0), (-1,-2), 0.3, GOLD),
("BOX", (0,0), (-1,-1), 0.5, GOLD),
]))
story.append(ptable)
story.append(Spacer(1, 10))
# ═══ BENEFITS ═══
story.append(banner(Paragraph("💛 Garbha Samskara ke Labh (Benefits)", SECTION_HEAD), GREEN, 7, 7))
story.append(Spacer(1, 6))
maa_benefits = [
"✅ Tanav aur anxiety mein kami",
"✅ Hormonal balance bana rehta hai",
"✅ Normal delivery ki sambhavana badhti hai",
"✅ Aahar aur neend behtar hoti hai",
"✅ Garbhavastha ka anubhav sukhmay banta hai",
]
shishu_benefits = [
"✅ Brain Development behtar hota hai",
"✅ Bacha shant, swasth aur buddhiman hota hai",
"✅ Janam ke baad sakaratmak sanskar hote hain",
"✅ Emotional Intelligence aur Creativity badhti hai",
"✅ Maa aur shishu ka gehri atmic bandhan banta hai",
]
maa_header = Paragraph("<b>🤰 Maa ke liye</b>", style("bh1", fontSize=11, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=15))
shishu_header = Paragraph("<b>👶 Shishu ke liye</b>", style("bh2", fontSize=11, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=15))
col_w2 = (W - 3.6*cm) / 2
# Header row
hrow = Table([[maa_header, shishu_header]], colWidths=[col_w2, col_w2])
hrow.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), SAFFRON),
("BACKGROUND", (1,0), (1,-1), GREEN),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
story.append(hrow)
# Benefit rows
for m, s in zip(maa_benefits, shishu_benefits):
brow = Table([
[Paragraph(m, BULLET), Paragraph(s, BULLET)]
], colWidths=[col_w2, col_w2])
brow.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), colors.HexColor("#FFF3E5")),
("BACKGROUND", (1,0), (1,-1), LIGHT_GREEN),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("LINEBELOW", (0,0), (-1,-1), 0.3, GOLD),
]))
story.append(brow)
story.append(Spacer(1, 10))
# ═══ SESSIONS OFFERED ═══
story.append(banner(Paragraph("📿 Hamare Sessions Mein Kya Milega?", SECTION_HEAD), DARK_SAFFRON, 7, 7))
story.append(Spacer(1, 6))
sessions = [
("🌸 Garbha Samskara Classes", "Online / Offline — Guided prenatal program"),
("🧘 Meditation & Pranayam", "Garbhini ke liye vishesh guided sessions"),
("🎵 Vedic Mantra Therapy", "Music therapy aur Vedic mantras"),
("🥗 Ayurvedic Diet Plan", "Month-wise nutrition guidance"),
("📖 Shishu Samvaad", "Shishu se baat karne ki vidhi"),
("🌿 Yoga Sessions", "Safe & easy pregnancy yoga"),
("📿 Sapta Sanskara Vidhi", "Paramparik sanskara margadarshan"),
]
sdata = [[Paragraph(f"<b>{s[0]}</b>", style("sh", fontSize=10, textColor=SAFFRON, fontName="Helvetica-Bold", leading=13)),
Paragraph(s[1], style("sb", fontSize=10, textColor=TEXT_DARK, fontName="Helvetica", leading=13))] for s in sessions]
col_s1, col_s2 = 6*cm, W - 3.6*cm - 6*cm
stable = Table(sdata, colWidths=[col_s1, col_s2])
stable.setStyle(TableStyle([
("ROWBACKGROUNDS", (0,0), (-1,-1), [CREAM, BROWN_LIGHT]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("LINEBELOW", (0,0), (-1,-2), 0.3, GOLD),
("BOX", (0,0), (-1,-1), 0.5, GOLD),
]))
story.append(stable)
story.append(Spacer(1, 10))
# ═══ FOR WHOM ═══
story.append(banner(Paragraph("🌺 Kisake Liye Hai Yeh Program?", SECTION_HEAD), GREEN, 7, 7))
story.append(Spacer(1, 6))
audiences = [
"👶 Jo maataein <b>garbhadharana ki yojana</b> bana rahi hain",
"🤰 Jo maataein <b>pehli ya doosari timahi</b> mein hain",
"👨👩👧 <b>Parivaar</b> jo bachche ko sarvashreshtha shuruaat dena chahta hai",
"💑 <b>Couples</b> jo Conscious Parenting sikhna chahte hain",
]
for a in audiences:
story.append(Paragraph(a, BULLET))
story.append(Spacer(1, 10))
# ═══ QUOTE ═══
quote_table = Table([[Paragraph(
'"Ek susanskrit maa — ek sanskarvaan raashtra ki neenv hai."',
QUOTE)]], colWidths=[W - 3.6*cm])
quote_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LIGHT_GOLD),
("TOPPADDING", (0,0), (-1,-1), 12),
("BOTTOMPADDING", (0,0), (-1,-1), 12),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
("BOX", (0,0), (-1,-1), 1, GOLD),
]))
story.append(quote_table)
story.append(Spacer(1, 10))
# ═══ CONTACT / FOOTER ═══
story.append(banner(Paragraph("📩 Hamse Judiye — Abhi Enroll Karein!", SECTION_HEAD), SAFFRON, 7, 7))
story.append(Spacer(1, 6))
contact_data = [
[Paragraph("📱 Instagram", style("cl", fontSize=10, textColor=MAROON, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=14)),
Paragraph("📞 WhatsApp", style("cl2", fontSize=10, textColor=MAROON, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=14)),
Paragraph("🌐 Website", style("cl3", fontSize=10, textColor=MAROON, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=14))],
[Paragraph("@YourHandle", CONTACT),
Paragraph("+91 XXXXX XXXXX", CONTACT),
Paragraph("www.yourwebsite.com", CONTACT)],
]
col_c = (W - 3.6*cm) / 3
ctable = Table(contact_data, colWidths=[col_c, col_c, col_c])
ctable.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_GOLD),
("BACKGROUND", (0,1), (-1,1), CREAM),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("LINEBEFORE", (1,0), (1,-1), 0.5, GOLD),
("LINEBEFORE", (2,0), (2,-1), 0.5, GOLD),
("BOX", (0,0), (-1,-1), 0.5, GOLD),
]))
story.append(ctable)
story.append(Spacer(1, 8))
story.append(Paragraph(
"🌿 Garbha Samskara | Ancient Wisdom • Modern Wellness 🌿",
style("ft", fontSize=9, textColor=TEXT_MID, alignment=TA_CENTER, fontName="Helvetica-Oblique", leading=13)))
# ═══ BUILD ═══
doc.build(story)
print(f"PDF created: {OUTPUT}")
python3 /home/daytona/workspace/garbha-samskara/create_poster.py
GarbhaSamskara Poster
PDF Document · PDF
| Section | Details |
|---|---|
| 🌸 Header Banner | Sanskrit title, tagline - saffron background |
| 🌿 Garbha Samskara Kya Hai | Definition + Sanskrit word breakdown |
| ✨ 6 Mukhya Stambh | Mansik, Sangeet, Aahar, Adhyayan, Yoga, Adhyatm |
| 💛 Benefits Table | Maa ke liye + Shishu ke liye - side by side |
| 📿 Sessions Offered | 7 program details |
| 🌺 Audience | Kisake liye suitable hai |
| 💬 Inspirational Quote | Gold bordered quote box |
| 📩 Contact Footer | Instagram, WhatsApp, Website placeholders |
Create an Instagram post carousel version of this content
python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab ok')" && py…
~/garbha-samskara/create_carousel.py
from PIL import Image, ImageDraw, ImageFont
import os, textwrap, math
OUT_DIR = "/home/daytona/workspace/garbha-samskara/carousel"
os.makedirs(OUT_DIR, exist_ok=True)
SIZE = (1080, 1080)
W, H = SIZE
# ── Colour palette ──────────────────────────────────────────────
SAFFRON = (232, 121, 44)
DARK_SAFFRON = (176, 76, 10)
DEEP_SAFFRON = (140, 50, 5)
CREAM = (255, 248, 238)
GOLD = (212, 160, 23)
LIGHT_GOLD = (255, 240, 192)
GREEN = ( 74, 124, 89)
DARK_GREEN = ( 45, 90, 60)
LIGHT_GREEN = (232, 245, 238)
MAROON = (123, 26, 26)
BROWN_LIGHT = (251, 240, 224)
TEXT_DARK = ( 43, 26, 10)
TEXT_MID = ( 90, 58, 26)
WHITE = (255, 255, 255)
IVORY = (255, 253, 245)
# ── Font helpers ────────────────────────────────────────────────
def load_font(size, bold=False):
candidates_bold = ["/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
"/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf",
"/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"]
candidates_normal = ["/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
"/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf",
"/usr/share/fonts/truetype/freefont/FreeSans.ttf"]
pool = candidates_bold if bold else candidates_normal
for p in pool:
if os.path.exists(p):
return ImageFont.truetype(p, size)
return ImageFont.load_default()
# ── Drawing utilities ────────────────────────────────────────────
def draw_rounded_rect(draw, xy, radius, fill, outline=None, outline_width=2):
x0, y0, x1, y1 = xy
draw.rounded_rectangle([x0, y0, x1, y1], radius=radius, fill=fill,
outline=outline, width=outline_width)
def draw_text_centered(draw, text, y, font, color, max_width=None, img_w=W):
if max_width:
# wrap
lines = []
words = text.split()
line = ""
for w in words:
test = (line + " " + w).strip()
bbox = draw.textbbox((0, 0), test, font=font)
if bbox[2] <= max_width:
line = test
else:
if line:
lines.append(line)
line = w
if line:
lines.append(line)
for l in lines:
bbox = draw.textbbox((0, 0), l, font=font)
tw = bbox[2] - bbox[0]
draw.text(((img_w - tw) / 2, y), l, font=font, fill=color)
y += bbox[3] - bbox[1] + 6
return y
else:
bbox = draw.textbbox((0, 0), text, font=font)
tw = bbox[2] - bbox[0]
draw.text(((img_w - tw) / 2, y), text, font=font, fill=color)
return y + (bbox[3] - bbox[1])
def text_height(draw, text, font):
bbox = draw.textbbox((0, 0), text, font=font)
return bbox[3] - bbox[1]
def wrap_lines(draw, text, font, max_width):
words = text.split()
lines, line = [], ""
for w in words:
test = (line + " " + w).strip()
bbox = draw.textbbox((0, 0), test, font=font)
if bbox[2] <= max_width:
line = test
else:
if line: lines.append(line)
line = w
if line: lines.append(line)
return lines
def draw_wrapped_text(draw, text, x, y, font, color, max_width, line_gap=8):
lines = wrap_lines(draw, text, font, max_width)
for l in lines:
draw.text((x, y), l, font=font, fill=color)
bh = draw.textbbox((0,0), l, font=font)
y += bh[3] - bh[1] + line_gap
return y
def ornament_line(draw, y, color=GOLD, margin=80, thickness=2):
draw.line([(margin, y), (W - margin, y)], fill=color, width=thickness)
def dot_row(draw, y, color=GOLD, n=7):
spacing = 22
start = W // 2 - (n - 1) * spacing // 2
for i in range(n):
x = start + i * spacing
draw.ellipse([(x-4, y-4), (x+4, y+4)], fill=color)
def gradient_background(img, top_color, bottom_color):
"""Vertical gradient fill."""
draw = ImageDraw.Draw(img)
for y in range(H):
t = y / H
r = int(top_color[0] + (bottom_color[0] - top_color[0]) * t)
g = int(top_color[1] + (bottom_color[1] - top_color[1]) * t)
b = int(top_color[2] + (bottom_color[2] - top_color[2]) * t)
draw.line([(0, y), (W, y)], fill=(r, g, b))
def add_slide_number(draw, n, total=8):
font = load_font(22, bold=False)
txt = f"{n} / {total}"
bbox = draw.textbbox((0,0), txt, font=font)
tw = bbox[2] - bbox[0]
draw.text((W - tw - 36, H - 48), txt, font=font, fill=(*GOLD, 180))
def corner_ornaments(draw, color=GOLD, size=30, margin=22):
lw = 3
m = margin
# top-left
draw.line([(m, m), (m+size, m)], fill=color, width=lw)
draw.line([(m, m), (m, m+size)], fill=color, width=lw)
# top-right
draw.line([(W-m, m), (W-m-size, m)], fill=color, width=lw)
draw.line([(W-m, m), (W-m, m+size)], fill=color, width=lw)
# bottom-left
draw.line([(m, H-m), (m+size, H-m)], fill=color, width=lw)
draw.line([(m, H-m), (m, H-m-size)], fill=color, width=lw)
# bottom-right
draw.line([(W-m, H-m), (W-m-size, H-m)], fill=color, width=lw)
draw.line([(W-m, H-m), (W-m, H-m-size)], fill=color, width=lw)
# ════════════════════════════════════════════════════════════════
# SLIDE 1 — Cover / Title
# ════════════════════════════════════════════════════════════════
def slide_01():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 245, 225), (240, 200, 150))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=SAFFRON, size=50)
# top decorative band
draw.rectangle([(0, 0), (W, 14)], fill=SAFFRON)
draw.rectangle([(0, 14), (W, 20)], fill=GOLD)
# large emoji / icon area
f_em = load_font(110, bold=False)
emoji = "🌸"
try:
draw.text((W//2 - 65, 90), emoji, font=f_em, fill=SAFFRON)
except:
draw.ellipse([(W//2-60, 90), (W//2+60, 210)], fill=SAFFRON)
y = 240
# Sanskrit / Hindi title
f_title = load_font(76, bold=True)
draw_text_centered(draw, "Garbha", y, f_title, MAROON)
y += 90
draw_text_centered(draw, "Samskara", y, f_title, DARK_SAFFRON)
y += 96
ornament_line(draw, y, GOLD, margin=160)
y += 18
dot_row(draw, y, GOLD)
y += 28
f_sub = load_font(34, bold=False)
draw_text_centered(draw, "Shishu ke Jeevan ki", y, f_sub, TEXT_MID, max_width=780)
y += 44
draw_text_centered(draw, "Shubh Shuruaat", y, f_sub, TEXT_MID, max_width=780)
y += 58
f_tag = load_font(26, bold=False)
draw_text_centered(draw, "Ancient Indian Prenatal Wisdom", y, f_tag, GREEN)
y += 36
draw_text_centered(draw, "Womb to Wisdom", y, f_tag, GREEN)
# bottom band
draw.rectangle([(0, H-60), (W, H)], fill=SAFFRON)
f_foot = load_font(24, bold=True)
draw_text_centered(draw, "Swipe to know more >>>", H-42, f_foot, WHITE)
draw.rectangle([(0, H-66), (W, H-62)], fill=GOLD)
add_slide_number(draw, 1)
img.save(f"{OUT_DIR}/slide_01_cover.jpg", quality=95)
print("Slide 1 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 2 — What is Garbha Samskara
# ════════════════════════════════════════════════════════════════
def slide_02():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 252, 240), (245, 235, 210))
draw = ImageDraw.Draw(img)
corner_ornaments(draw)
# header bar
draw_rounded_rect(draw, (40, 40, W-40, 150), 18, SAFFRON)
f_h = load_font(42, bold=True)
draw_text_centered(draw, "Garbha Samskara Kya Hai?", 72, f_h, WHITE)
y = 180
f_body = load_font(29, bold=False)
f_bold = load_font(29, bold=True)
# definition box
draw_rounded_rect(draw, (60, y, W-60, y+200), 14, BROWN_LIGHT, outline=GOLD, outline_width=2)
draw_wrapped_text(draw,
"Garbha Samskara Bharat ki prachin aur vaigyanik prenatal dekhbhal paddhati hai. "
"Maa ke vichar, bhavnaein, aahar aur jeevanshaili — shishu ke mastishk, "
"vyaktitva aur swasthya ko gehrai se prabhavit karti hain.",
90, y + 22, f_body, TEXT_DARK, max_width=900, line_gap=10)
y += 220
# two word boxes
box_w = 430
# GARBHA box
draw_rounded_rect(draw, (60, y, 60+box_w, y+145), 14, (255,240,210), outline=SAFFRON, outline_width=3)
f_big = load_font(46, bold=True)
draw.text((60 + box_w//2 - 80, y+14), "GARBHA", font=f_big, fill=DARK_SAFFRON)
f_sm = load_font(26, bold=False)
draw_wrapped_text(draw, "Maa ka Garbh (Womb)", 90, y+78, f_sm, TEXT_MID, max_width=box_w-40)
draw_wrapped_text(draw, "The sacred womb", 90, y+110, f_sm, TEXT_MID, max_width=box_w-40)
# SANSKARA box
sx = W - 60 - box_w
draw_rounded_rect(draw, (sx, y, sx+box_w, y+145), 14, LIGHT_GREEN, outline=GREEN, outline_width=3)
draw.text((sx + box_w//2 - 110, y+14), "SANSKARA", font=f_big, fill=DARK_GREEN)
draw_wrapped_text(draw, "Sakaratmak Samskar", sx+20, y+78, f_sm, TEXT_MID, max_width=box_w-40)
draw_wrapped_text(draw, "Positive Impressions", sx+20, y+110, f_sm, TEXT_MID, max_width=box_w-40)
y += 165
ornament_line(draw, y+10, GOLD)
y += 30
f_q = load_font(27, bold=False)
italic_text = '"Garbha Samskara is a mental & emotional diet'
italic_text2 = 'of pregnant mothers during pregnancy."'
draw_text_centered(draw, italic_text, y+10, f_q, MAROON, max_width=900)
draw_text_centered(draw, italic_text2, y+50, f_q, MAROON, max_width=900)
# bottom
draw.rectangle([(0, H-60), (W, H)], fill=GREEN)
f_foot = load_font(22, bold=True)
draw_text_centered(draw, "Ancient Wisdom | Ayurveda | Vedic Science", H-40, f_foot, WHITE)
add_slide_number(draw, 2)
img.save(f"{OUT_DIR}/slide_02_what.jpg", quality=95)
print("Slide 2 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 3 — 6 Pillars
# ════════════════════════════════════════════════════════════════
def slide_03():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 248, 235), (240, 220, 185))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=GREEN)
draw_rounded_rect(draw, (40, 40, W-40, 148), 18, DARK_SAFFRON)
f_h = load_font(40, bold=True)
draw_text_centered(draw, "6 Mukhya Stambh", 65, f_h, WHITE)
f_sh = load_font(26, bold=False)
draw_text_centered(draw, "Six Pillars of Garbha Samskara", 112, f_sh, LIGHT_GOLD)
pillars = [
("🧘", "Mansik Shakti", "Meditation & Positive Vichar"),
("🎵", "Sangeet Therapy", "Vedic Mantras & Music"),
("🥗", "Sattvic Aahar", "Ayurvedic Nutrition"),
("📖", "Adhyayan", "Inspiring Books & Stories"),
("🌿", "Yoga & Pranayam", "Safe Pregnancy Exercises"),
("🙏", "Adhyatm", "Puja, Mantra & Samskara"),
]
col_w = (W - 120) // 3
row_h = 240
y_start = 170
colors_bg = [(255, 240, 215), LIGHT_GREEN, (255, 240, 215),
LIGHT_GREEN, (255, 240, 215), LIGHT_GREEN]
colors_accent = [SAFFRON, GREEN, SAFFRON, GREEN, SAFFRON, GREEN]
for i, (em, title, desc) in enumerate(pillars):
col = i % 3
row = i // 3
x0 = 60 + col * (col_w + 10)
y0 = y_start + row * (row_h + 12)
x1, y1 = x0 + col_w, y0 + row_h
draw_rounded_rect(draw, (x0, y0, x1, y1), 16,
colors_bg[i], outline=colors_accent[i], outline_width=2)
# accent top stripe
draw_rounded_rect(draw, (x0, y0, x1, y0+6), 0, colors_accent[i])
# emoji
f_em = load_font(52, bold=False)
em_bx = draw.textbbox((0,0), em, font=f_em)
ex = x0 + (col_w - (em_bx[2]-em_bx[0])) // 2
try:
draw.text((ex, y0+18), em, font=f_em, fill=colors_accent[i])
except:
draw.ellipse([(x0+col_w//2-20, y0+18), (x0+col_w//2+20, y0+58)], fill=colors_accent[i])
# title
f_t = load_font(27, bold=True)
draw_text_centered(draw, title, y0+82, f_t, TEXT_DARK, max_width=col_w-16, img_w=x0+col_w//2 + 200)
# center properly
tb = draw.textbbox((0,0), title, font=f_t)
tw = tb[2]-tb[0]
draw.text((x0 + (col_w-tw)//2, y0+82), title, font=f_t, fill=TEXT_DARK)
# desc
f_d = load_font(22, bold=False)
lines = wrap_lines(draw, desc, f_d, col_w - 20)
dy = y0 + 120
for l in lines:
lb = draw.textbbox((0,0), l, font=f_d)
lw = lb[2]-lb[0]
draw.text((x0 + (col_w-lw)//2, dy), l, font=f_d, fill=TEXT_MID)
dy += lb[3]-lb[1]+5
draw.rectangle([(0, H-60), (W, H)], fill=DARK_SAFFRON)
f_foot = load_font(22, bold=True)
draw_text_centered(draw, "Garbha Samskara — Holistic Prenatal Care", H-40, f_foot, WHITE)
add_slide_number(draw, 3)
img.save(f"{OUT_DIR}/slide_03_pillars.jpg", quality=95)
print("Slide 3 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 4 — Benefits for Maa
# ════════════════════════════════════════════════════════════════
def slide_04():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 248, 235), (255, 225, 185))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=SAFFRON)
draw_rounded_rect(draw, (40, 40, W-40, 148), 18, SAFFRON)
f_h = load_font(40, bold=True)
draw_text_centered(draw, "Maa ke liye Labh", 62, f_h, WHITE)
f_sh = load_font(27, bold=False)
draw_text_centered(draw, "Benefits for the Mother", 112, f_sh, LIGHT_GOLD)
benefits = [
("Tanav & Anxiety mein Kami", "Meditation aur pranayam se man shant rehta hai"),
("Hormonal Balance", "Ayurvedic aahar aur yoga se hormones balanced rehte hain"),
("Normal Delivery ki Sambhavana", "Regular garbha samskara practice se body tayaar hoti hai"),
("Behtar Neend aur Aahar", "Sattvic lifestyle se neend aur bhookh sudharti hai"),
("Sukhmay Garbhavastha", "Positive vichar se poora anubhav anandmay banta hai"),
]
y = 170
for i, (title, desc) in enumerate(benefits):
bg = (255, 245, 225) if i % 2 == 0 else BROWN_LIGHT
draw_rounded_rect(draw, (60, y, W-60, y+142), 14, bg, outline=SAFFRON, outline_width=2)
# number circle
draw.ellipse([(72, y+20), (122, y+70)], fill=SAFFRON)
f_num = load_font(30, bold=True)
nb = draw.textbbox((0,0), str(i+1), font=f_num)
nw, nh = nb[2]-nb[0], nb[3]-nb[1]
draw.text((97-nw//2, y+20+(50-nh)//2), str(i+1), font=f_num, fill=WHITE)
# check mark
draw.text((72, y+80), "✅", font=load_font(30), fill=GREEN)
# title + desc
f_t = load_font(30, bold=True)
draw.text((140, y+18), title, font=f_t, fill=MAROON)
f_d = load_font(25, bold=False)
draw_wrapped_text(draw, desc, 140, y+62, f_d, TEXT_MID, max_width=W-220, line_gap=6)
y += 152
draw.rectangle([(0, H-60), (W, H)], fill=SAFFRON)
f_foot = load_font(22, bold=True)
draw_text_centered(draw, "Swipe next for Shishu ke Labh >>>", H-40, f_foot, WHITE)
add_slide_number(draw, 4)
img.save(f"{OUT_DIR}/slide_04_maa_benefits.jpg", quality=95)
print("Slide 4 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 5 — Benefits for Shishu
# ════════════════════════════════════════════════════════════════
def slide_05():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (240, 255, 248), (210, 240, 225))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=GREEN)
draw_rounded_rect(draw, (40, 40, W-40, 148), 18, GREEN)
f_h = load_font(40, bold=True)
draw_text_centered(draw, "Shishu ke liye Labh", 62, f_h, WHITE)
f_sh = load_font(27, bold=False)
draw_text_centered(draw, "Benefits for the Baby", 112, f_sh, LIGHT_GOLD)
benefits = [
("Brain Development", "Vedic music aur mantras se shishu ka mastishk vikasit hota hai"),
("Shant aur Swasth Shishu", "Positive vichar aur calm environment se bacha khush rehta hai"),
("Sakaratmak Sanskar", "Janm ke baad bhi bacha acche samskaaron ke saath bada hota hai"),
("Emotional Intelligence", "Maa ki bhavnaein shishu ki samvedansheelta badhati hain"),
("Gehra Maa-Shishu Bandhan", "Garbha samvaad se atmic rishta pahle hi ban jata hai"),
]
y = 170
for i, (title, desc) in enumerate(benefits):
bg = LIGHT_GREEN if i % 2 == 0 else (245, 255, 250)
draw_rounded_rect(draw, (60, y, W-60, y+142), 14, bg, outline=GREEN, outline_width=2)
draw.ellipse([(72, y+20), (122, y+70)], fill=GREEN)
f_num = load_font(30, bold=True)
nb = draw.textbbox((0,0), str(i+1), font=f_num)
nw, nh = nb[2]-nb[0], nb[3]-nb[1]
draw.text((97-nw//2, y+20+(50-nh)//2), str(i+1), font=f_num, fill=WHITE)
draw.text((72, y+80), "✅", font=load_font(30), fill=SAFFRON)
f_t = load_font(30, bold=True)
draw.text((140, y+18), title, font=f_t, fill=DARK_GREEN)
f_d = load_font(25, bold=False)
draw_wrapped_text(draw, desc, 140, y+62, f_d, TEXT_MID, max_width=W-220, line_gap=6)
y += 152
draw.rectangle([(0, H-60), (W, H)], fill=GREEN)
f_foot = load_font(22, bold=True)
draw_text_centered(draw, "Garbha Samskara — Baby's First School", H-40, f_foot, WHITE)
add_slide_number(draw, 5)
img.save(f"{OUT_DIR}/slide_05_shishu_benefits.jpg", quality=95)
print("Slide 5 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 6 — Sessions / Program
# ════════════════════════════════════════════════════════════════
def slide_06():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 248, 230), (245, 230, 200))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=DARK_SAFFRON)
draw_rounded_rect(draw, (40, 40, W-40, 148), 18, DARK_SAFFRON)
f_h = load_font(38, bold=True)
draw_text_centered(draw, "Hamare Sessions Mein", 58, f_h, WHITE)
draw_text_centered(draw, "Kya Milega?", 104, f_h, LIGHT_GOLD)
sessions = [
("🌸", "Garbha Samskara Classes", "Online / Offline — Guided prenatal program"),
("🧘", "Meditation & Pranayam", "Garbhini ke liye special guided sessions"),
("🎵", "Vedic Mantra Therapy", "Music therapy aur Vedic mantras"),
("🥗", "Ayurvedic Diet Plan", "Month-wise trimester nutrition guidance"),
("📖", "Shishu Samvaad", "Womb communication techniques"),
("🌿", "Safe Pregnancy Yoga", "Easy yoga sessions designed for mothers"),
("📿", "Sapta Sanskara Vidhi", "Traditional samskara ceremony guidance"),
]
y = 165
col_w_left = 80
for i, (em, title, desc) in enumerate(sessions):
bg = (255, 244, 222) if i % 2 == 0 else BROWN_LIGHT
draw_rounded_rect(draw, (60, y, W-60, y+100), 12, bg, outline=GOLD, outline_width=1)
f_em = load_font(36, bold=False)
try:
draw.text((76, y+18), em, font=f_em)
except:
draw.ellipse([(76, y+18), (110, y+52)], fill=SAFFRON)
f_t = load_font(28, bold=True)
draw.text((130, y+14), title, font=f_t, fill=MAROON)
f_d = load_font(23, bold=False)
draw.text((130, y+52), desc, font=f_d, fill=TEXT_MID)
y += 108
draw.rectangle([(0, H-60), (W, H)], fill=DARK_SAFFRON)
f_foot = load_font(22, bold=True)
draw_text_centered(draw, "Join our Program — Swipe for Details >>>", H-40, f_foot, WHITE)
add_slide_number(draw, 6)
img.save(f"{OUT_DIR}/slide_06_sessions.jpg", quality=95)
print("Slide 6 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 7 — For Whom + Quote
# ════════════════════════════════════════════════════════════════
def slide_07():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 250, 240), (245, 230, 205))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=GOLD)
draw_rounded_rect(draw, (40, 40, W-40, 140), 18, GREEN)
f_h = load_font(40, bold=True)
draw_text_centered(draw, "Kisake Liye Hai Yeh Program?", 75, f_h, WHITE)
f_sh = load_font(25, bold=False)
draw_text_centered(draw, "Who Should Join?", 120, f_sh, LIGHT_GOLD)
audiences = [
("👶", "Garbhadharana ki Taiyaari", "Jo maataein baby ke liye tayari kar rahi hain"),
("🤰", "Pehli / Doosari Timahi", "Jo maataein abhi pregnant hain"),
("👨\u200d👩\u200d👧", "Poora Parivaar", "Jo parivaar bachche ko best shuruaat dena chahta hai"),
("💑", "Conscious Couples", "Jo couples Conscious Parenting sikhna chahte hain"),
]
y = 160
for em, title, desc in audiences:
draw_rounded_rect(draw, (60, y, W-60, y+130), 14,
(255, 248, 230), outline=GOLD, outline_width=2)
f_em = load_font(48, bold=False)
try:
draw.text((80, y+24), em, font=f_em)
except:
draw.ellipse([(80, y+24), (128, y+72)], fill=GREEN)
f_t = load_font(30, bold=True)
draw.text((148, y+18), title, font=f_t, fill=DARK_GREEN)
f_d = load_font(25, bold=False)
draw_wrapped_text(draw, desc, 148, y+60, f_d, TEXT_MID, max_width=W-230, line_gap=6)
y += 140
# Quote
y += 10
draw_rounded_rect(draw, (60, y, W-60, y+110), 16, LIGHT_GOLD, outline=GOLD, outline_width=2)
f_q = load_font(27, bold=False)
draw_text_centered(draw, '"Ek susanskrit maa —', y+16, f_q, MAROON, max_width=880)
draw_text_centered(draw, 'ek sanskarvaan raashtra ki neenv hai."', y+52, f_q, MAROON, max_width=880)
dot_row(draw, y+92, GOLD)
draw.rectangle([(0, H-60), (W, H)], fill=GREEN)
f_foot = load_font(22, bold=True)
draw_text_centered(draw, "Swipe for Contact Details >>>", H-40, f_foot, WHITE)
add_slide_number(draw, 7)
img.save(f"{OUT_DIR}/slide_07_audience.jpg", quality=95)
print("Slide 7 done")
# ════════════════════════════════════════════════════════════════
# SLIDE 8 — Contact / CTA
# ════════════════════════════════════════════════════════════════
def slide_08():
img = Image.new("RGB", SIZE, CREAM)
gradient_background(img, (255, 248, 225), (232, 200, 140))
draw = ImageDraw.Draw(img)
corner_ornaments(draw, color=SAFFRON, size=60)
# top
draw.rectangle([(0, 0), (W, 16)], fill=SAFFRON)
draw.rectangle([(0, 16), (W, 24)], fill=GOLD)
y = 60
f_big = load_font(58, bold=True)
draw_text_centered(draw, "Hamse Judiye!", y, f_big, MAROON)
y += 72
f_sub = load_font(30, bold=False)
draw_text_centered(draw, "Abhi Enroll Karein — Seedha DM Karein", y, f_sub, DARK_SAFFRON)
y += 56
ornament_line(draw, y, GOLD)
y += 26
dot_row(draw, y, SAFFRON)
y += 36
# contact boxes
contacts = [
("📱", "Instagram", "@YourHandle", SAFFRON),
("📞", "WhatsApp", "+91 XXXXX XXXXX", GREEN),
("🌐", "Website", "www.yourwebsite.com", DARK_SAFFRON),
("📍", "Location", "Aapka Shehar, India", MAROON),
]
box_w = (W - 140) // 2
box_h = 175
for i, (em, label, val, col) in enumerate(contacts):
col_n = i % 2
row_n = i // 2
x0 = 60 + col_n * (box_w + 20)
y0 = y + row_n * (box_h + 16)
x1, y1 = x0 + box_w, y0 + box_h
draw_rounded_rect(draw, (x0, y0, x1, y1), 16, WHITE, outline=col, outline_width=3)
draw_rounded_rect(draw, (x0, y0, x1, y0+8), 0, col)
f_em = load_font(44, bold=False)
em_bx = draw.textbbox((0,0), em, font=f_em)
ew = em_bx[2]-em_bx[0]
try:
draw.text((x0 + (box_w-ew)//2, y0+20), em, font=f_em)
except:
draw.ellipse([(x0+box_w//2-20, y0+20), (x0+box_w//2+20, y0+60)], fill=col)
f_lbl = load_font(26, bold=True)
lb = draw.textbbox((0,0), label, font=f_lbl)
lw = lb[2]-lb[0]
draw.text((x0+(box_w-lw)//2, y0+74), label, font=f_lbl, fill=col)
f_val = load_font(23, bold=False)
vb = draw.textbbox((0,0), val, font=f_val)
vw = vb[2]-vb[0]
draw.text((x0+(box_w-vw)//2, y0+110), val, font=f_val, fill=TEXT_DARK)
y += 2 * box_h + 36
ornament_line(draw, y, GOLD)
y += 22
f_tag = load_font(26, bold=True)
draw_text_centered(draw, "🌿 Garbha Samskara | Ancient Wisdom • Modern Wellness 🌿", y, f_tag, TEXT_MID)
y += 40
# hashtags
f_hash = load_font(21, bold=False)
draw_text_centered(draw, "#GarbhaSamskara #AyurvedicPregnancy #VedicMotherhood", y, f_hash, GREEN)
y += 30
draw_text_centered(draw, "#ConsciousParenting #HappyPregnancy #PregnancyWellness", y, f_hash, GREEN)
draw.rectangle([(0, H-16), (W, H)], fill=SAFFRON)
draw.rectangle([(0, H-24), (W, H-16)], fill=GOLD)
add_slide_number(draw, 8)
img.save(f"{OUT_DIR}/slide_08_contact.jpg", quality=95)
print("Slide 8 done")
# ════════════════════════════════════════════════════════════════
# RUN ALL
# ════════════════════════════════════════════════════════════════
slide_01()
slide_02()
slide_03()
slide_04()
slide_05()
slide_06()
slide_07()
slide_08()
# Combine into single PDF for download
from reportlab.pdfgen import canvas as rl_canvas
from reportlab.lib.pagesizes import letter
from PIL import Image as PILImage
pdf_path = "/home/daytona/workspace/garbha-samskara/GarbhaSamskara_Carousel.pdf"
slides = sorted([f"{OUT_DIR}/{f}" for f in os.listdir(OUT_DIR) if f.endswith('.jpg')])
c = rl_canvas.Canvas(pdf_path, pagesize=(1080, 1080))
for slide_path in slides:
c.drawImage(slide_path, 0, 0, width=1080, height=1080)
c.showPage()
c.save()
print(f"\nAll slides done! PDF: {pdf_path}")
print(f"Individual JPGs: {OUT_DIR}/")
python3 /home/daytona/workspace/garbha-samskara/create_carousel.py
GarbhaSamskara Carousel
PDF Document · PDF
| Slide | Topic | Download |
|---|---|---|
| 1 | Cover / Title | slide 01 cover Image · JPG |
| 2 | Garbha Samskara Kya Hai | slide 02 what Image · JPG |
| 3 | 6 Mukhya Stambh (Pillars) | slide 03 pillars Image · JPG |
| 4 | Maa ke Labh (Benefits) | slide 04 maa benefits Image · JPG |
| 5 | Shishu ke Labh (Benefits) | slide 05 shishu benefits Image · JPG |
| 6 | Sessions & Program | slide 06 sessions Image · JPG |
| 7 | Audience + Quote | slide 07 audience Image · JPG |
| 8 | Contact / CTA | slide 08 contact Image · JPG |
Make a comparison poster: Garbha Samskara vs Modern Prenatal Care
~/garbha-samskara/create_comparison.py
from PIL import Image, ImageDraw, ImageFont
import os
OUT = "/home/daytona/workspace/garbha-samskara/GarbhaSamskara_vs_ModernCare.jpg"
W, H = 1080, 1440 # portrait — ideal for Instagram & print
# ── Palette ──────────────────────────────────────────────────────
SAFFRON = (220, 100, 20)
DEEP_SAFFRON = (170, 60, 5)
LIGHT_SAFFRON= (255, 235, 200)
GOLD = (200, 155, 15)
LIGHT_GOLD = (255, 242, 185)
TEAL = ( 30, 115, 120)
DEEP_TEAL = ( 15, 80, 88)
LIGHT_TEAL = (220, 245, 248)
CREAM = (255, 252, 243)
OFF_WHITE = (248, 245, 238)
TEXT_DARK = ( 30, 18, 6)
TEXT_MID = ( 80, 55, 25)
TEAL_TEXT = ( 15, 70, 80)
WHITE = (255, 255, 255)
DIVIDER = (200, 180, 140)
BOTH_BG = (240, 252, 245)
BOTH_ACCENT = ( 60, 160, 80)
# ── Font loader ──────────────────────────────────────────────────
def font(size, bold=False):
paths_b = ["/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
"/usr/share/fonts/truetype/liberation/LiberationSans-Bold.ttf"]
paths_n = ["/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
"/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf"]
for p in (paths_b if bold else paths_n):
if os.path.exists(p):
return ImageFont.truetype(p, size)
return ImageFont.load_default()
# ── Helpers ──────────────────────────────────────────────────────
def rr(draw, xy, r, fill, outline=None, ow=2):
draw.rounded_rectangle(xy, radius=r, fill=fill,
outline=outline, width=ow)
def cx(draw, text, y, fnt, color, x0=0, x1=W):
bb = draw.textbbox((0,0), text, font=fnt)
tw = bb[2]-bb[0]
draw.text((x0 + (x1-x0-tw)//2, y), text, font=fnt, fill=color)
def wrap(draw, text, fnt, max_w):
words, lines, line = text.split(), [], ""
for w in words:
test = (line+" "+w).strip()
if draw.textbbox((0,0), test, font=fnt)[2] <= max_w:
line = test
else:
if line: lines.append(line)
line = w
if line: lines.append(line)
return lines
def draw_wrap(draw, text, x, y, fnt, color, max_w, gap=7):
for l in wrap(draw, text, fnt, max_w):
draw.text((x, y), l, font=fnt, fill=color)
y += draw.textbbox((0,0), l, font=fnt)[3] + gap
return y
def gradient(img, top, bot, x0=0, x1=None):
draw = ImageDraw.Draw(img)
if x1 is None: x1 = W
for y in range(H):
t = y/H
r = int(top[0]+(bot[0]-top[0])*t)
g = int(top[1]+(bot[1]-top[1])*t)
b = int(top[2]+(bot[2]-top[2])*t)
draw.line([(x0,y),(x1,y)], fill=(r,g,b))
def vgradient_col(img, top, bot, x0, x1, y0, y1):
"""Vertical gradient for a column region."""
draw = ImageDraw.Draw(img)
for y in range(y0, y1):
t = (y-y0)/(y1-y0)
r = int(top[0]+(bot[0]-top[0])*t)
g = int(top[1]+(bot[1]-top[1])*t)
b = int(top[2]+(bot[2]-top[2])*t)
draw.line([(x0,y),(x1,y)], fill=(r,g,b))
def ornament_h(draw, y, margin=60, color=GOLD, w=2):
draw.line([(margin,y),(W-margin,y)], fill=color, width=w)
def diamonds(draw, y, color=GOLD, n=9):
sp = 26; sx = W//2 - (n-1)*sp//2
for i in range(n):
x = sx + i*sp
pts = [(x, y-6),(x+6,y),(x,y+6),(x-6,y)]
draw.polygon(pts, fill=color)
# ════════════════════════════════════════════════════════════════
img = Image.new("RGB", (W,H), CREAM)
draw = ImageDraw.Draw(img)
# ── BACKGROUND subtle texture ────────────────────────────────────
gradient(img, (255,252,243), (245,235,215))
# ════════════════════════════════════════════════════════════════
# HEADER
# ════════════════════════════════════════════════════════════════
# Full-width header band with split colour
vgradient_col(img, DEEP_SAFFRON, SAFFRON, 0, W, 0, 140)
draw = ImageDraw.Draw(img)
# Gold rule
draw.rectangle([(0,140),(W,148)], fill=GOLD)
f_htitle = font(44, bold=True)
f_hsub = font(24, bold=False)
cx(draw, "Garbha Samskara vs Modern Prenatal Care", 22, f_htitle, WHITE)
cx(draw, "A Holistic Comparison — Ancient Wisdom Meets Modern Science", 82, f_hsub, LIGHT_GOLD)
# ════════════════════════════════════════════════════════════════
# COLUMN HEADERS
# ════════════════════════════════════════════════════════════════
PAD = 28 # outer margin
MID = W//2 # 540
GAP = 14 # gap around centre divider
CW = MID - PAD - GAP//2 # column width ≈ 485
y = 160
# Left col header — Garbha Samskara
rr(draw, (PAD, y, MID-GAP//2, y+88), 14, SAFFRON)
f_col = font(30, bold=True)
f_col2= font(20, bold=False)
cx(draw, "🌿 Garbha Samskara", y+14, f_col, WHITE, PAD, MID-GAP//2)
cx(draw, "Ancient Indian Prenatal Wisdom", y+52, f_col2, LIGHT_GOLD, PAD, MID-GAP//2)
# Right col header — Modern Prenatal
rr(draw, (MID+GAP//2, y, W-PAD, y+88), 14, TEAL)
cx(draw, "🏥 Modern Prenatal Care", y+14, f_col, WHITE, MID+GAP//2, W-PAD)
cx(draw, "Contemporary Medical Approach", y+52, f_col2, (190,240,245), MID+GAP//2, W-PAD)
y += 102
# ════════════════════════════════════════════════════════════════
# COMPARISON ROWS
# ════════════════════════════════════════════════════════════════
rows = [
{
"category": "📌 Foundation",
"gs": "Rooted in Ayurveda, Vedas & 5000+ year-old Indian tradition",
"mod": "Based on evidence-based medicine, clinical research & obstetrics",
},
{
"category": "🎯 Goal",
"gs": "Holistic well-being of maa & shishu — body, mind, soul & spirit",
"mod": "Medical safety, complication prevention & healthy birth outcomes",
},
{
"category": "🧠 Approach",
"gs": "Mind-body-soul integration; maa's emotions shape the baby's mind",
"mod": "Physical monitoring: scans, blood tests, medications, supplements",
},
{
"category": "🥗 Nutrition",
"gs": "Sattvic, seasonal Ayurvedic diet with herbs like Shatavari & Ashwagandha",
"mod": "Folic acid, iron, calcium, prenatal vitamins & balanced macros",
},
{
"category": "🎵 Baby Connection",
"gs": "Vedic mantras, classical music, stories & direct womb communication",
"mod": "Ultrasound bonding, heartbeat monitoring & prenatal education classes",
},
{
"category": "🧘 Wellness Practices",
"gs": "Yoga, pranayama, meditation, pooja & positive affirmations daily",
"mod": "Prenatal exercise, physiotherapy, counselling & breathing techniques",
},
{
"category": "👶 Baby Development",
"gs": "Focuses on sanskar, intelligence, emotional & spiritual development",
"mod": "Focuses on physical growth, organ formation, genetic screening",
},
{
"category": "🌙 Mental Health",
"gs": "Inner peace through spirituality; no separation of mind & body",
"mod": "Screening for depression/anxiety; therapy & medication if needed",
},
{
"category": "👨👩👧 Family Role",
"gs": "Entire family participates — partner, parents, grandparents involved",
"mod": "Primarily mother & doctor; partner included in birthing classes",
},
{
"category": "💰 Accessibility",
"gs": "Low cost; home-based practices; no equipment needed",
"mod": "Requires hospitals, labs, equipment; can be expensive",
},
]
f_cat = font(21, bold=True)
f_cell = font(20, bold=False)
ROW_H = 98
INNER = 10 # inner padding
for i, row in enumerate(rows):
# category stripe across full width
bg_cat = LIGHT_GOLD if i%2==0 else (255, 250, 230)
rr(draw, (PAD, y, W-PAD, y+28), 0, GOLD)
cx(draw, row["category"], y+4, f_cat, WHITE)
y_row = y + 30
# left cell
bg_l = LIGHT_SAFFRON if i%2==0 else (255, 245, 225)
rr(draw, (PAD, y_row, MID-GAP//2, y_row+ROW_H), 0, bg_l)
draw_wrap(draw, row["gs"], PAD+INNER, y_row+8, f_cell, TEXT_DARK,
CW - INNER*2, gap=7)
# right cell
bg_r = LIGHT_TEAL if i%2==0 else (215, 242, 246)
rr(draw, (MID+GAP//2, y_row, W-PAD, y_row+ROW_H), 0, bg_r)
draw_wrap(draw, row["mod"], MID+GAP//2+INNER, y_row+8, f_cell, TEAL_TEXT,
CW - INNER*2, gap=7)
# centre divider
draw.rectangle([(MID-GAP//2, y), (MID+GAP//2, y_row+ROW_H)], fill=CREAM)
# vertical gold line
draw.line([(MID, y), (MID, y_row+ROW_H)], fill=GOLD, width=2)
y = y_row + ROW_H
# ════════════════════════════════════════════════════════════════
# "BEST OF BOTH" SECTION
# ════════════════════════════════════════════════════════════════
y += 14
ornament_h(draw, y, color=GOLD)
y += 12
diamonds(draw, y, GOLD)
y += 18
rr(draw, (PAD, y, W-PAD, y+52), 14, BOTH_ACCENT)
cx(draw, "✨ Best of Both Worlds — Why Not Combine?", y+12, font(26, bold=True), WHITE)
y += 62
both_points = [
"🌿 Use Garbha Samskara for mind, soul & emotional preparation",
"🏥 Use Modern Care for medical safety, scans & clinical monitoring",
"🧘 Combine Vedic yoga with doctor-recommended prenatal exercises",
"🥗 Blend Sattvic Ayurvedic diet with medically advised supplements",
"🎵 Play Vedic mantras & music alongside clinical prenatal education",
]
for pt in both_points:
rr(draw, (PAD, y, W-PAD, y+54), 10, BOTH_BG, outline=BOTH_ACCENT, ow=1)
draw_wrap(draw, pt, PAD+14, y+10, font(21, bold=False), TEXT_DARK,
W - PAD*2 - 28, gap=6)
y += 60
# ════════════════════════════════════════════════════════════════
# FOOTER
# ════════════════════════════════════════════════════════════════
y += 12
ornament_h(draw, y, color=GOLD)
y += 10
diamonds(draw, y, SAFFRON, n=11)
y += 16
# footer band
draw.rectangle([(0, y), (W, H)], fill=DEEP_SAFFRON)
draw.rectangle([(0, y), (W, y+4)], fill=GOLD)
f_ft1 = font(26, bold=True)
f_ft2 = font(20, bold=False)
cx(draw, "🌸 Garbha Samskara", y+14, f_ft1, WHITE)
cx(draw, "Ancient Wisdom | Ayurveda | Vedic Science | Modern Wellness", y+50, f_ft2, LIGHT_GOLD)
cx(draw, "#GarbhaSamskara #PregnancyWellness #AyurvedicPregnancy #VedicMotherhood", y+84, font(18), (255,240,190))
img.save(OUT, quality=96)
print(f"Saved: {OUT} ({W}x{H})")
python3 /home/daytona/workspace/garbha-samskara/create_comparison.py
~/garbha-samskara/create_comparison.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/garbha-samskara/create_comparison.py'
python3 /home/daytona/workspace/garbha-samskara/create_comparison.py
~/garbha-samskara/create_comparison.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/garbha-samskara/create_comparison.py'
~/garbha-samskara/create_comparison.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/garbha-samskara/create_comparison.py'
~/garbha-samskara/create_comparison.py
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/garbha-samskara/create_comparison.py'
python3 /home/daytona/workspace/garbha-samskara/create_comparison.py
GarbhaSamskara vs ModernCare
Image · JPG
| Section | Details |
|---|---|
| 🔥 Header | Saffron gradient banner — "Garbha Samskara vs Modern Prenatal Care" |
| 🌿🏥 Column Headers | Left = Garbha Samskara (saffron), Right = Modern Care (teal) |
| 📊 10 Comparison Rows | Foundation, Goal, Approach, Nutrition, Baby Connection, Wellness, Baby Development, Mental Health, Family Role, Accessibility |
| ✨ Best of Both Worlds | Green section — 5 points on combining both approaches |
| 🌸 Footer | Branding + hashtags |