MemSlides: A Hierarchical Memory-Driven Agent Framework for Personalized Slide Generation with Multi-turn Local Revision
Personalized presentation agents with user profile memory, working memory, tool memory, and scoped slide-local revision.
⭐ If MemSlides is useful for your research or slide-generation workflow, please consider starring this repository to help others discover it.
|
2026-06-26 Product milestone |
🚀 The MemSlides live demo crossed 50 verified users. Thank you to everyone trying the demo and helping us improve the personalized slide-generation workflow: try the live demo. |
|
2026-06-25 GitHub milestone |
⭐ MemSlides crossed 100 GitHub stars. Thank you for helping the project reach its first community star milestone: see stargazers. |
|
2026-06-24 Community milestone |
🏆 MemSlides reached #1 Paper of the Day on Hugging Face Daily Papers. Thank you for the early attention from the research community. See the #1 Paper of the day, and showcase Space. |
|
2026-06-23 Community creation |
🎧 A MemSlides community member created a ResearchPod episode about our paper. Listen on ResearchPod. |
video.mp4
MemSlides treats presentation generation as a stateful authoring process rather than a one-shot source-to-slides conversion task. It separates personalization signals by lifetime: persistent user profile memory captures recurring cross-job preferences, working memory carries active session constraints across revision rounds, and tool memory stores reusable execution experience for reliable localized editing.
Long-term memory stores intent-conditioned user profile memory for round-0 personalization and tool memory for reusable execution experience. Working memory maintains active preferences, session state, and revision constraints within the current deck. During revision, MemSlides projects user feedback onto the smallest affected slide region and applies scoped local patches instead of repeatedly regenerating the full deck.
- Intent-conditioned user profile memory routes personalization by presentation intent, then applies preferences over theme, visual style, layout, template use, content strategy, and general presentation habits.
- Multi-turn working memory preserves temporary preferences, session constraints, and edit-state records across feedback turns in the same deck.
- Tool memory retrieves prior task and tool-chain experience before similar edit operations to reduce repeated execution failures.
- Scoped slide-local revision updates the smallest affected slide region instead of repeatedly rewriting the full deck.
- User profile memory supports persona-aware round-0 personalization by routing intent-matched preferences into the current job.
- Working memory carries active session constraints and temporary preferences across multi-turn revision.
- Tool memory stores reusable execution experience so future localized edits can avoid repeated failures.
- Scoped local revision keeps the edit surface close to the requested element, reducing unintended drift in already aligned slide content.
Install from source:
sudo apt-get update
sudo apt-get install -y libreoffice fontconfig fonts-noto-cjk poppler-utils
conda env create -f environment.yml
conda activate memslides
pip install -e ".[research]"
python -m playwright install chromium ffmpeg
python -m memslides.experiment --helpRun the built-in smoke suite:
python -m memslides.experiment run smoke_minimal \
--output-base .memslides/experiments \
--parallel 1The same experiment can run inside the Docker environment:
docker compose build
docker compose run --rm memslides python -m memslides.experiment run smoke_minimal \
--output-base /app/.cache/memslides/experiments \
--parallel 1smoke_minimal is only a small verification suite. Users can pass any local
suite YAML path or packaged suite name to python -m memslides.experiment run.
MemSlides needs user-provided model and service credentials for real generation
experiments. Keep credentials outside git and provide them through environment
variables, .env, or a private YAML file selected with MEMSLIDES_CONFIG_FILE
or --config.
The packaged public config is src/memslides/memslides.yaml; its placeholders
are expanded from the current process environment when the YAML is loaded.
Generated outputs, caches, private YAML files, and credentials must not be
committed.
For Docker runs with a private YAML file:
docker compose -f docker-compose.yml -f docker-compose.private.yml run --rm memslides \
python -m memslides.experiment run smoke_minimal \
--output-base /app/.cache/memslides/experiments \
--parallel 1The override maps ./memslides.private.yaml to
/run/secrets/memslides.private.yaml and sets
MEMSLIDES_CONFIG_FILE=/run/secrets/memslides.private.yaml inside the
container.
The suite runner is the main public entry point:
python -m memslides.experiment run smoke_minimal --output-base .memslides/experiments --parallel 1
python -m memslides.experiment report .memslides/experiments/smoke_minimal
python -m memslides.experiment personasCore generation, revision, and template induction commands remain available for scripted local use:
python -m memslides generate --instruction "Create a one-slide project summary" --num-pages 1
python -m memslides revise --workspace .memslides/session --feedback "Tighten the title"
python -m memslides template induct --template-file template.pptx- Keep API keys in environment variables,
.env, or private YAML files. - Do not commit
.env,.memslides/, generated workspaces, or private config files. - Network acquisition is optional and depends on user-provided search or model credentials.
- External URLs and downloaded assets should be reviewed before presenting.
See LICENSE and THIRD_PARTY_NOTICES.md.



