Demo-grade slide redesign pipeline. Upload any .pptx, parse + classify each
slide, review/regenerate/accept-reject in the UI, export a fresh .pptx styled
under one of four ASU program themes (Studio, Law, Hugh Downs Communications,
Psychology).
Status: prototype. No pilot, no auth, no persistence. Local-only.
backend/— FastAPI service (parse → classify → render pipeline).frontend/— Static React mockup of the studio UI (Babel-in-browser).
cd backend
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt pytest httpx
.venv/bin/python -m pytest # 7 tests
.venv/bin/uvicorn app.main:app --reload # http://127.0.0.1:8000| Method | Path | Purpose |
|---|---|---|
| POST | /jobs |
multipart .pptx upload → {job_id} |
| GET | /jobs/{id} |
job + parsed slide list |
| POST | /jobs/{id}/slides/{i}/regenerate |
bump variant seed |
| PATCH | /jobs/{id}/slides/{i} |
{status: accepted|rejected|pending} |
| POST | /jobs/{id}/export |
{program_id, accepted_only} → rendered .pptx |
| GET | /jobs/{id}/assets/{image_id} |
extracted image |
app/pipeline/parse.py—python-pptxwalks each slide, extracts title / bullets / first picture / speaker notes. Charts and tables flaggedunsupported(preserved, not rebuilt).app/pipeline/classify.py— heuristic-only mapping intotitle | bullets | bullets_image | section | quote | unsupported.app/pipeline/render.py— programmatically builds a fresh deck per the chosenProgramTheme(top maroon bar, gold accent, themed eyebrow + body).
No charts/SmartArt fidelity, no LLM rewriting, no async queue, no PDF, no font embedding, no real ASU brand masters (programmatic approximation only).
Static frontend/index.html loads app-minimal.jsx via Babel-in-browser. Today
it runs against a hardcoded SAMPLE_DECK. Wiring it to the live backend is the
obvious next step.
Internal prototype. No license attached.