Make me a ppt presentation for my research protocol
What can I use for the protocol content? · Who is the presentation for? · Choose a visual style.
its for a research predentation
Upload my protocol and turn it into a research presentation
https://docs.google.com/document/d/1tyG9F7TfduYxx9GUATK-xyzrYGku5ZxH/edit?rtpof=true&tab=t.0
https://docs.google.com/document/d/1tyG9F7TfduYxx9GUATK-xyzrYGku5ZxH/edit?rtpof=true&tab=t.0
https://docs.google.com/document/d/1tyG9F7TfduYxx9GUATK-xyzr…
~/
choledocholithiasis AND risk stratification
~/
mkdir -p "/tmp/workspace/research-protocol-presentation/src" "/tmp/workspace/research-protocol-presentation/output" && python -c "import requests; u='https://docs.google.com/document/d/1tyG9F7TfduYxx9GUATK-xyzrYGku5ZxH/export?format=docx'; r=requests.get(u,timeout=30); print(r.status_code, r.headers.get('content-type'), len(r.content)); open('/tmp/workspace/research-protocol-presentation/protocol.docx','wb').write(r.content)" && file "/tmp/workspace/research-protocol-presentation/protocol.docx"
~/research-protocol-presentation
2025 WSES guidelines common bile duct stones choledocholithiasis risk stratification
python3 -c "from docx import Document; p='/tmp/workspace/research-protocol-presentation/protocol.docx'; d=Document(p); out='/tmp/workspace/research-protocol-presentation/src/protocol_extracted.txt'; f=open(out,'w',encoding='utf-8'); [f.write(f'[{x.style.name if x.style else \"None\"}] {x.text}\\n') for x in d.paragraphs if x.text.strip()]; f.write('\\n=== TABLES ===\\n'); [(f.write('TABLE %d\\n'%i), [[f.write(' | '.join(c.text.replace(chr(10),\" \") for c in r.cells)+'\\n') for r in t.rows]]) for i,t in enumerate(d.tables,1)]; f.close(); print('paragraphs',len(d.paragraphs),'tables',len(d.tables),'output',out)"
Which area should I develop in detail next?
generate deck
~/
~/attachments
~/research-protocol-presentation
2016 WSES guidelines acute calculous cholecystitis common bile duct stones risk stratification predictors
choledocholithiasis diagnostic guideline
mkdir -p "/tmp/workspace/research-protocol-presentation/src" "/tmp/workspace/research-protocol-presentation/output" && curl -L --fail --silent --show-error "https://docs.google.com/document/d/1tyG9F7TfduYxx9GUATK-xyzrYGku5ZxH/export?format=docx" -o "/tmp/workspace/research-protocol-presentation/protocol.docx" && python3 -c "from docx import Document; p='/tmp/workspace/research-protocol-presentation/protocol.docx'; d=Document(p); out='/tmp/workspace/research-protocol-presentation/src/protocol_extracted.txt'; f=open(out,'w',encoding='utf-8'); [f.write(f'[{x.style.name if x.style else \"None\"}] {x.text}\\n') for x in d.paragraphs if x.text.strip()]; f.write('\\n=== TABLES ===\\n'); [([f.write(' | '.join(c.text.replace(chr(10),\" \") for c in r.cells)+'\\n') for r in t.rows]) for t in d.tables]; f.close(); print('EXTRACTED',len(d.paragraphs),len(d.tables))"
https://wjes.biomedcentral.com/articles/10.1186/s13017-020-0…
MRCP common bile duct stone magnetic resonance cholangiopancreatography image

This diagnostic image is a Magnetic Resonance Cholangiopancreatography (MRCP) showing the hepatobiliary system. The visual content demonstrates significant dilation of the intrahepatic bile ducts, characterized by a prominent, branching appearance of the biliary tree within the liver. The extrahepatic biliary system, including the common hepatic duct and common bile duct (CBD), also shows marked dilatation. Key pathological findings include a filling defect at the neck of the gallbladder, indicating stone impaction and obstruction. Additionally, a rounded filling defect is visible within the distal common bile duct, consistent with a choledocholithiasis (CBD stone). These findings are characteristic of obstructive jaundice and cholecystitis. The image is an essential educational tool for illustrating biliary anatomy, the effects of mechanical obstruction on ductal diameter, and the radiological presentation of Mirizzi syndrome or combined cholelithiasis and choledocholithiasis.

