i want some changes in it 1. donot mention instructions for me 2. better realistic diagrams/ Pictures 3. below in place of corporate workshop mention HOME (House of movement and excellence). 4. speaker is Dr. Manvi Dhyani 5. no need of referances . 6. single slide for each exercise with realistic image 6. add more exercise pages . 7. at last advertisement of my clinic HOME (House of movement and excellence ) Saket delhi
office ergonomics exercises neck shoulder back realistic photographs
~/
office ergonomics exercise
~/attachments/23e25bc8-d7c7-4ded-9d94-31baa2f6f465
office worker seated desk chin tuck exercise clinical photograph
office worker seated neck side stretch shoulder exercise photograph
office worker seated ergonomic shoulder blade squeeze chest opener wrist stretch exercises photograph
python - <<'PY' from pptx import Presentation p='/tmp/workspace/attachments/23e25bc8-d7c7-4ded-9d94-31baa2f6f465/Corporate_Ergonomics_Workshop.pptx' prs=Presentation(p) print('slides',len(prs.slides), 'size',prs.slide_width,prs.slide_height) for i,s in enumerate(prs.slides,1): print('\n---',i, s.slide_layout.name) for sh in s.shapes: if sh.has_text_frame and sh.text.strip(): print(repr(sh.text)) elif sh.shape_type==13: print('IMAGE',sh.left,sh.top,sh.width,sh.height) PY
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional seated upright at a clean desk doing a gentle chin tuck exercise. Clear side profile, neutral bright modern office, body and head clearly visible.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional seated in a modern office doing a gentle side neck stretch, one hand lightly supporting the head. Body clearly visible, safe technique.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional seated upright at a desk performing a shoulder blade squeeze, arms relaxed at sides, upper back posture clearly visible.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional standing beside a desk doing a chest opener stretch with hands clasped gently behind the back. Clear posture, modern office.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional seated upright at a desk doing a gentle seated thoracic rotation. Clear posture, modern office.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional standing up from an office chair, controlled sit-to-stand exercise. Full body visible, modern office.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional at a desk performing a wrist flexor and extensor stretch, hands and forearms clearly visible. Modern office.
Realistic high-quality physiotherapy photograph of a fully clothed Indian office professional standing at a desk doing calf raises. Full body visible, modern office.
mkdir -p "/tmp/workspace/home_ergonomics/src" "/tmp/workspace/home_ergonomics/assets" "/tmp/workspace/home_ergonomics/output" && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/image-gen/c428b01fe15b4c16a3ad27d6a419aabd.png" "https://cdn.orris.care/image-gen/1f76cb156cd7461ab1b3d029a0b216ce.png" "https://cdn.orris.care/image-gen/babdad988df14114bdd1df96d5994751.png" "https://cdn.orris.care/image-gen/3ed297a30ea54a28a965289c91626860.png" "https://cdn.orris.care/image-gen/9d5d1cb5091b4cb787c35e118352fca6.png" "https://cdn.orris.care/image-gen/d3351d8f50f74cda9ba38c6103e3d649.png" "https://cdn.orris.care/image-gen/fbeeb3c503ad4ba4b5dec341ab42cf90.png" "https://cdn.orris.care/image-gen/f6713bf9c15241b8874f8cf696c8d051.png" > "/tmp/workspace/home_ergonomics/assets/images.json"
~/home_ergonomics
~/home_ergonomics/src/build_home_deck.py
import os, json, base64
from io import BytesIO
from pathlib import Path
from PIL import Image
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.dml.color import RGBColor
ROOT=Path('/tmp/workspace/home_ergonomics')
ASSETS=ROOT/'assets'; OUT=ROOT/'output'/'HOME_Ergonomics_Workshop_Dr_Manvi_Dhyani.pptx'
W,H=13.333,7.5
NAVY=RGBColor(12,37,54); TEAL=RGBColor(23,126,132); MINT=RGBColor(202,235,227); CREAM=RGBColor(247,244,238); GOLD=RGBColor(233,181,76); WHITE=RGBColor(255,255,255); SLATE=RGBColor(66,83,94); PALE=RGBColor(231,240,239); RED=RGBColor(179,68,63)
# Decode generated realistic image assets returned by the image tool
records=json.loads((ASSETS/'images.json').read_text())
imgs=[]
for n,r in enumerate(records):
data=r.get('base64')
if data and ',' in data: data=data.split(',',1)[1]
p=ASSETS/f'exercise_{n+1}.png'
p.write_bytes(base64.b64decode(data))
imgs.append(p)
prs=Presentation(); prs.slide_width=Inches(W); prs.slide_height=Inches(H)
blank=prs.slide_layouts[6]
def bg(slide,color=CREAM):
fill=slide.background.fill; fill.solid(); fill.fore_color.rgb=color
def shape(slide,typ,x,y,w,h,fill,line=None,r=0):
s=slide.shapes.add_shape(typ, Inches(x), Inches(y), Inches(w), Inches(h))
s.fill.solid(); s.fill.fore_color.rgb=fill
s.line.color.rgb = line if line else fill
return s
def text(slide,txt,x,y,w,h,size=20,color=NAVY,bold=False,font='Aptos',align=None,margin=0.05):
box=slide.shapes.add_textbox(Inches(x), Inches(y), Inches(w), Inches(h))
tf=box.text_frame; tf.clear(); tf.word_wrap=True
tf.margin_left=tf.margin_right=Inches(margin); tf.margin_top=tf.margin_bottom=Inches(margin)
p=tf.paragraphs[0]; p.text=txt; p.font.name=font; p.font.size=Pt(size); p.font.bold=bold; p.font.color.rgb=color
if align: p.alignment=align
return box
def footer(slide, n, dark=False):
c=WHITE if dark else TEAL
text(slide,'HOME | House of Movement & Excellence',0.55,7.12,5.7,0.18,8,c,True)
text(slide,f'{n:02d}',12.1,7.10,0.55,0.18,8,c,True,align=PP_ALIGN.RIGHT)
def title(slide,kicker,heading,sub='',n=1):
text(slide,kicker.upper(),0.63,0.45,4.8,0.25,10,TEAL,True)
text(slide,heading,0.58,0.78,11.6,0.70,28,NAVY,True)
if sub: text(slide,sub,0.63,1.55,11.5,0.48,13,SLATE)
shape(slide,MSO_SHAPE.RECTANGLE,0.63,2.13,1.0,0.06,TEAL)
footer(slide,n)
def add_photo(slide,path,x,y,w,h):
# cover crop while preserving a professional photo crop
im=Image.open(path); iw,ih=im.size; target=w/h
if iw/ih > target:
neww=int(ih*target); left=(iw-neww)//2; im=im.crop((left,0,left+neww,ih))
else:
newh=int(iw/target); top=(ih-newh)//2; im=im.crop((0,top,iw,top+newh))
buf=BytesIO(); im.save(buf,format='PNG'); buf.seek(0)
slide.shapes.add_picture(buf,Inches(x),Inches(y),Inches(w),Inches(h))
def new():
s=prs.slides.add_slide(blank); bg(s); return s
# 1 Cover
s=new(); bg(s,NAVY)
shape(s,MSO_SHAPE.OVAL,9.4,-1.2,5.3,5.3,TEAL); shape(s,MSO_SHAPE.OVAL,10.7,4.7,2.2,2.2,GOLD)
text(s,'WORK SMARTER.\nMOVE BETTER.',0.68,1.05,8.2,1.45,35,WHITE,True)
text(s,'Ergonomics, Movement & Lifestyle',0.72,2.78,7.7,0.42,19,MINT)
text(s,'A practical session for more comfortable, sustainable workdays.',0.72,3.40,6.9,0.42,15,WHITE)
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,0.72,5.20,4.15,0.62,TEAL)
text(s,'HOME | House of Movement & Excellence',0.92,5.38,3.8,0.20,10,WHITE,True)
text(s,'Speaker: Dr. Manvi Dhyani',0.72,6.35,5.2,0.3,14,WHITE,True)
text(s,'Saket, Delhi',0.72,6.70,2.0,0.2,10,MINT)
# 2
s=new(); title(s,'Today','A better workday is designed, not endured.','Set up well. Move often. Build capacity. Recover well.',2)
items=[('01','UNDERSTAND','Why discomfort builds up'),('02','ADJUST','Make your workstation work for you'),('03','MOVE','Use short resets through the day'),('04','SUSTAIN','Build habits that support recovery')]
for i,(num,hd,tx) in enumerate(items):
x=.7+i*3.1; shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,x,2.75,2.65,2.55,WHITE)
text(s,num,x+.20,3.03,.5,.35,15,TEAL,True); text(s,hd,x+.20,3.62,2.1,.30,15,NAVY,True); text(s,tx,x+.20,4.12,2.1,.55,12,SLATE)
text(s,'Small changes repeated consistently can make the biggest difference.',.7,6.08,10,.35,17,TEAL,True)
#3 discomfort
s=new(); title(s,'The pattern','Why discomfort builds up','Usually it is a mix of exposure and recovery, rather than one "bad" posture.',3)
parts=[('STATIC LOAD','Staying in one position too long'),('AWKWARD REACH','Screen, mouse or laptop placed poorly'),('REPETITION','Typing, clicking and scrolling without variety'),('RECOVERY GAP','Sleep, stress, movement and workload affect capacity')]
for i,(a,b) in enumerate(parts):
x=.7+(i%2)*6.05; y=2.65+(i//2)*1.6
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,x,y,5.5,1.2,WHITE)
text(s,a,x+.25,y+.22,4.8,.25,14,TEAL,True); text(s,b,x+.25,y+.62,4.8,.28,12,SLATE)
text(s,'Reduce strain by improving setup, changing position and building physical capacity.',.72,6.05,11.5,.40,16,NAVY,True)
#4 workstation
s=new(); title(s,'Workstation essentials','Set up for comfort','Aim for supported, close and adjustable.',4)
items=[('Feet','Supported on the floor or footrest'),('Low back','Sit back with lumbar support'),('Screen','Directly ahead, near eye level'),('Hands','Keyboard and mouse close, wrists neutral'),('Shoulders','Relaxed, elbows close to the body')]
for i,(a,b) in enumerate(items):
y=2.48+i*.72; shape(s,MSO_SHAPE.OVAL,.78,y,.38,.38,TEAL); text(s,str(i+1),.78,y+.07,.38,.18,10,WHITE,True,align=PP_ALIGN.CENTER)
text(s,a,1.35,y-.02,1.65,.25,14,NAVY,True); text(s,b,3.08,y-.02,6.6,.30,12,SLATE)
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,10.1,2.57,2.18,3.55,NAVY)
text(s,'SUPPORTED\n\nCLOSE\n\nADJUSTABLE',10.34,3.12,1.7,2.5,15,WHITE,True,align=PP_ALIGN.CENTER)
#5 laptop
s=new(); title(s,'Laptop work','Make laptop work less demanding','A raised screen plus a separate keyboard and mouse keeps the setup balanced.',5)
for i,(a,b) in enumerate([('1','Raise the screen'),('2','Use an external keyboard'),('3','Add a separate mouse'),('4','Keep the screen directly ahead')]):
y=2.62+i*.72; text(s,a,.8,y,.55,.3,16,TEAL,True); text(s,b,1.40,y,4.7,.3,14,NAVY,True)
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,7.15,2.45,4.9,3.28,PALE)
text(s,'For longer calls',7.55,2.88,3.7,.34,17,NAVY,True); text(s,'Use a headset or speakerphone.\nAvoid holding a phone between shoulder and ear.',7.55,3.48,3.85,.90,15,SLATE)
text(s,'No equipment available? Use shorter screen blocks and change position more often.',7.55,4.74,3.85,.55,13,TEAL,True)
#6 resets
s=new(); title(s,'Reset','The 10-second workstation reset','Use at the start of focused work or after a long meeting.',6)
steps=['Feet supported','Sit back','Support the low back','Relax shoulders','Bring keyboard close','Straight wrists','Screen ahead','Three slow breaths']
for i,st in enumerate(steps):
x=.75+(i%4)*3.05; y=2.55+(i//4)*1.55
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,x,y,2.6,.9,WHITE)
text(s,f'{i+1:02d}',x+.18,y+.19,.38,.22,11,TEAL,True); text(s,st,x+.68,y+.16,1.7,.43,12,NAVY,True)
# Exercise template
exercises=[
('Chin tuck','Gently glide the chin straight back. Keep the gaze level.','8 repetitions','NECK RESET',imgs[0]),
('Side neck stretch','Tip the ear gently towards the shoulder. Keep the opposite shoulder relaxed.','20 seconds each side','NECK MOBILITY',imgs[1]),
('Shoulder blade squeeze','Draw the shoulder blades back and slightly down. Avoid shrugging.','10 repetitions','UPPER-BACK ACTIVATION',imgs[2]),
('Chest opener','Lift through the chest and gently draw the arms back. Stay comfortable.','2 x 20 seconds','FRONT-OF-CHEST RESET',imgs[3]),
('Seated thoracic rotation','Rotate through the upper back while keeping the pelvis steady.','5 each side','UPPER-BACK MOBILITY',imgs[4]),
('Sit to stand','Stand up with control, then sit down slowly. Keep knees aligned.','8-12 repetitions','LOWER-BODY RESET',imgs[5]),
('Wrist stretch','Straighten the elbow gently and stretch the wrist without forcing it.','20 seconds each side','WRIST & FOREARM RESET',imgs[6]),
('Calf raises','Rise smoothly onto the balls of the feet, then lower with control.','12 repetitions','CIRCULATION BREAK',imgs[7]),
]
for idx,(name,desc,dose,kicker,img) in enumerate(exercises,7):
s=new(); bg(s,NAVY)
add_photo(s,img,7.34,0,5.99,7.5)
shape(s,MSO_SHAPE.RECTANGLE,7.34,0,5.99,7.5,NAVY) # slight photographic clarity replacement? no overlay
# overlay only thin dark column is omitted; photo stays clear
text(s,kicker,.72,.68,5.8,.25,10,MINT,True)
text(s,name,.68,1.14,6.0,.55,28,WHITE,True)
shape(s,MSO_SHAPE.RECTANGLE,.72,1.95,.88,.06,GOLD)
text(s,desc,.72,2.45,5.8,1.08,16,WHITE)
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,.72,4.38,3.05,.76,TEAL)
text(s,dose,.94,4.64,2.6,.23,13,WHITE,True)
text(s,'Move in a comfortable range.',.72,5.70,5.2,.26,13,MINT)
text(s,'HOME | House of Movement & Excellence',.72,7.10,5.6,.18,8,MINT,True)
text(s,f'{idx:02d}',6.55,7.10,.35,.18,8,MINT,True,align=PP_ALIGN.RIGHT)
# 15 lifestyle
s=new(); title(s,'Beyond the desk','Four pillars for a sustainable workday','Your workstation matters, and so do your movement, recovery and physical capacity.',15)
items=[('MOVE','Regular activity you enjoy'),('STRENGTHEN','Build capacity twice weekly'),('RECOVER','Protect sleep and decompress'),('FUEL','Hydrate and eat regular balanced meals')]
for i,(a,b) in enumerate(items):
x=.72+(i%2)*6.05; y=2.55+(i//2)*1.55
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,x,y,5.5,1.12,WHITE)
text(s,a,x+.28,y+.19,2.0,.25,14,TEAL,True); text(s,b,x+.28,y+.59,4.7,.28,13,SLATE)
text(s,'Start small: a 10-minute walk after lunch is a useful first step.',.72,6.05,10.5,.32,16,NAVY,True)
#16 act early
s=new(); title(s,'Act early','When discomfort starts','Respond early and keep moving within a comfortable range.',16)
for i,(a,b) in enumerate([('REVIEW','Check the chair, screen, mouse and workload.'),('REPOSITION','Stand, walk or change the task.'),('REDUCE','Temporarily reduce continuous exposure.'),('REBUILD','Stay active and return gradually.')]):
y=2.48+i*.77; text(s,'R',.82,y,.5,.3,21,TEAL,True); text(s,a,1.45,y+.03,1.7,.25,14,NAVY,True); text(s,b,3.25,y+.03,7.1,.30,13,SLATE)
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,.75,5.95,11.35,.58,PALE)
text(s,'Seek a physiotherapy assessment if symptoms persist, recur or affect work, sleep or daily life.',.98,6.14,10.9,.20,12,NAVY,True)
#17 takeaway
s=new(); title(s,'Take-home message','The 5-part workday formula','A sustainable workday is designed, not endured.',17)
formula=['SET UP WELL','MOVE OFTEN','BUILD CAPACITY','RECOVER WELL','ACT EARLY']
for i,f in enumerate(formula):
x=.54+i*2.52; shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,x,3.18,2.23,.88,TEAL if i in (0,4) else WHITE)
text(s,f,x+.12,3.47,1.99,.26,12,WHITE if i in (0,4) else NAVY,True,align=PP_ALIGN.CENTER)
if i<4: text(s,'+',x+2.28,3.43,.22,.25,18,GOLD,True)
text(s,'One small change today can support a better tomorrow.',2.0,5.18,9.2,.4,18,TEAL,True,align=PP_ALIGN.CENTER)
#18 HOME advertisement
s=new(); bg(s,NAVY)
shape(s,MSO_SHAPE.OVAL,8.6,-1.3,5.4,5.4,TEAL); shape(s,MSO_SHAPE.OVAL,9.7,4.9,2.45,2.45,GOLD)
text(s,'HOME',.73,.92,4.2,.62,37,WHITE,True)
text(s,'House of Movement & Excellence',.78,1.69,7.5,.35,18,MINT,True)
shape(s,MSO_SHAPE.RECTANGLE,.78,2.32,1.15,.06,GOLD)
text(s,'Move with confidence.\nFeel at home in your body.',.78,2.82,6.7,1.05,25,WHITE,True)
text(s,'Physiotherapy | Movement | Recovery',.78,4.28,5.5,.28,15,MINT)
shape(s,MSO_SHAPE.ROUNDED_RECTANGLE,.78,5.14,3.18,.63,TEAL)
text(s,'SAKET, DELHI',1.04,5.35,2.65,.20,12,WHITE,True,align=PP_ALIGN.CENTER)
text(s,'Dr. Manvi Dhyani',.78,6.27,4.2,.30,16,WHITE,True)
text(s,'HOME | House of Movement & Excellence',.78,6.75,6.2,.18,10,MINT,True)
# Minimal metadata
prs.core_properties.title='HOME Ergonomics, Movement & Lifestyle'
prs.core_properties.subject='Corporate ergonomics workshop'
prs.core_properties.author='Dr. Manvi Dhyani | HOME'
prs.save(OUT)
print(OUT)
~/home_ergonomics/src/build_home_deck.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/home_ergonomics/src/build_home_deck.py'
python "/tmp/workspace/home_ergonomics/src/build_home_deck.py" && python - <<'PY' from pptx import Presentation p='/tmp/workspace/home_ergonomics/output/HOME_Ergonomics_Workshop_Dr_Manvi_Dhyani.pptx' prs=Presentation(p) print('slides=',len(prs.slides)) for i,s in enumerate(prs.slides,1): vals=[sh.text.strip().replace('\n',' / ') for sh in s.shapes if sh.has_text_frame and sh.text.strip()] print(i, vals[:3], 'pictures',sum(1 for sh in s.shapes if sh.shape_type==13)) PY
python - <<'PY' from pathlib import Path from pptx import Presentation p=Path('/tmp/workspace/home_ergonomics/output/HOME_Ergonomics_Workshop_Dr_Manvi_Dhyani.pptx') assert p.exists() and p.stat().st_size > 100000 prs=Presentation(p) all_text='\n'.join(sh.text for slide in prs.slides for sh in slide.shapes if sh.has_text_frame) for banned in ['CORPORATE WORKSHOP','SOURCES','Selected references','Facilitator: ____________________','Invite a show of hands','Pair activity']: assert banned.lower() not in all_text.lower(), banned assert 'Dr. Manvi Dhyani' in all_text assert 'Saket, Delhi' in all_text assert len(prs.slides)==18 exercise_pictures=sum(any(sh.shape_type==13 for sh in slide.shapes) for slide in prs.slides) assert exercise_pictures>=8 print(f'Validated: {len(prs.slides)} slides, {exercise_pictures} photo-based exercise slides, {p.stat().st_size} bytes') PY
give ppt
unable to download
~/home_ergonomics/output
HOME Ergonomics Workshop Dr Manvi Dhyani
Presentation · PPTX