Open-source project
ZiYang-xie/WorldGen avatar
ZiYang-xie/WorldGen

WorldGen: A Cubemap Pipeline for Turning Prompts and Photos into Navigable Gaussian Splats

🌍 WorldGen - Generate Any 3D Scene in Seconds

2,139 stars200 forksPythonApache-2.0

At a glance

What is it?
WorldGen is an Apache-2.0 Python package that builds 360-degree explorable 3D scenes from a text prompt or a single image. Its recent work has moved depth estimation to DA-2 and aligned per-face Gaussians through a cubemap, which is the part worth understanding before you install it.
Who is it for?
Adopt WorldGen if you need a navigable 360-degree scene from a prompt or a single photo and you are willing to run a CUDA stack plus a gated FLUX.1-dev download. Skip it if you need a watertight mesh for collision or physics, or if your target is a Windows machine without a working PyTorch3D build.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 157 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap WorldGen fills between a prompt and a walkable scene

Most text-to-3D tools return a single object. You get a chair, a mug, a statue, and you place it yourself in an engine. WorldGen targets the other half of the problem: the environment around the object. The README states it can generate 3D scenes in seconds from text prompts and images, and lists games, simulations, robotics and virtual reality as the intended uses. The distinguishing claim is 360-degree consistent exploration with loop closure, meaning you can rotate a full turn and the view should not tear apart at the seam. That is a harder problem than object generation because the model has to agree with itself around the whole horizon. If you are building a robotics testbed or a greybox level and you need something to look at from any angle, this is the niche the project aims at. If you need a single asset to drop into a scene you already have, the framing here is larger than what you need.

Cubemap faces, DA-2 depth, and why the seam is the whole story

The mechanism visible in the release notes is a panoramic image pipeline rather than a volumetric one. The project generates a 360-degree view, estimates depth for it, and lifts that into Gaussian splats. Two entries in the news list explain the current architecture. On 04.11.2026 the maintainer replaced UniK3D with DA-2 for what the notes call better 360-degree depth estimation. On 04.12.2026 the ml-sharp pipeline was reworked to use cubemap depth to align Sharp's per-face Gaussians for better global consistency, reducing the input from 8+ views to 6 cubemap faces. That second change is the interesting one. A cubemap splits the panorama into six faces, and each face gets its own set of Gaussians. Aligning those sets against a shared depth signal is what keeps the six faces from disagreeing at their borders. The 8+ views to 6 faces reduction is a simplification, and the stated goal is global consistency rather than per-face fidelity. The trade-off is structural: a face-based decomposition will always have edges to reconcile, and the quality of the result depends on how well that reconciliation holds up in practice. The notes claim alignment, not perfection.

Two entry points: demo.py for looking, the WorldGen class for saving

The README gives two ways in. The demo script launches a local Viser server at http://localhost:8080 so you can explore the scene in a browser. Text mode is python demo.py -p "A well-designed cozy bedroom". Image mode adds -i for the source file and keeps -p optional. The experimental path is a flag, --use_sharp, which the README says may produce better results than the default mode. Mesh output is a separate flag, --return_mesh, and the README warns you need a customized Viser fork installed via pip install git+https://github.com/ZiYang-xie/viser.git to visualize the mesh without backface culling. That warning is worth reading twice, because it means the mesh path does not render correctly in the stock Viser install. The Python API is the path for anything scripted. WorldGen(mode="t2s", device=device, low_vram=False) constructs the object, generate_world takes the prompt, and the returned splat has a .save method that writes a .ply the README says can be loaded in a standard Gaussian splatting viewer. The mode argument switches to i2s for image input. Note that the README's own two-line introduction shows WorldGen() with no arguments, while the advanced section shows mode, device and low_vram. Treat the advanced form as the accurate one.

Installation is a chain of pinned sources, not a single pip line

The install sequence is longer than the two-line API suggests. Clone with --recursive, because submodules are involved. Create a conda environment on Python 3.11. Install torch and torchvision, then pip install . for the package itself. DA-2 comes from a git URL with #subdirectory=src and --no-deps, which the README explains is to avoid version conflicts. PyTorch3D comes from the Facebook Research repository with --no-build-isolation, a flag that exists because PyTorch3D's build is sensitive to the isolated build environment. The ml-sharp experimental feature needs pip install -e submodules/ml-sharp on top of that. Finally, the README states you must accept the licence for the gated FLUX.1-dev model on Hugging Face and run huggingface-cli login. Four of those steps pull from git rather than PyPI, which means a fresh install resolves against whatever those repositories contain on the day you run it. That is a reproducibility cost you should price in before you build a pipeline on top. The README does not pin commit hashes for the git dependencies.

