The Problem
Generating coherent, controllable video content requires a model that can ingest explicit 4‑D camera and object motion while preserving realistic dynamics. Existing diffusion‑based video generators lack a clean interface for geometric control, forcing developers to resort to ad‑hoc conditioning pipelines.
What This Does
VerseCrafter supplies a frozen Wan2.1 diffusion backbone wrapped with a GeoAdapter that injects a unified 4‑D control state (camera trajectory + per‑object 3‑D Gaussian motion). The core implementation lives in versecrafter/models/wan_transformer3d_versecrafter.py and the supporting transformer definition versecrafter/models/wan_transformer3d.py.
The repository also ships three consumable entry points:
inference/versecrafter_inference.py– CLI driver that loads a checkpoint, reads a JSON control file, runs the model, and writes an MP4.api_server.py/model_server.py– minimal Flask‑style HTTP wrappers exposing the same inference path as a service.blender_addon/– a Blender plug‑in (operators.py,panels.py) that forwards the current Blender scene to the same inference pipeline, enabling interactive 4‑D control from within Blender.
How It Is Wired
Execution starts at the entry point you choose:
- CLI / script –
python inference/versecrafter_inference.py --config cfg.yaml. Parses arguments, loads model viaversecrafter/models/__init__.py→wan_transformer3d_versecrafter.WanTransformer3DVerseCrafter. Callspipeline_wan_versecrafter.run()(defined inversecrafter/pipeline/pipeline_wan_versecrafter.py). The pipeline pulls the frozen backbone fromwan_transformer3d.WanTransformer3D, injects the GeoAdapter, and runs the diffusion loop. Output is written to the filesystem (*.mp4in the caller’s cwd).
- HTTP server –
python api_server.py(ormodel_server.py). Flask routes (/infer) forward the request payload to the samepipeline_wan_versecrafter.run()function used by the CLI. The request handling code lives inapi_server.py(importsrequestsand the pipeline). * No timeout is set on outboundrequestscalls, giving the server an unbounded wait window (see health issue).
- Blender add‑on – user clicks “Generate” in the UI panel (
blender_addon/panels.py).operators.pygathers the current scene, writes a temporary control JSON, then invokes the same inference script viasubprocess. It disables SSL hostname verification (check_hostname = False), exposing the add‑on to MITM risks.
Import graph highlights – versecrafter/models/__init__ is the most imported module (Ca = 4, Ce = 2) and therefore the primary hub for model construction. The Blender add‑on, API server, and inference script each import only a handful of utilities, keeping their blast radius limited to the pipeline call. No circular dependencies were detected.
How To Use It
# Clone the repo (the fork you are evaluating)
git clone https://github.com/moses-y/VerseCrafter.git
cd VerseCrafter
# Create a clean Python 3.11 environment
conda create -n versecrafter python=3.11 -y
conda activate versecrafter
# Install PyTorch (matching the repo’s README)
conda install pytorch==2.3.0 torchvision==0.18.0 pytorch-cuda=12.1 -c pytorch -c nvidia -y
# Install Python deps
pip install -r requirements.txt
# Install third‑party adapters (as documented)
pip install git+https://github.com/microsoft/MoGe.git
# Grounded‑SAM‑2 and pytorch3d are optional for the demo scripts
Configuration – download model checkpoints into model/ as described in the README (uses huggingface_hub). The inference script expects a YAML control file (e.g., config/wan2.2/wan_civitai_t2v.yaml).
Run inference
python inference/versecrafter_inference.py \
--config config/wan2.2/wan_civitai_t2v.yaml \
--output results/output.mp4
Start the API
python api_server.py # listens on default Flask port
Blender – enable the add‑on in Blender’s Preferences, then use the “VerseCrafter” panel to generate video directly from the scene.
Real‑World Use
A VFX studio can embed the HTTP server into its render farm. A pipeline step posts a JSON describing camera rigs and object motions; the server returns a rendered MP4 that downstream compositing tools ingest. Example client snippet (Python):
import requests, json
payload = json.load(open('control.json'))
resp = requests.post('http://localhost:5000/infer', json=payload, timeout=30)
open('clip.mp4', 'wb').write(resp.content)
Code Health & Issues
- High – No test suite – 19 source files, zero test files.
- High – Certificate verification disabled –
blender_addon/operators.pysetscheck_hostname = False. - High – No CI workflow – repository lacks any
.github/workflows/*. - Medium – Dependabot missing – only
requirements.txtis present, no update bot configured. - Medium – Large binary assets in Git – several
.mov,.mp4,.giffiles > 5 MB (e.g.,demo_data/.../record.mov). - Medium – Outbound requests lack timeout –
api_server.pymakes HTTP calls without atimeout=argument.
Additional hygiene observations: no Dockerfile, no lockfile, a LICENSE is present, and no secrets were detected.
The Bottom Line
VerseCrafter delivers a functional 4‑D‑controlled video diffusion pipeline with clear entry points for CLI, service, and Blender integration. The codebase is usable but suffers from missing automated testing, CI, and some security‑related oversights. It is suitable for research or prototype integration where the team can add a test harness and tighten network handling; production deployments should first address the high‑severity health issues.