Spaces:
Running on Zero
Download README.md from hugging-apps/ppmem: direct link, hf CLI and curl.
- Browser
- Download file 3.45 kB
-
https://huggingface.co/spaces/hugging-apps/ppmem/resolve/main/README.md
- Command line
-
hf download hf://spaces/hugging-apps/ppmem/README.md
-
curl -L -o README.md https://huggingface.co/spaces/hugging-apps/ppmem/resolve/main/README.md
title: 'PPMem: Persistent Planar Memory for Video World Models'
emoji: 🛩️
colorFrom: red
colorTo: yellow
sdk: gradio
sdk_version: 6.30.0
app_file: app.py
short_description: Camera-posed video world model with planar memory
python_version: '3.12'
startup_duration_timeout: 1h
pinned: false
license: apache-2.0
PPMem: Persistent Planar Memory for Video World Models
Demo of PPMem (paper · code · weights Robbyant-Research/PPMem): an interactive camera-posed video world model built on a Wan 2.2 TI2V-5B DiT that maintains a persistent memory of 3D planes. Give it a starting image and a camera trajectory; it generates a 25-frame (97-frame latent-space) RGB video from the first pose, plus the planar geometry (per-patch 3D planes), depth and normal maps, and a world-space planar mesh it predicts for that trajectory.
How it works
This Space runs the repo's single-image rollout path (step0 → PPMemImageToVideoPipeline) 1:1:
- Depth bootstrap — metric depth + intrinsics for the first frame come from the bundled
geometry.npz(authors' file) or, when none is supplied, from MoGe-2 single-image estimation. - step0 — the frame-0 image and depth are reprojected along the camera trajectory to build the projected RGB / mask / depth conditioning latents, prefix (very-first + context) latents, and the per-frame intrinsics/extrinsics metadata.
- Denoise — the PPMem DiT denoises one 25-frame chunk with flow-match UniPC sampling (shift 5.0, guidance 5.0), conditioned on those latents and the UMT5 text prompt embeds, with its plane-memory module keeping planar state persistent across frames.
- Geometry pass — one final forward with the plane head enabled predicts per-patch 3D planes; these are exported as a world-space planar mesh (PLY), turbo-colormapped depth maps and normal maps.
Outputs: RGB video (1024×576 @ 15 fps), depth video (turbo colormap, rendered from the predicted planes), normal maps, and the planar mesh (gr.Model3D).
Inputs
- Start image — the first frame.
- Camera trajectory (
.npy) — optional(N, 4, 4)camera-to-world poses. Bundled examples use the authors' trajectories; without one a slow forward dolly is synthesized. - Geometry (
.npz) — optional depth/focal bootstrap withdepth, fx, fy, cx, cykeys; when omitted MoGe-2 estimates it. - Prompt — describes the scene (used as in the paper: full scene description).
Advanced: seed, steps (default 50), guidance (default 5.0).
Notes
- Runs on ZeroGPU (RTX PRO 6000 Blackwell); one request takes ~5 minutes at 50 steps plus queue. Lowering the steps slider shortens both the runtime and the GPU-time reservation.
diff_rect_rasterization(the repo's rectangle rasterizer) is installed from a wheel built for this hardware (sm_120 / cu130 / torch 2.11), so the DiT'srender_primitivespath is active. The published depth/normal export additionally uses the repo's pure-numpysave_depth_maps/save_normal_mapspath.flash_attnis the FA2 varlen kernel exposed under the FA3 module name the repo imports (flash_attn_interface.pyshim); FA3 itself cannot run on sm_120.- Model and code by the PPMem authors (Apache-2.0). Example assets are the authors'
examples/files (Apache-2.0).