The VRAM ceiling and the low_vram flag

The API example carries an inline comment stating that low_vram should be set to True if your GPU has less than 24GB of VRAM. A separate news entry from 05.10.2025 says low-VRAM generation was added and uses roughly 10GB. So the practical range is between about 10GB and 24GB depending on which path you take, and the flag is the switch. What the material does not say is what low_vram changes underneath, whether it trades resolution, view count, or model precision, or how much quality is lost. That is a real gap. If you are provisioning a machine, the honest position is that the README gives you a floor of about 10GB and a comfort threshold of 24GB, and nothing about the cost of crossing between them. Test both settings on your own hardware before you decide which one your workflow can live with. The CPU fallback in the example, torch.device("cuda" if torch.cuda.is_available() else "cpu"), implies the code will construct on CPU, but the README makes no claim about generation speed or feasibility there.

Where the splat output stops being the right answer

Gaussian splats are a rendering representation. They are not collision geometry. If your downstream consumer is a physics engine, a path planner, or an asset pipeline that expects triangles with consistent normals, a .ply of Gaussians will not serve it, and the README's own note that the mesh mode should give better results than splat is an acknowledgement that the two outputs serve different needs. Even the mesh path comes with the caveat that it needs a forked Viser to display correctly. There is also an open TODO for better background inpainting, described as invisible region inpainting, which tells you the current output has regions you were never shown and that filling them convincingly is unfinished work. If your scene will be viewed from angles the source image or prompt never implied, that unfinished item is directly in your path. And if you are on Windows, the PyTorch3D install step with --no-build-isolation is the kind of dependency that historically needs a prebuilt wheel or a lengthy compile; the README offers no Windows-specific instructions. One more thing worth noting: there are no releases in the retrieved metadata, so the version badge in the README, v0.2.0, is the only version marker you get.

Against NeRF-style reconstruction, the difference is the input count

The natural comparison is a photogrammetry or NeRF-style reconstruction tool such as nerfstudio, which the project already depends on indirectly through Viser. The difference in approach is the input requirement. A NeRF pipeline reconstructs from many photographs of a real place, and its output is only as good as the coverage of those photographs. WorldGen takes one image or one prompt and generates the coverage. That inversion is the entire value proposition and also the entire risk: where a reconstruction pipeline interpolates between observations, WorldGen has to invent everything the single view did not contain, which is why background inpainting sits on the TODO list. If you have a dozen photos of a real room and you need it to match reality, a reconstruction tool is the right instrument and WorldGen is not. If you have nothing but a description, or one reference frame, WorldGen is doing something a reconstruction tool cannot do at all. The choice is not about which is better; it is about whether ground truth exists.

Maintenance posture and the licence you inherit

The commit history in the news section is dense and recent, with entries through 04.12.2026 touching depth estimation and the Sharp pipeline. That is a project still moving its core components, which cuts both ways: fixes arrive, and interfaces can shift. The README also shows two unchecked TODOs, a technical report and video, and the background inpainting work, so the documentation is thinner than the code. WorldGen itself is Apache-2.0, which permits commercial use and modification with the usual notice and patent terms. That licence does not cover everything you install. FLUX.1-dev is a gated model with its own licence that you must accept on Hugging Face before huggingface-cli login will work, and that licence is not Apache-2.0. DA-2, PyTorch3D, ml-sharp and the Viser fork each carry their own terms, and the README does not summarise them. If you are shipping a product, read the FLUX.1-dev terms yourself rather than assuming the repository's Apache-2.0 header covers the weights. This is not legal advice, and the licence stack here is genuinely multi-party.

Editorial conclusion

Adopt WorldGen if you need a navigable 360-degree scene from a prompt or a single photo and you are willing to run a CUDA stack plus a gated FLUX.1-dev download. Skip it if you need a watertight mesh for collision or physics, or if your target is a Windows machine without a working PyTorch3D build. Before committing, confirm the VRAM ceiling on your own card, confirm you can accept the FLUX.1-dev licence on Hugging Face, and check whether the mesh path is still marked as a work in progress in the README TODOs.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. ZiYang-xie/WorldGen on GitHub
Community notes

Community notes