Instructions to use PandacatAI/lingbot-world-v2-mps with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use PandacatAI/lingbot-world-v2-mps with MLX:
# Download the model from the Hub pip install huggingface_hub[hf_xet] huggingface-cli download --local-dir lingbot-world-v2-mps PandacatAI/lingbot-world-v2-mps
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Atomic Chat
Infinite Worlds with Versatile Interactions
Robbyant Team
We present LingBot-World 2.0 (also known as LingBot-World-Infinity), an advanced iteration of LingBot-World featuring four distinct upgrades.
- Unbounded Interaction Horizon: Our model achieves an unbounded interaction horizon while maintaining consistent output quality, benefiting from a carefully crafted causal pretraining paradigm.
- Rapid Response Time: Through distilling a real-time variant from the base model, our system guarantees rapid response time, sufficient to drive 720p video streams at 60 fps.
- Highly Diverse Interactive Elements: Compared to the previous version, this update introduces highly diverse interactive elements, comprising a broader spectrum of actions (e.g., attacking, archery, spell-casting, and shooting) alongside a richer variety of text-driven events.
- Agentic Harness: We pioneer the integration of an agentic harness within the domain of world modeling, wherein a pilot agent is tasked with planning and executing character behaviors, while a director agent is responsible for synthesizing novel environmental elements as the scene progresses.
Fork note. This repository is a fork of robbyant/lingbot-world-v2 maintained by PandacatAI. It adds single-device Apple Silicon (MPS) support with a bounded memory footprint, a disk prompt cache, and an optional 8-bit MLX text encoder; the model weights and architecture are unchanged. See the
causal_fast1.3B bullet under Inference for the Mac instructions. The fork is distributed under the original CC BY-NC-SA 4.0 license.
π Try it now
The real-time version of LingBot-World-Infinity is available on two platforms. We thank Reactor and LingGuang for their support:
Note: Reactor and LingGuang provide a convenient way to try LingBot-World-Infinity in real time. In our official setup, the model runs at full capability. To experience our official demo, join us at WAIC 2026.
π¬ Demo Gallery
β¨ For more high-fidelity and compelling demos, please visit our Project Page.
Apple Silicon (this fork)
1.3B causal-fast on an M4 Pro (48 GB unified memory), 480Γ832, 109 frames @ 16 fps. Prompt and camera path from examples/03. Generated in 14.4 min at a 16.1 GB process-footprint peak. Also on YouTube.
π₯ News
- Sep. 13, 2026: π Apple Silicon fork (PandacatAI/lingbot-world-v2-mps) β single-device MPS inference for the 1.3B causal-fast model, 8-bit MLX text encoder, disk prompt cache.
- Sep. 10, 2026: π We release the remaining full model variants: the 14B modelβs causal-pretrained and bidirectional variants, and the 1.3B modelβs causal-fast variant.
- Jul. 9, 2026: π We release the technical report, inference code, and models for LingBot-World-Infinity.
π TODO
- Release the causal-fast inference code and model of the 14B model
- Release the causal-pretrained model of the 14B model
- Release the bidirectional model of the 14B model
- Release the causal-fast model of the 1.3B model
βοΈ Quick Start
This codebase is built upon Wan2.2. Please refer to their documentation for installation instructions.
Installation
Clone the upstream repo, or this Apple Silicon fork from Hugging Face:
# upstream (14B / multi-GPU)
git clone https://github.com/robbyant/lingbot-world-v2.git
cd lingbot-world-v2
# this fork (1.3B / MPS) β `huggingface-cli` was replaced by `hf`
pip install -U huggingface_hub
hf download PandacatAI/lingbot-world-v2-mps --local-dir lingbot-world-v2-mps
cd lingbot-world-v2-mps
Install dependencies:
# Ensure torch >= 2.4.0
pip install -r requirements.txt
Install flash_attn (CUDA multi-GPU only; skip on macOS):
pip install flash-attn --no-build-isolation
Model Download
| Model | Model Type | Model Size | Download Links |
|---|---|---|---|
| lingbot-world-v2-14b-causal-fast | causal-fast | 14B | π€ HuggingFace π€ ModelScope |
| lingbot-world-v2-14b-causal-pretrain | causal-pretrain | 14B | π€ HuggingFace |
| lingbot-world-v2-14b-bid | bidirectional | 14B | π€ HuggingFace |
| lingbot-world-v2-1.3b-causal-fast | causal-fast | 1.3B | π€ HuggingFace |
Download models using the Hugging Face CLI (hf; formerly huggingface-cli):
pip install -U huggingface_hub
hf download robbyant/lingbot-world-v2-14b-causal-fast --local-dir ./lingbot-world-v2-14b-causal-fast
Download models using modelscope-cli:
pip install modelscope
modelscope download robbyant/lingbot-world-v2-14b-causal-fast --local_dir ./lingbot-world-v2-14b-causal-fast
Inference
We provide generate.py for causal inference with KV caching, which processes video frames chunk-by-chunk instead of all at once.
causal_fastβ 480P, multi-GPU:torchrun --nproc_per_node=8 generate.py --task i2v-A14B --size 480*832 --ckpt_dir lingbot-world-v2-14b-causal-fast --image examples/03/image.jpg --action_path examples/03 --dit_fsdp --t5_fsdp --ulysses_size 8 --frame_num 361 --local_attn_size 18 --sink_size 6 --prompt "A serene lakeside scene with a lone tree standing in calm water, surrounded by distant snow-capped mountains under a bright blue sky with drifting white clouds β gentle ripples reflect the tree and sky, creating a tranquil, meditative atmosphere."
You can also use the provided run_fast.sh script:
bash run_fast.sh <weights_dir> <frame_num>
# e.g. bash run_fast.sh lingbot-world-v2-14b-causal-fast 361
causal_fastβ 1.3B model, single device (Apple Silicon / MPS, or one GPU):bash run_mps.sh <weights_dir> <frame_num> # e.g. bash run_mps.sh ckpt 361The 1.3B checkpoint needs no
flash_attnand notorchrun, so on macOS you only need the base requirements (pip install -r requirements.txtwithout theflash-attnline;run_mps.shuses.venv/bin/pythonwhen present). On MPS the pipeline keeps the process footprint at roughly 16 GB for 480Γ832 output at any frame count: the text encoder is released after the prompt is encoded, the DiT is released before VAE decode, and the VAE runs spatially tiled (--vae_tile_size, exact with the default halo). To measure the peak of a run, wrap it withpython tools/memwatch.py -- python generate.py ....Assemble the weights once (~7 GB; the 1.3B checkpoint is natively in diffusers format and loads as-is):
pip install -U huggingface_hub mlx hf download robbyant/lingbot-world-v2-1.3b-causal-fast \ --local-dir ckpt/transformers hf download Wan-AI/Wan2.1-T2V-14B Wan2.1_VAE.pth --local-dir ckpt hf download google/umt5-xxl --local-dir ckpt/google/umt5-xxl hf download PandacatAI/umt5-xxl-enc-mlx-q8 \ --local-dir ckpt/umt5-xxl-enc-mlx-q8Prompt embeddings are cached on disk (
<ckpt_dir>/t5_cache/, a few KB to 2 MB each). A prompt seen in any earlier run skips the text encoder entirely.--t5_cache_dirrelocates the cache,--t5_cache_dir ''disables it.The I2V conditioning tensor is cached the same way (
<ckpt_dir>/cond_cache/, ~10 MB each;--cond_cache_dir,''to disable). It depends only on the image and the output geometry β not the prompt, seed or frame count β so an interactive session that stays on one image does no VAE encode work at all after the first clip.The text encoder is an 8-bit MLX quantization of umt5-xxl (PandacatAI/umt5-xxl-enc-mlx-q8): 5.6 GB on disk instead of 10.6 GB, T5-phase peak 8 GB instead of 14 GB, ~1 s per prompt.
--t5_backend auto(the default) uses<ckpt_dir>/umt5-xxl-enc-mlx-q8whenever it exists,--t5_backend torchforces the original bf16 checkpoint. To (re)build the MLX encoder fromckpt/models_t5_umt5-xxl-enc-bf16.pth:pip install mlx && python tools/convert_t5_mlx.py --ckpt_dir ckpt --bits 8 --check. Measured against the bf16 torch encoder the 8-bit embeddings differ by ~3% relative β the same amount torch-on-MPS differs from torch-on-CPU β and a clip generated from them matches the torch one at 39 dB PSNR. 4-bit was measured too and rejected (17β28% error).
Local benchmark (Apple Silicon)
Measured on a MacBook Pro with M4 Pro and 48 GB unified memory, macOS,
PyTorch MPS, 1.3B causal-fast, 480Γ832, tiled VAE (core=32 latent px,
halo=16), local_attn_size=18, sink_size=6, examples/03 camera path.
Peak footprint is the process's physical-memory high-water mark (the
figure that actually OOMs); RSS is much smaller because MPS keeps most
weight pages file-backed.
| Frames (requested / written) | Text encoder | Wall time | Peak footprint | Peak RSS |
|---|---|---|---|---|
| 121 / 109 | MLX 8-bit (prompt cache hit) | 14.4 min | 16.1 GB | 2.8 GB |
| 361 / 269 | torch bf16 | 33.5 min | 16.1 GB | 3.3 GB |
The 121-frame run (the demo above) spent ~4 min in VAE encode, 5.2 min in 7 DiT chunks (30β49 s/chunk as the KV window fills), and ~5 min in VAE decode. Footprint does not grow with frame count past ~16 GB: the encoder, DiT and VAE are never resident together, and the VAE is spatially tiled. On a 13-frame clip the MLX encoder's process peak is 11.8 GB versus 14.0 GB for torch bf16.
The table above predates the conditioning-encode change. The VAE no longer encodes the zero-padded tail of the conditioning tensor: past latent frame 25 the encoder's output is bitwise constant in bfloat16 (which is the precision the DiT's
patch_embeddingsees under autocast), so those frames are broadcast instead of computed. Encode cost therefore stops scaling with clip length β 26 temporal chunks at anyframe_numβ which is worth ~7% at 121 frames but 70% at 361, where a paired same-process measurement gave 1048.6 s β 349.6 s (3.0x). With a warmcond_cachethe encode is skipped entirely (measured 190.5 s β 0.1 s). Both are bitwise identical to the uncut encode at bfloat16 β verified element-wise on the conditioning tensor and end-to-end as byte-identical output video β and the cut can be disabled withLINGBOT_ZERO_TAIL_CUT.tools/vae_zero_fixpoint.pyreproduces the measurement.
Wrap any command with python tools/memwatch.py -- ... to record the same
counters.
Deployment
We do NOT plan to release our deployment code. If you would like to deploy our model yourself, please refer to the LingBot-World deployment in SGLang or flashdreams.
π Related Projects
π License
This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (CC BY-NC-SA 4.0). The project is available for non-commercial use only: you may share and adapt it with proper attribution, but derivative works must be distributed under the same license. Please refer to the LICENSE file for the full text, including details on rights and restrictions.
The Apple Silicon fork in this repository is a derivative work and is distributed under the same CC BY-NC-SA 4.0 license. The MLX text encoder published separately at PandacatAI/umt5-xxl-enc-mlx-q8 is derived from the Apache-2.0 licensed umt5-xxl / Wan2.1 text encoder and carries its own license.
β¨ Acknowledgement
We would like to express our gratitude to the Wan Team for open-sourcing their code and models. Their contributions have been instrumental to the development of this project.
π Citation
If you find this work useful for your research, please cite our paper:
@article{lingbot-world-v2,
title={Infinite Worlds with Versatile Interactions},
author={Zelin Gao and Qiuyu Wang and Jiapeng Zhu and Jingye Chen and Zichen Liu and Qingyan Bai and Jiahao Wang and Yufeng Yuan and Hanlin Wang and Yichong Lu and Ka Leong Cheng and Haojie Zhang and Jian Gao and Tianrui Feng and Yuzheng Liu and Yao Yao and Yinghao Xu and Xing Zhu and Yujun Shen and Hao Ouyang},
journal={arXiv preprint arXiv:2607.07534},
year={2026}
}