A dual-panel clinical image featuring diagnostic imaging and endoscopy related to hepatobiliary pathology. The left panel shows a Magnetic Resonance Cholangiopancreatography (MRCP) exhibiting a significantly dilated main bile duct measuring approximately 17 mm. A prominent filling defect consistent with a large biliary stone (29x16 mm) is indicated by a red arrow. The MRCP further demonstrates bilateral intrahepatic ductal dilation and a smaller stone in the distal hepatic duct near a surgical anastomosis. The right panel displays a high-definition endoscopic view looking through a hepaticojejunal anastomosis. Within the lumen of the anastomosis, a yellow-brown, multifaceted bile stone is clearly visible. The surrounding mucosa appears intact, and the anastomosis remains patent without evidence of stricture. This composite image illustrates common findings in recurrent biliary lithiasis following hepaticojejunostomy, demonstrating the correlation between radiological findings and direct endoscopic visualization for procedural planning.
python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_62f509cd5bd3bb43e335b241b6abed62cca0f38af26a2d095caa370d64d65915.jpg" > "/tmp/workspace/research-protocol-presentation/src/image_fetch.json"
python3 - <<'PY' import json p='/tmp/workspace/research-protocol-presentation/src/image_fetch.json' d=json.load(open(p)) print(d[0].keys()) print('has',bool(d[0].get('base64'))) PY
python3 - <<'PY' from pathlib import Path from textwrap import wrap import base64,json from io import BytesIO from pptx import Presentation from pptx.util import Inches,Pt from pptx.enum.shapes import MSO_SHAPE from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.dml.color import RGBColor ROOT=Path('/tmp/workspace/research-protocol-presentation') OUT=ROOT/'output'/'Galilea_WSES_CBDS_Research_Protocol.pptx' imgdata=json.load(open(ROOT/'src'/'image_fetch.json'))[0]['base64'] img=BytesIO(base64.b64decode(imgdata.split(',',1)[-1])) prs=Presentation(); prs.slide_width=Inches(13.333); prs.slide_height=Inches(7.5) blank=prs.slide_layouts[6] # Palette NAVY=RGBColor(10,37,64); BLUE=RGBColor(20,92,138); TEAL=RGBColor(20,139,145); GOLD=RGBColor(242,179,62); PALE=RGBColor(235,244,247); WHITE=RGBColor(255,255,255); INK=RGBColor(28,45,59); MUTED=RGBColor(93,111,122); RED=RGBColor(184,72,61); GREEN=RGBColor(55,136,106) def shape(sl,x,y,w,h,fill, radius=False, line=None): s=sl.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x),Inches(y),Inches(w),Inches(h)); s.fill.solid(); s.fill.fore_color.rgb=fill; s.line.color.rgb=line or fill; return s def text(sl,x,y,w,h,txt,size=18,color=INK,bold=False,align=PP_ALIGN.LEFT,font='Aptos',val=None,margin=.05): b=sl.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)); tf=b.text_frame; tf.clear(); tf.word_wrap=True; tf.margin_left=tf.margin_right=Inches(margin); tf.margin_top=tf.margin_bottom=Inches(margin); tf.vertical_anchor=val or MSO_ANCHOR.TOP for i,line in enumerate(txt.split('\n')): p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=line; p.alignment=align; p.space_after=Pt(3) for r in p.runs: r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color return b def title(sl,section,heading,sub=''): shape(sl,0,0,13.333,.18,TEAL); text(sl,.58,.36,12,.28,section.upper(),10,TEAL,True); text(sl,.58,.68,12.1,.58,heading,28,NAVY,True); if sub: text(sl,.6,1.3,11.7,.34,sub,12,MUTED) text(sl,.58,7.17,8,.18,'St. Luke’s Medical Center · Research Protocol',9,MUTED) text(sl,12.05,7.17,.7,.18,str(len(prs.slides)+1).zfill(2),9,TEAL,True,PP_ALIGN.RIGHT) def bullet(sl,x,y,w,items,size=16,color=INK,accent=TEAL): for i,it in enumerate(items): yy=y+i*.58; shape(sl,x,yy+.11,.12,.12,accent,True); text(sl,x+.27,yy,w-.27,.45,it,size,color) def card(sl,x,y,w,h,kicker,body,color=BLUE): shape(sl,x,y,w,h,WHITE,True,RGBColor(210,225,230)); shape(sl,x,y,w,.08,color,True); text(sl,x+.25,y+.22,w-.5,.25,kicker.upper(),10,color,True); text(sl,x+.25,y+.56,w-.5,h-.7,body,16,INK,False) # 1 s=prs.slides.add_slide(blank); shape(s,0,0,13.333,7.5,NAVY); shape(s,0,0,13.333,.18,TEAL); shape(s,8.75,.5,4.2,6.25,BLUE,True); shape(s,9.1,.85,3.5,5.55,TEAL,True); text(s,.72,.78,7.7,.35,'CLINICAL RESEARCH PROPOSAL',12,GOLD,True); text(s,.72,1.35,7.6,2.15,'Validation of the 2020 WSES Risk Stratification for Common Bile Duct Stones',31,WHITE,True); text(s,.75,3.75,6.85,.72,'in patients with acute calculus cholecystitis',20,RGBColor(201,222,231)); text(s,.75,5.42,6.4,.75,'Single-institution retrospective diagnostic-accuracy study',16,WHITE,True); text(s,.75,6.22,6.4,.35,'St. Luke’s Medical Center, Quezon City · 2026 protocol',12,RGBColor(201,222,231)); text(s,9.52,1.28,2.7,.5,'WSES\nCBDS',29,WHITE,True,PP_ALIGN.CENTER); text(s,9.52,2.5,2.7,2.2,'Risk stratification\nfor the right test,\nat the right time.',17,WHITE,False,PP_ALIGN.CENTER) # 2 s=prs.slides.add_slide(blank); title(s,'Clinical problem','ACC and CBDS: a high-stakes diagnostic fork','Common disease, selective need for biliary intervention') card(s,.65,2.0,3.8,2.15,'Burden','Gallstone disease affects ~10-15% of adults. Among patients with ACC, ~5-15% have concomitant CBDS.',TEAL) card(s,4.77,2.0,3.8,2.15,'Missed stones','Persistent obstruction can lead to cholangitis, pancreatitis, recurrent jaundice, and further intervention.',GOLD) card(s,8.89,2.0,3.8,2.15,'Over-treatment','Unselective ERCP may expose patients without stones to pancreatitis, bleeding, perforation, infection, and anesthesia risks.',RED) text(s,.7,5.02,11.8,.42,'Clinical need',13,TEAL,True); text(s,.7,5.48,11.7,.85,'Identify patients who need confirmatory imaging or therapeutic duct clearance while allowing low-risk patients to proceed efficiently to cholecystectomy.',22,NAVY,True) # 3 s=prs.slides.add_slide(blank); title(s,'Rationale','Why validate the WSES model locally?','Evidence quality and local service pathways shape predictive value') bullet(s,.75,2.0,5.9,['2020 WSES guidance adapted risk factors for ACC, but supporting evidence was judged very low quality with a weak recommendation.','Prediction rules can perform differently by case mix, prevalence, referral patterns, imaging availability, and ERCP access.','No published Philippine validation in adult ACC was identified in the protocol literature review.'],16) shape(s,7.2,1.92,5.35,3.85,PALE,True); text(s,7.58,2.28,4.55,.32,'INSTITUTIONAL VALUE',12,TEAL,True); text(s,7.58,2.85,4.45,1.5,'A locally validated pathway could support consistent triage, resource use, and safer selection for MRCP, ERCP, IOC, or surgery.',22,NAVY,True); text(s,7.58,4.77,4.3,.58,'Target users: consultants, surgical trainees, ER physicians, and other medical staff.',13,MUTED) #4 s=prs.slides.add_slide(blank); title(s,'Aim','Research question and objectives') shape(s,.68,1.9,12,1.18,NAVY,True); text(s,1.02,2.18,11.3,.5,'In adults with ACC, how accurately does 2020 WSES risk stratification predict confirmed common bile duct stones?',21,WHITE,True,PP_ALIGN.CENTER) card(s,.72,3.55,3.75,2.35,'Primary aim','Validate the modified 2020 WSES risk stratification by evaluating diagnostic accuracy for CBDS in ACC.',TEAL) card(s,4.8,3.55,3.75,2.35,'Diagnostic measures','Sensitivity, specificity, PPV, NPV, overall diagnostic accuracy, and 95% confidence intervals.',BLUE) card(s,8.88,3.55,3.75,2.35,'Secondary aims','Describe cohort and risk-category distribution; evaluate individual predictors associated with confirmed CBDS.',GOLD) #5 s=prs.slides.add_slide(blank); title(s,'Methods','Study design, setting, and population') card(s,.72,1.95,3.75,2.05,'Design','Retrospective observational diagnostic-accuracy study.',TEAL) card(s,4.8,1.95,3.75,2.05,'Setting','St. Luke’s Medical Center, Quezon City. Data from the start of the institutional EMR through 2025.',BLUE) card(s,8.88,1.95,3.75,2.05,'Target population','Patients who consulted and ultimately underwent surgery at the institution.',GOLD) text(s,.75,4.65,2.4,.3,'Cohort construction',13,TEAL,True) for x,lab,sub,col in [(0.8,'EMR + registry','consecutively screen',TEAL),(4.45,'Eligibility','ACC + CBDS evaluation',BLUE),(8.1,'Final cohort','analyzable records',GOLD)]: shape(s,x,5.15,3.2,.9,col,True); text(s,x+.1,5.31,3,.2,lab,16,WHITE,True,PP_ALIGN.CENTER); text(s,x+.1,5.61,3,.18,sub,10,WHITE,False,PP_ALIGN.CENTER) text(s,3.93,5.38,.35,.2,'›',31,NAVY,True,PP_ALIGN.CENTER); text(s,7.58,5.38,.35,.2,'›',31,NAVY,True,PP_ALIGN.CENTER) #6 s=prs.slides.add_slide(blank); title(s,'Methods','Eligibility and operational definitions') card(s,.72,1.95,5.75,1.65,'Include','Adults ≥18 years with ACC who underwent evaluation for possible CBDS by MRCP, EUS, IOC, ERCP, or operative findings.',GREEN) card(s,.72,3.95,5.75,1.65,'Exclude','Acalculous cholecystitis; previous biliary tract surgery; incomplete records; missing data needed for WSES classification.',RED) shape(s,6.95,1.95,5.7,3.65,PALE,True); text(s,7.3,2.27,4.95,.3,'REFERENCE STANDARD FOR CBDS',12,TEAL,True); bullet(s,7.3,2.87,4.9,['ERCP, MRCP, EUS, IOC, or direct intraoperative visualization / CBD exploration','Positive: stone confirmed by accepted test or operative record','Negative: no stone on test/operative findings or no evidence during index admission'],15,INK,BLUE) #7 s=prs.slides.add_slide(blank); title(s,'WSES framework','2020 WSES risk stratification for CBDS','Protocol classification with guideline-defined predictors') # columns for x,w,head,prob,col,body in [(.55,3.9,'LOW RISK','<10%',GREEN,'No predictors present\n\nProceed to laparoscopic cholecystectomy without further investigation.'),(4.72,3.9,'INTERMEDIATE','10-50%',GOLD,'All other profiles\n\nMRCP / EUS preoperatively, or IOC / laparoscopic US intraoperatively.'),(8.89,3.9,'HIGH RISK','>50%',RED,'Very strong predictor\n\nDirect diagnostic and therapeutic ERCP is considered for stone on ultrasound.')]: shape(s,x,2.05,w,3.65,WHITE,True,RGBColor(211,224,230)); shape(s,x,2.05,w,.5,col,True); text(s,x+.15,2.17,w-.3,.2,head,14,WHITE,True,PP_ALIGN.CENTER); text(s,x+.2,2.8,w-.4,.4,prob,25,col,True,PP_ALIGN.CENTER); text(s,x+.25,3.45,w-.5,1.65,body,15,INK,False,PP_ALIGN.CENTER) text(s,.7,6.2,12,.25,'Predictors: very strong - stone on abdominal ultrasound, ascending cholangitis; strong - CBD >6 mm (gallbladder in situ), bilirubin >1.8 mg/dL; moderate - abnormal LFTs, age >55, gallstone pancreatitis.',10,MUTED) #8 s=prs.slides.add_slide(blank); title(s,'Procedure','Data flow and classification workflow') steps=[('1','Identify','EMR + surgical registry'),('2','Extract','clinical, laboratory, imaging, operative data'),('3','Classify','pre-management 2020 WSES category'),('4','Verify','CBDS reference standard'),('5','Analyze','risk category versus confirmed CBDS')] for i,(n,a,b) in enumerate(steps): x=.6+i*2.55; shape(s,x,2.35,2.15,2.15,WHITE,True,RGBColor(212,226,232)); shape(s,x+.77,2.07,.62,.62,TEAL,True); text(s,x+.77,2.19,.62,.2,n,14,WHITE,True,PP_ALIGN.CENTER); text(s,x+.17,3.08,1.8,.28,a,16,NAVY,True,PP_ALIGN.CENTER); text(s,x+.14,3.48,1.88,.55,b,11,MUTED,False,PP_ALIGN.CENTER) if i<4: text(s,x+2.19,3.17,.3,.3,'›',27,GOLD,True,PP_ALIGN.CENTER) shape(s,1.1,5.25,11.15,.65,PALE,True); text(s,1.36,5.45,10.6,.2,'Data are coded with unique study IDs in a password-protected electronic database; records missing required classification or confirmation variables are excluded.',12,NAVY,False,PP_ALIGN.CENTER) #9 s=prs.slides.add_slide(blank); title(s,'Analysis','Outcome measures and statistical plan') card(s,.72,1.95,3.75,3.95,'Primary outcome','Diagnostic accuracy of high-risk WSES classification for confirmed CBDS.\n\nMeasures: sensitivity, specificity, PPV, NPV, overall accuracy, likelihood ratios, and 95% CI.',TEAL) card(s,4.8,1.95,3.75,3.95,'Descriptive results','Demographics, symptoms, laboratory and imaging characteristics.\n\nContinuous variables: mean ± SD or median (IQR).\nCategorical variables: n (%).',BLUE) card(s,8.88,1.95,3.75,3.95,'Associations','2 × 2 table: high risk vs low/intermediate risk against reference standard.\n\nIndividual predictors: chi-square or Fisher exact test; odds ratios with 95% CI.',GOLD) #10 s=prs.slides.add_slide(blank); title(s,'Sample and governance','Sample size, ethics, and confidentiality') shape(s,.72,1.9,4.0,3.9,NAVY,True); text(s,1.1,2.32,3.25,.25,'MINIMUM ANALYZABLE SAMPLE',12,GOLD,True,PP_ALIGN.CENTER); text(s,1.1,2.8,3.25,.75,'196',52,WHITE,True,PP_ALIGN.CENTER); text(s,1.08,3.72,3.3,1.12,'Finite population correction: 95% confidence, expected proportion 50%, institutional database population. All eligible cases included until target achieved.',13,RGBColor(210,229,238),False,PP_ALIGN.CENTER) card(s,5.1,1.9,3.45,3.9,'Risk profile','Retrospective chart review only\nNo patient contact, no extra procedures, and no alteration of clinical management.\n\nForeseeable risk: confidentiality breach.',RED) card(s,8.92,1.9,3.7,3.9,'Safeguards','De-identified, coded records\nPassword-protected database\nMaster linkage restricted to PI\nConfidential retention of study documents for at least 5 years\n\nEthical framework: Declaration of Helsinki, ICH-GCP, Philippine NEG HHRR.',GREEN) #11 s=prs.slides.add_slide(blank); title(s,'Expected value','From validation to a locally usable pathway') s.shapes.add_picture(img, Inches(.72), Inches(1.9), width=Inches(4.0), height=Inches(4.55)); shape(s,4.35,1.9,7.95,4.55,WHITE,True,RGBColor(210,225,230)); text(s,4.8,2.27,6.95,.25,'IF LOCAL PERFORMANCE IS ACCEPTABLE',12,TEAL,True); bullet(s,4.8,2.9,6.6,['Support a standardized institutional ACC-CBDS diagnostic protocol','Select MRCP, EUS, IOC, ERCP, and surgery more appropriately','Avoid unnecessary invasive procedures while reducing delayed stone diagnosis','Inform locally relevant resource use, costs, and patient flow'],17,INK,TEAL); text(s,.76,6.54,3.9,.28,'Illustrative MRCP: distal CBD filling defect',9,MUTED,False,PP_ALIGN.CENTER) #12 s=prs.slides.add_slide(blank); title(s,'Project plan','2026 schedule of activities') months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; text(s,.75,1.83,2.5,.25,'WORKSTREAM',11,TEAL,True) for i,m in enumerate(months): text(s,3.35+i*.7,1.83,.65,.25,m,10,TEAL,True,PP_ALIGN.CENTER) rows=[('Protocol + ethics',[0,1,2],TEAL),('Case identification + extraction',[2,3,4,5],BLUE),('Data cleaning + analysis',[5,6,7],GOLD),('Interpretation + dissemination',[8,9,10,11],GREEN)] for r,(lab,idxs,col) in enumerate(rows): y=2.35+r*.82; text(s,.75,y,2.35,.3,lab,14,NAVY,True); for i in range(12): shape(s,3.35+i*.7,y,.56,.35,PALE,True) for i in idxs: shape(s,3.35+i*.7,y,.56,.35,col,True) text(s,.75,6.15,11.6,.36,'Timing is presented as a protocol work plan for 2026; final dates remain subject to ethics and data-access approvals.',11,MUTED) #13 s=prs.slides.add_slide(blank); title(s,'References','Key protocol and evidence sources') refs=['Ansaloni L, et al. 2020 WSES updated guidelines for diagnosis and treatment of acute calculus cholecystitis. World J Emerg Surg. 2021;16:61.','Buxbaum JL, et al. ASGE guideline on evaluation and management of choledocholithiasis. Gastrointest Endosc. 2019;89:1075-1105.e15.','Kwok HCK, et al. Performance of diagnostic guidelines in acute biliary presentation: systematic review and meta-analysis. World J Surg. 2025. PMID 40569779.','Hasak S, et al. Evaluation of 2019 ASGE guidelines: improved specificity but persistent limitations. Gastrointest Endosc. 2022;95:663-672.','Protocol source: Validation of the 2020 WSES Risk Stratification for CBDS in ACC: A Single-Institution Retrospective Study. St. Luke’s Medical Center, Quezon City.'] for i,r in enumerate(refs): y=1.9+i*.8; shape(s,.75,y,.4,.4,TEAL,True); text(s,.75,y+.09,.4,.15,str(i+1),10,WHITE,True,PP_ALIGN.CENTER); text(s,1.35,y,10.9,.54,r,15,INK) #14 s=prs.slides.add_slide(blank); shape(s,0,0,13.333,7.5,NAVY); shape(s,0,0,13.333,.18,TEAL); text(s,.8,1.2,11.7,.5,'VALIDATING THE WSES CBDS PATHWAY',15,GOLD,True,PP_ALIGN.CENTER); text(s,.8,2.05,11.7,.8,'Thank you',44,WHITE,True,PP_ALIGN.CENTER); text(s,.8,3.1,11.7,.4,'Questions and discussion',22,RGBColor(207,227,236),False,PP_ALIGN.CENTER); shape(s,4.63,4.3,4.05,.08,TEAL,True); text(s,.9,5.15,11.4,.4,'St. Luke’s Medical Center · Quezon City',15,WHITE,False,PP_ALIGN.CENTER) prs.save(OUT) print(OUT, len(prs.slides)) PY python3 - <<'PY' from pptx import Presentation p='/tmp/workspace/research-protocol-presentation/output/Galilea_WSES_CBDS_Research_Protocol.pptx'; prs=Presentation(p) print('slides',len(prs.slides),'size',prs.slide_width,prs.slide_height) for i,s in enumerate(prs.slides,1): texts=[sh.text for sh in s.shapes if getattr(sh,'has_text_frame',False) and sh.text.strip()] print(i, len(texts), texts[0][:45] if texts else '') PY
~/research-protocol-presentation
/tmp/skills/pptx/scripts
/tmp/skills/pptx/scripts/office
python3 - <<'PY' from pptx import Presentation from pptx.util import Inches p='/tmp/workspace/research-protocol-presentation/output/Galilea_WSES_CBDS_Research_Protocol.pptx'; prs=Presentation(p) W,H=prs.slide_width,prs.slide_height issues=[] for si,s in enumerate(prs.slides,1): for sh in s.shapes: if sh.left<0 or sh.top<0 or sh.left+sh.width>W or sh.top+sh.height>H: issues.append((si,sh.name,round(sh.left/Inches(1),2),round(sh.top/Inches(1),2),round(sh.width/Inches(1),2),round(sh.height/Inches(1),2))) print('out_of_bounds',issues) print('file_bytes',__import__('os').path.getsize(p)) PY
python /tmp/skills/pptx/scripts/office/validate.py "/tmp/workspace/research-protocol-presentation/output/Galilea_WSES_CBDS_Research_Protocol.pptx"
**/*render* in /tmp/skills
Galilea WSES CBDS Research Protocol
Presentation · PPTX