From 663602d99915fdd821b08b4ef117a61b021c297c Mon Sep 17 00:00:00 2001
From: iChubai <149308795+iChubai@users.noreply.github.com>
Date: Sat, 17 Oct 2026 12:09:27 +0800
Subject: [PATCH 1/2] [chore]Complete distribution and repository guidance
Signed-off-by: iChubai <149308795+iChubai@users.noreply.github.com>
---
.gitignore | 6 +-
LICENSE | 201 ++++
MANIFEST.in | 14 +-
README.md | 425 ++------
.../content/docs/guides/inference.mdx | 2 +-
.../content/docs/guides/inference.zh.mdx | 2 +-
docs/fumadocs/content/docs/guides/meta.json | 1 -
.../fumadocs/content/docs/guides/meta.zh.json | 1 -
.../content/docs/guides/run-status.mdx | 15 -
.../content/docs/guides/run-status.zh.mdx | 15 -
.../content/docs/maintainers/contributing.mdx | 39 +
.../docs/maintainers/contributing.zh.mdx | 37 +
docs/fumadocs/content/docs/quickstart.mdx | 16 +-
docs/fumadocs/content/docs/quickstart.zh.mdx | 16 +-
docs/fumadocs/content/docs/reference/cli.mdx | 2 +-
.../content/docs/reference/cli.zh.mdx | 2 +-
.../docs/reference/vendored-licenses.mdx | 9 +-
.../docs/reference/vendored-licenses.zh.mdx | 9 +-
.../public/models/irasim/overview.png | Bin 343881 -> 0 bytes
.../public/models/pandora/overview.png | Bin 548213 -> 0 bytes
docs/fumadocs/public/org-logos/SOURCES.md | 4 +-
docs/fumadocs/scripts/generate-org-logos.py | 9 +-
docs/fumadocs/scripts/harvest-model-media.py | 40 +-
docs/fumadocs/scripts/model_paper_figures.py | 12 -
pyproject.toml | 11 +-
scripts/docs/build.sh | 11 +-
scripts/inference/prepare_model_infer.sh | 7 -
scripts/setup/bootstrap_worldfoundry.sh | 10 +-
scripts/setup/check_packaging_license_gate.py | 200 ++--
scripts/setup/conda_install.sh | 10 +-
scripts/setup/model_env_install.sh | 28 +-
scripts/setup/unified_install.sh | 12 +-
tests/core/test_docs_infra_guidance.py | 6 +-
tests/eval_core/test_docs_first_run.py | 16 +-
tests/eval_core/test_docs_quickstart.py | 68 +-
.../eval_core/test_packaging_license_gate.py | 264 +++--
tests/eval_core/test_versioning.py | 24 +-
tests/scripts/test_run_video_model_matrix.py | 996 ------------------
.../scripts/test_validate_generated_videos.py | 35 -
39 files changed, 865 insertions(+), 1710 deletions(-)
create mode 100644 LICENSE
delete mode 100644 docs/fumadocs/content/docs/guides/run-status.mdx
delete mode 100644 docs/fumadocs/content/docs/guides/run-status.zh.mdx
delete mode 100644 docs/fumadocs/public/models/irasim/overview.png
delete mode 100644 docs/fumadocs/public/models/pandora/overview.png
delete mode 100644 tests/scripts/test_run_video_model_matrix.py
delete mode 100644 tests/scripts/test_validate_generated_videos.py
diff --git a/.gitignore b/.gitignore
index b46c26657..93cf3ab78 100644
--- a/.gitignore
+++ b/.gitignore
@@ -390,7 +390,10 @@ worldfoundry/studio/assets/vendor/
/plan/
/memory/
/configs/
-/benchmarks/
+/benchmarks/*
+!/benchmarks/inference/
+/benchmarks/inference/*
+!/benchmarks/inference/wan_execution_preparation.py
/gg
# Public branch: keep private training and embedded upstream QA out of commits.
@@ -988,6 +991,7 @@ worldfoundry/studio/assets/vendor/
/tests/**
!/tests/**/
!/tests/**/*.py
+!/tests/**/*.mjs
!/tests/**/*.md
!/tests/**/*.sh
!/tests/**/*.yaml
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/MANIFEST.in b/MANIFEST.in
index 123edfb58..950f54c09 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,4 +1,9 @@
include .pre-commit-config.yaml
+include LICENSE
+include CODE_OF_CONDUCT.md
+include CONTRIBUTING.md
+recursive-include skills *.md
+include SECURITY.md
include THIRD-PARTY-NOTICES
include worldfoundry/synthesis/visual_generation/dino_wm/datasets/UPSTREAM.md
include worldfoundry/synthesis/visual_generation/egowm/nav_25dof_stats.json
@@ -86,13 +91,10 @@ prune worldfoundry/synthesis/visual_generation/wonderworld/wonderworld_runtime
prune thirdparty/diff-gaussian-rasterization
prune thirdparty/SageAttention
prune thirdparty/simple-knn
+prune thirdparty/matrix-game
# Upstream runtime mirrors should ship source code, not demo galleries, notebooks,
# eval question dumps, or bundled sample media.
-prune worldfoundry/synthesis/visual_generation/pandora/pandora_runtime/ChatUniVi/eval
-prune worldfoundry/synthesis/visual_generation/pandora/pandora_runtime/ChatUniVi/train
-prune worldfoundry/synthesis/visual_generation/dynamicrafter_pandora/DynamiCrafter/assets
-prune worldfoundry/synthesis/visual_generation/dynamicrafter_pandora/DynamiCrafter/prompts
global-exclude __pycache__
global-exclude *.py[cod]
global-exclude .DS_Store
@@ -121,11 +123,13 @@ global-exclude test_*.py *_test.py test_*.cpp *_test.cpp
# Publish first-party test sources and fixtures in sdists, after the upstream
# QA exclusions above. Wheels continue to contain only worldfoundry packages.
-recursive-include tests *.py *.md *.sh *.yaml *.yml *.json *.jsonl
+recursive-include tests *.py *.mjs *.md *.sh *.yaml *.yml *.json *.jsonl
include docs/fumadocs/public/measurements/mg2-conditioned-trajectory-2026-10-03.json
# First-party packaging helper exercised by the published license tests.
include thirdparty/fastvideo-kernel/build_backend.py
include .github/workflows/ci.yml
+include .github/workflows/pr-checks.yml
+recursive-include scripts/dev *.py
include Makefile scripts/setup/check_packaging_license_gate.py
global-exclude */__pycache__/* */.pytest_cache/* */.mypy_cache/* */.ruff_cache/*
global-exclude */tmp/* */temp/* */logs/* */outputs/* .env* *.py[cod]
diff --git a/README.md b/README.md
index 75863d6af..d677a216f 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,21 @@
# WorldFoundry
[](pyproject.toml)
-[](THIRD-PARTY-NOTICES)
-[](https://openenvision.github.io/WorldFoundry/docs/reference/cli)
+[](LICENSE)
+[](https://github.com/OpenEnvision/WorldFoundry/actions/workflows/ci.yml)
[](https://openenvision.github.io/WorldFoundry/docs)
-WorldFoundry is an open-source infrastructure for world models: a shared stack for in-tree runners, local asset staging, inference (TUI / CLI / Studio), and benchmark evaluation across video generation, 3D/4D representation, embodied action, and interactive worlds.
+[Documentation](https://openenvision.github.io/WorldFoundry/docs) · [中文文档](https://openenvision.github.io/WorldFoundry/zh/docs) · [Contributing](CONTRIBUTING.md)
-> ⚠️ This repository is still under active development. We will keep updating it regularly. Feel free to open an issue if you encounter any problem.
+WorldFoundry is an open-source framework for world-model inference and evaluation.
+It brings video generation, interactive worlds, 3D/4D reconstruction, and embodied action into a shared workflow.
-Day-one workflow:
+
+
+## 📰 News
-1. **Environment + assets** — bootstrap conda, stage checkpoints and datasets outside git.
-2. **Inference** — generate and inspect artifacts via TUI, CLI, scripts, or Studio.
-3. **Evaluation** — score only after artifacts match the benchmark layout; use scorecards for readiness claims.
+- **[2026-07-12]** 🔥 **WorldFoundry reached 100+ stars on its very first day!** Thanks to the community for the incredible support and encouragement. More exciting updates are coming!
+- **[2026-07-11]** 🎉 **WorldFoundry is officially open-sourced.** We welcome ⭐ stars, bug reports, feature requests, and pull requests from the community!
## 🤝 Community
@@ -53,394 +55,84 @@ Join the **WorldFoundry Community** on Slack, [Discord](https://discord.gg/ybUQM
QR codes are updated periodically if they expire.
-## 📰 News
+## Highlights
-- **[2026-07-12]** 🔥 **WorldFoundry reached 100+ stars on its very first day!** Thanks to the community for the incredible support and encouragement. More exciting updates are coming!
-- **[2026-07-11]** 🎉 **WorldFoundry is officially open-sourced.** We welcome ⭐ stars, bug reports, feature requests, and pull requests from the community!
+- **Model and benchmark catalogs** — discover models, checkpoint sources, runtime requirements, and benchmark protocols.
+- **Unified inference** — run in-tree pipelines through the CLI, terminal UI, or browser-based Studio.
+- **Artifact inspection** — review job status, generated media, and geometry through Studio and its visualizers.
+- **Benchmark evaluation** — run model × benchmark cells and inspect normalized metrics, readiness, and eligibility scorecards.
+## System Requirements
-
+- **Platform:** Linux with an NVIDIA CUDA-capable GPU.
+- **Driver:** CUDA 12.8+ support for the default unified environment.
+- **GPU architecture / VRAM:** model-specific; check the selected model's page.
+- **Tools:** Git and Conda.
-## What WorldFoundry Provides
+Inference, Studio, evaluation, and development use the same unified CUDA environment.
+Model-specific environments for ABI or simulator requirements are documented in the
+[environment guide](https://openenvision.github.io/WorldFoundry/docs/reference/environments).
-| Surface | Purpose | Entry point |
-| --- | --- | --- |
-| Model zoo | Catalogs video, world, 3D/4D, VLA/VA/WAM, hosted API, and metadata-only model entries. | [`worldfoundry/data/models/catalog`](worldfoundry/data/models/catalog) |
-| In-tree runtimes | Keeps model architecture and inference adapters inside `worldfoundry`; checkpoints stay in local/Hugging Face caches. | [`worldfoundry/synthesis`](worldfoundry/synthesis), [`worldfoundry/pipelines`](worldfoundry/pipelines) |
-| TUI | Interactive model/benchmark picker that prints runnable CLI commands. | `worldfoundry-eval tui` / `worldfoundry-tui` |
-| Studio workspace | Browser UI for inference jobs, model-specific parameters, and artifact review. | [`worldfoundry.studio.serving.workspace`](worldfoundry/studio/serving/workspace.py) |
-| Benchmark zoo | Catalogs benchmark manifests, required assets, official runner constraints, and readiness states. | [`worldfoundry/data/benchmarks/catalog`](worldfoundry/data/benchmarks/catalog) |
-| Evaluation runner | Runs model × benchmark cells, imports existing outputs, and writes normalized scorecards. | [`worldfoundry/evaluation`](worldfoundry/evaluation) |
-| Tests | Public CPU inference gate and extended module suites. | [`tests`](tests), [test guide](docs/fumadocs/content/docs/reference/validation.mdx) |
-| Docs | Bilingual Fumadocs site with setup, inference, evaluation, Studio, and maintainer guides. | [`docs/fumadocs`](docs/fumadocs) |
+## Quickstart
-## From Clone To First Run
-
-Choose the install track that matches the work you are doing:
-
-| Track | Use it for | Install |
-| --- | --- | --- |
-| **Lightweight / CPU** | Catalog and CLI inspection, TUI use, docs work, and CPU release checks | An editable pip install with only the required extras, for example `python -m pip install -e ".[tui]"` |
-| **GPU runtime** | CUDA inference, Studio model execution, and GPU-backed benchmark runners | `bash scripts/setup/bootstrap_worldfoundry.sh` |
-
-Optional extras declare Python dependencies but do not select a CUDA-specific
-PyTorch wheel index. Do not treat a bare pip install of a GPU-coupled extra as
-the supported CUDA setup; use the bootstrap/conda track instead. Optional native
-kernels must be built inside the exact target PyTorch environment.
-
-For GPU work, start with the unified environment and use a dedicated
-environment only when a model profile documents an ABI or simulator conflict.
-The full day-one path lives in the
-[Quickstart](https://openenvision.github.io/WorldFoundry/docs/quickstart).
-
-Model demo videos are served from GitHub CDN; docs development does not need `git lfs pull`.
+Clone the repository, create the GPU environment, and launch Studio:
```bash
-# Recommended: skip LFS smudge for a much faster clone
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/OpenEnvision/WorldFoundry.git
-
cd WorldFoundry
bash scripts/setup/bootstrap_worldfoundry.sh
source tmp/worldfoundry_unified_env.sh
conda activate "${WORLDFOUNDRY_UNIFIED_ENV_PREFIX}"
-```
-
-To download local demo video binaries later, install Git LFS and run `git lfs pull` inside the clone.
-
-Checkpoints, datasets, evaluator weights, API keys, and generated artifacts are **not** in git.
-See [Local asset preparation](https://openenvision.github.io/WorldFoundry/docs/guides/local-assets) for cache layout, Hugging Face downloads, non-HF aliases, and benchmark assets.
-
-On modern CUDA 12.8 hosts the installer resolves `worldfoundry-unified-cu128`. Pin a wheel tier only when the host requires it:
-
-```bash
-bash scripts/setup/bootstrap_worldfoundry.sh --cuda cu124
-bash scripts/setup/bootstrap_worldfoundry.sh --cuda cu121
-```
-
-Keep datasets and checkpoints outside the repository on shared machines:
-
-```bash
-bash scripts/setup/bootstrap_worldfoundry.sh \
- --home /path/to/worldfoundry-home \
- --data-root /path/to/worldfoundry-data \
- --model-root /path/to/worldfoundry-models \
- --artifact-root /path/to/worldfoundry-artifacts
-```
-
-Hugging Face models use native Hub loading (`from_pretrained`, `snapshot_download`, `HF_HOME` / `HF_HUB_CACHE`, and `HF_TOKEN` for gated assets). `WORLDFOUNDRY_CKPT_DIR` remains for non-HF checkpoints and compatibility aliases.
-
-Some VLA/action policies need a documented model-specific environment (for example OpenVLA-OFT / CogACT). Embodied simulator benchmarks follow the Docker VLA harness pattern — see the [environment reference](https://openenvision.github.io/WorldFoundry/docs/reference/environments).
-
-After the environment is active:
-
-```bash
-worldfoundry-eval --help
-worldfoundry-eval zoo models --json
-worldfoundry-eval zoo benchmarks --json
-```
-
-### Interactive first path (TUI)
-
-```bash
-python -m pip install -e ".[tui]"
-worldfoundry-eval tui
-# or: worldfoundry-tui
-```
-
-The TUI reads the same catalogs as the CLI and can print a runnable command before anything expensive runs:
-
-```bash
-worldfoundry-eval tui \
- --model-id \
- --benchmark-id \
- --print-command
-```
-
-### Scripted first model run
-
-Prepare assets, then launch a small demo. A common starter is `matrix-game-2` (public HF repo `Skywork/Matrix-Game-2.0`):
-
-```bash
-bash scripts/inference/prepare_model_infer.sh matrix-game-2 --download
-worldfoundry-eval zoo model-download --model-id matrix-game-2 --check-local --json
-
-bash scripts/inference/run_infer.sh --category navigation-video --model matrix-game-2 \
- --output-dir tmp/matrix_game2_first_run
-```
-
-If weights already live in a shared checkpoint tree, link them instead of copying:
-
-```bash
-bash scripts/setup/link_hf_checkpoints.sh \
- --ckpt-dir "${WORLDFOUNDRY_CKPT_DIR}" \
- --hfd-root "${WORLDFOUNDRY_HFD_ROOT}" \
- --hf-hub-cache "${HF_HUB_CACHE}" \
- --default-world
-```
-
-## Run Inference
-
-Prefer the TUI or the documented inference helpers once assets are staged:
-
-```bash
-bash scripts/inference/run_infer.sh --category navigation-video --model matrix-game-2
-
-conda run -p "${WORLDFOUNDRY_UNIFIED_ENV_PREFIX}" \
- bash scripts/inference/run_infer.sh --category navigation-video --model matrix-game-2
-
-bash scripts/inference/run_infer.sh --category video --model
-bash scripts/inference/run_infer.sh --category three_d_four_d --model
-```
-
-CLI-shaped inference (same contract as Studio jobs):
-
-```bash
-python -m worldfoundry.studio.workspace_job infer \
- --model-id \
- --prompt "a cinematic scene, high quality" \
- --output-dir tmp/worldfoundry_infer/ \
- --device cuda
-```
-
-Each successful run should write media, logs, and manifest metadata under the output directory. Treat a file as demo evidence only after visual check and matching runtime-profile assumptions. Details: [Inference guide](https://openenvision.github.io/WorldFoundry/docs/guides/inference).
-
-### Opt-in inference acceleration
-
-Acceleration is request-scoped. Pipelines record the requested backend, the effective backend, and any fallback. The exact path stays the default. The [inference optimization truth matrix](docs/fumadocs/content/docs/guides/inference-optimization.mdx) shows which options have a CPU contract or GPU certification, and which remain pending or rejected.
-
-The following example shows available controls, not a certified combination. Check model-specific compatibility and quality gates before enabling approximate options.
-
-```python
-from worldfoundry.pipelines.wan.pipeline_wan_2p2 import Wan2p2Pipeline
-
-pipe = Wan2p2Pipeline.from_pretrained(
- model_path="/checkpoints/wan22",
- device="cuda",
- offload_mode="resident", # aliases: fast/none; async-block when VRAM is tight
- attention_backend="flash2", # flash2/flash3/sage/sage3/xformers
- quantization={"mode": "fp8"}, # runtime report proves kernel vs dense fallback
- fuse_qkv=True,
- fused_rope=True,
- static_cross_kv=True,
- torch_compile=True,
- teacache=True, # lossy and explicit
- vae_decode_autocast="bf16",
- vae_spatial_tiling=True,
- vae_temporal_chunk_size=4,
-)
-```
-
-**Acceleration options and checks**
-
-- FlashAttention and xFormers are intended as numerically equivalent providers; check the effective backend in the run report.
-- SageAttention, FP8/NVFP4, STA/VSA/VMoBA, pinned LightX2V sparse lanes, TeaCache, and token pruning are approximate. They must pass the target model's quality budget.
-- Missing packages, unsupported GPUs, or unsupported shapes either fall back to a reported exact path or fail closed.
-- Wan2.2 TI2V-5B uses the resident preset by default in Studio on the target H100 path. `block` / `async-block` overlaps the next layer's H2D copy with compute, and is effective only with async copies, no synchronous rescue copies, and at most two CUDA-resident layers.
-- Quantization plus block offload is rejected. Use resident quantization or dense async offload.
-
-**Check a run before citing a speedup**
-
-```bash
-# Sequence-parallel reference, then the multi-rank candidate.
-torchrun --nproc_per_node=1 -m benchmarks.inference.wan22_multigpu_e2e \
- --checkpoint /checkpoints/Wan2.2-TI2V-5B \
- --output-dir benchmarks/results/wan22-sp1 \
- --fused-rope --rope-precision fp64 \
- --save-reference-latents \
- --warmup-runs 1 --measured-runs 3
-
-torchrun --nproc_per_node=4 -m benchmarks.inference.wan22_multigpu_e2e \
- --checkpoint /checkpoints/Wan2.2-TI2V-5B \
- --output-dir benchmarks/results/wan22-sp4 \
- --sp-degree 4 \
- --fused-rope --rope-precision fp64 \
- --warmup-runs 1 --measured-runs 3 \
- --reference-latents benchmarks/results/wan22-sp1/final-latents.pt \
- --reference-video benchmarks/results/wan22-sp1/output.mp4 \
- --fail-on-fallback --profile-collectives
-
-# Adapter overhead must stay within 3% of the direct provider.
-python -m benchmarks.operators.attention_adapter_parity \
- --backend flash2 --strict --out benchmarks/results
-```
-
-The checked-in VMoBA profile is only valid for the default TI2V grid `(31, 22, 40)`. Other frame or spatial shapes need a retuned profile; bad geometry fails closed. Framework A/B numbers need schema v4 on one physical GPU in `Exclusive_Process` mode. Shared H100s in `Default` mode fail that gate, so current timings stay diagnostic. Gate details live in the truth matrix linked above.
-
-## Launch Studio Workspace
-
-Studio is the preferred UI for release validation: model-specific forms, job status, preview media, and artifact links in one place. Start it from the same unified env used for inference:
-
-```bash
-source tmp/worldfoundry_unified_env.sh
-conda activate "${WORLDFOUNDRY_UNIFIED_ENV_PREFIX}"
-
-bash scripts/workspace/run_workspace.sh \
- --host 127.0.0.1 \
- --port 7870 \
- --max-jobs 8
-```
-
-Open `http://127.0.0.1:7870/`. If `python`, **LOAD**, or **START** fails with a missing interpreter, `cv2`, or `libssl`/`libcrypto` error, recreate or verify the env and restart:
-
-```bash
-bash scripts/setup/bootstrap_worldfoundry.sh --verify-only
-source tmp/worldfoundry_unified_env.sh
-bash scripts/workspace/run_workspace.sh
-```
-
-Configure jobs in **Create Job**; optional shared defaults can use `WORLDFOUNDRY_STUDIO_SETTINGS_FILE`. Expensive runtime checks and preview builders are opt-in via `WORLDFOUNDRY_STUDIO_*` — see the [Studio guide](https://openenvision.github.io/WorldFoundry/docs/guides/studio).
-
-Use the **Visualizers** tab as the browser entrypoint for local preview services (World realtime, Spark, Viser, Rerun, Embodied bridge). On a remote machine, forward port `7870` plus any viewer ports you launch.
-
-For a single-model Studio process:
-
-```bash
-worldfoundry-studio
-```
-
-## Run Evaluation
-
-Run evaluation through a runnable benchmark path. Use `official-run` when the evaluator can execute locally; use `official-validation` when you already have official-shaped result files to import.
-
-```bash
-worldfoundry-eval run \
- --model matrix-game-2 \
- --benchmark vbench \
- --mode official-run \
- --output-dir tmp/hello_world_run \
- --json
-```
-
-Inspect:
-
-- `run_manifest.json`: selected model, benchmark/task metadata, timestamps, and output paths.
-- `results.jsonl`: per-sample generation records and artifact metadata.
-- `metrics/summary.json`: aggregate metrics and failed/skipped sample counts.
-- `scorecard.json`: readiness, leaderboard eligibility, metric values, and blockers.
-
-For model and benchmark discovery:
-```bash
-worldfoundry-eval tasks list
-worldfoundry-eval zoo models --json
-worldfoundry-eval zoo benchmarks --json
-worldfoundry-eval zoo model-show --model-id --include-manifest --json
-worldfoundry-eval zoo benchmark-show --benchmark-id --include-spec --json
-```
-
-For existing official-shaped benchmark outputs:
-
-```bash
-worldfoundry-eval zoo benchmark-run --benchmark-id vbench --mode official-validation --official-results-path --generated-artifact-dir --output-dir tmp/benchmark_zoo/official_validation/vbench --json
-```
-
-For existing generated outputs:
-
-```bash
-worldfoundry-eval evaluate --results-path tmp/results.jsonl --output-dir tmp/worldfoundry_evaluate --metric artifact_count --required-artifact video --json
-```
-
-For the formal benchmark inventory, review the expanded plan first:
-
-```bash
-worldfoundry-eval prepare --all-benchmarks --output-dir tmp/worldfoundry_all_benchmarks_plan --json
-
-worldfoundry-eval run --all-benchmarks --model --prepare --data-root cache/worldfoundry/data/hfd_datasets --plan-only --output-dir tmp/worldfoundry_all_benchmarks_plan --json
-```
-
-Use the integrity commands before claiming benchmark support:
-
-```bash
-worldfoundry-eval zoo benchmarks --json
-worldfoundry-eval run --plan-only --json
+bash scripts/workspace/run_workspace.sh --host 127.0.0.1 --port 7870
```
-For release audits, use public CLI surfaces only:
+Open **http://127.0.0.1:7870/** to configure inference jobs and inspect their outputs.
+On a remote GPU machine, forward port `7870`; additional viewer ports are listed in the
+[Studio guide](https://openenvision.github.io/WorldFoundry/docs/guides/studio).
-```bash
-worldfoundry-eval validate-artifact tmp/benchmark-run/scorecard.json \
- --kind scorecard --check-artifacts --json
-```
+Checkpoints, datasets, API keys, and generated artifacts stay outside git.
+Before running a model, prepare its assets using the
+[model page](https://openenvision.github.io/WorldFoundry/docs/guides/supported-models) and
+[local asset guide](https://openenvision.github.io/WorldFoundry/docs/guides/local-assets).
-Contract runs, normalizer-only imports, partial dataset runs, and missing-official-runner checks are not leaderboard evidence. A public claim needs the full official data/runtime path and a scorecard whose eligibility fields explicitly support the claim.
+Prefer the terminal? Run `worldfoundry-eval tui` in the same environment to build a runnable command.
+The [full Quickstart](https://openenvision.github.io/WorldFoundry/docs/quickstart) walks through assets,
+inference, and evaluation.
-## Documentation Site
+## Documentation
-Run the docs locally:
+Browse the documentation in [English](https://openenvision.github.io/WorldFoundry/docs)
+or [中文](https://openenvision.github.io/WorldFoundry/zh/docs).
-```bash
-cd docs/fumadocs
-npm ci
-npm run dev -- --port 8014
-```
-
-Build the static docs from the repository root:
-
-```bash
-bash scripts/docs/build.sh
-```
+| Task | Guide |
+| --- | --- |
+| Choose a model or benchmark | [Models](https://openenvision.github.io/WorldFoundry/docs/guides/supported-models) · [Benchmark Hub](https://openenvision.github.io/WorldFoundry/docs/evaluation/benchmark-hub) |
+| Prepare environments and assets | [Environments](https://openenvision.github.io/WorldFoundry/docs/reference/environments) · [Local assets](https://openenvision.github.io/WorldFoundry/docs/guides/local-assets) |
+| Run inference from the terminal | [Inference](https://openenvision.github.io/WorldFoundry/docs/guides/inference) · [CLI](https://openenvision.github.io/WorldFoundry/docs/reference/cli) |
+| Use the browser workspace | [Studio](https://openenvision.github.io/WorldFoundry/docs/guides/studio) |
+| Tune inference | [Inference optimization](https://openenvision.github.io/WorldFoundry/docs/guides/inference-optimization) |
+| Score generated outputs | [Evaluation](https://openenvision.github.io/WorldFoundry/docs/evaluation) |
+| Validate changes and understand internals | [Validation](https://openenvision.github.io/WorldFoundry/docs/reference/validation) · [Architecture](https://openenvision.github.io/WorldFoundry/docs/maintainers/architecture) |
-The docs app serves English routes under `/docs` and Chinese routes under `/zh/docs`.
+## Contributing
-## Development Checks
+See [CONTRIBUTING.md](CONTRIBUTING.md) for GPU development setup, coding conventions,
+tests, DCO sign-off, and the PR workflow.
Repository [Agent Skills](skills/index.md) provide opt-in workflows for model and
benchmark integration, inference optimization, numerical validation, and maintenance.
Use these checks before opening a PR or marking a model/benchmark ready:
-```bash
-source tmp/worldfoundry_unified_env.sh
-conda activate "${WORLDFOUNDRY_UNIFIED_ENV_PREFIX}"
-
-PYTHONPATH=. python -m compileall -q worldfoundry scripts
-make lint
-make packaging-check
-make docs-check
-bash scripts/docs/build.sh --skip-bootstrap
-
-worldfoundry-eval zoo model-download --model-id --check-local --json
-worldfoundry-eval zoo benchmark-download --benchmark-id --check-local --json
-worldfoundry-eval run --plan-only --fail-on-overclaim --fail-on-stale --json
-```
-
-When adding or changing a model:
-
-1. Port required inference code into `worldfoundry`; do not depend on a cloned external repo at runtime.
-2. Keep official repositories only as provenance or parity references.
-3. Declare checkpoints, runtime variables, and environment assumptions in the model catalog/runtime profile.
-4. Run the smallest official-style demo and visually inspect the artifact.
-5. Record evidence in the docs before promoting readiness.
-
-## Repository Layout
-
-```text
-WorldFoundry
-├─ docs/fumadocs # Documentation site, teaser, screenshots, and demo media
-├─ requirements # Unified and optional dependency presets
-├─ scripts
-│ ├─ inference # User-facing inference entrypoints
-│ ├─ setup # Conda setup wrappers
-│ ├─ workspace # Studio / Workspace launch helpers
-│ └─ docs # Documentation build wrapper
-├─ worldfoundry
-│ ├─ base_models # Shared model components, perception, and 3D/4D runtimes
-│ ├─ core # Shared contracts and reusable runtime abstractions
-│ ├─ data # Model/benchmark catalogs, runtime profiles, fixtures
-│ ├─ evaluation # Runner, tasks, metrics, scorecards, reports
-│ ├─ operators # Input validation, preprocessing, interaction handling
-│ ├─ pipelines # User-facing pipeline wrappers
-│ ├─ runtime # Runtime paths, assets, jobs, and probes
-│ ├─ studio # Workspace and Studio frontends
-│ └─ synthesis # In-tree model synthesis/action-generation runtimes
-├─ thirdparty # Reviewed vendored/native dependencies
-└─ tools # Maintenance and asset utilities
-```
+Community standards and private vulnerability reporting are covered by the
+[Code of Conduct](CODE_OF_CONDUCT.md) and [Security Policy](SECURITY.md).
## Citation
-If you use WorldFoundry or its benchmark/model integrations in research, cite this repository and the upstream methods, checkpoints, datasets, and benchmarks that your run depends on. A formal paper citation will be added when the technical report is released.
+If you use WorldFoundry in research, cite this repository and the upstream methods,
+checkpoints, datasets, and benchmarks that your work depends on.
## Community Policies
@@ -449,13 +141,14 @@ Contributions follow the [Code of Conduct](CODE_OF_CONDUCT.md). Use the
## License
-WorldFoundry-authored code is licensed under the [Apache License 2.0](THIRD-PARTY-NOTICES), except where a file or component carries a different license notice. Vendored and adapted upstream components remain subject to their original licenses.
+WorldFoundry-authored code is licensed under the [Apache License 2.0](LICENSE), except where a file or component carries a different license notice. Vendored and adapted upstream components remain subject to their original licenses, collected in [THIRD-PARTY-NOTICES](THIRD-PARTY-NOTICES).
## Acknowledgment
-WorldFoundry integrates and wraps a large set of upstream world-model, video-generation, perception, reconstruction, and embodied-action projects. See the method-specific runtime profiles and the docs appendix for upstream project pointers and licenses.
+WorldFoundry builds on upstream world-model, video-generation, reconstruction, and embodied-action projects.
+See the model pages and [upstream license guide](https://openenvision.github.io/WorldFoundry/docs/reference/vendored-licenses) for attribution.
-We also thank the following open-source projects for their model, runtime, and evaluation work:
+We also thank:
- [FastVideo](https://github.com/hao-ai-lab/FastVideo) — a unified inference and post-training framework for accelerated video generation
- [OpenWorldLib](https://github.com/OpenDCAI/OpenWorldLib) — a unified codebase for advanced world models
diff --git a/docs/fumadocs/content/docs/guides/inference.mdx b/docs/fumadocs/content/docs/guides/inference.mdx
index 555bd78f0..2d6bdedca 100644
--- a/docs/fumadocs/content/docs/guides/inference.mdx
+++ b/docs/fumadocs/content/docs/guides/inference.mdx
@@ -17,7 +17,7 @@ worldfoundry-eval run \
--output-dir tmp/worldfoundry_infer/
```
-Copy `` and `` from the model page. Inspect the generated artifacts under `tmp/worldfoundry_infer/`. That output is inference evidence only — not benchmark or leaderboard evidence. For checkpoints and cache layout, see [Local assets](/docs/guides/local-assets); for the web workspace, see [Studio](/docs/guides/studio). Run-status labels are in [Run status](/docs/guides/run-status).
+Copy `` and `` from the model page. Inspect the generated artifacts under `tmp/worldfoundry_infer/`. That output is inference evidence only — not benchmark or leaderboard evidence. For checkpoints and cache layout, see [Local assets](/docs/guides/local-assets); for the web workspace, see [Studio](/docs/guides/studio).
## Environment
diff --git a/docs/fumadocs/content/docs/guides/inference.zh.mdx b/docs/fumadocs/content/docs/guides/inference.zh.mdx
index 3f682540c..9a4cb5f90 100644
--- a/docs/fumadocs/content/docs/guides/inference.zh.mdx
+++ b/docs/fumadocs/content/docs/guides/inference.zh.mdx
@@ -17,7 +17,7 @@ worldfoundry-eval run \
--output-dir tmp/worldfoundry_infer/
```
-`` 和 `` 从模型页复制。在 `tmp/worldfoundry_infer/` 下检查生成产物。该产物只是推理证据,不是 benchmark 或 leaderboard 证据。Checkpoint 与 cache 布局见 [本地资产](/zh/docs/guides/local-assets);Web workspace 见 [Studio](/zh/docs/guides/studio)。状态用词见 [运行状态](/zh/docs/guides/run-status)。
+`` 和 `` 从模型页复制。在 `tmp/worldfoundry_infer/` 下检查生成产物。该产物只是推理证据,不是 benchmark 或 leaderboard 证据。Checkpoint 与 cache 布局见 [本地资产](/zh/docs/guides/local-assets);Web workspace 见 [Studio](/zh/docs/guides/studio)。
## 环境
diff --git a/docs/fumadocs/content/docs/guides/meta.json b/docs/fumadocs/content/docs/guides/meta.json
index 30b21edb3..38a5ce420 100644
--- a/docs/fumadocs/content/docs/guides/meta.json
+++ b/docs/fumadocs/content/docs/guides/meta.json
@@ -8,7 +8,6 @@
"interactive-inference",
"inference-optimization",
"diffusion-acceleration",
- "run-status",
"supported-models",
"studio",
"add-model",
diff --git a/docs/fumadocs/content/docs/guides/meta.zh.json b/docs/fumadocs/content/docs/guides/meta.zh.json
index 15c7f5ac1..4aabcbe82 100644
--- a/docs/fumadocs/content/docs/guides/meta.zh.json
+++ b/docs/fumadocs/content/docs/guides/meta.zh.json
@@ -8,7 +8,6 @@
"interactive-inference",
"inference-optimization",
"diffusion-acceleration",
- "run-status",
"supported-models",
"studio",
"add-model",
diff --git a/docs/fumadocs/content/docs/guides/run-status.mdx b/docs/fumadocs/content/docs/guides/run-status.mdx
deleted file mode 100644
index 659cb0a14..000000000
--- a/docs/fumadocs/content/docs/guides/run-status.mdx
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Run status
-description: Reader labels for recorded route evidence. Not raw profile_resolves_* strings.
----
-
-When a model page or catalog note talks about whether a route has been run, use these labels. Do not copy raw `profile_resolves_*` or other `runtime_status` tokens from YAML into docs or tickets as if they were product badges.
-
-- **Verified** — A GPU artifact or official-demo parity record exists for that route. Copy the model-page command and expect the recorded artifact.
-- **Runner parity pending** — An in-tree pipeline or catalog variant resolves, but WorldFoundry has not recorded runner or official-demo parity yet. You can run it; treat outputs as unvalidated.
-- **Static load only** — Checkpoint structure, import, or schema checks passed. That is not a GPU run and not official-demo evidence.
-- **Planned** — Intent and upstream source only. Nothing runnable yet.
-
-Internal strings such as `profile_resolves_catalog_variant_runner_parity_pending` mean **Runner parity pending**. Catalog readiness badges on the [model hub](/docs/guides/supported-models) (Runner verified, Integrated, and the rest) are a separate computed signal; this page does not replace them.
-
-Everyday reproducible commands use `worldfoundry-eval run --pipeline.task-profile …`. See [CLI entrypoints](/docs/reference/cli#entrypoints).
diff --git a/docs/fumadocs/content/docs/guides/run-status.zh.mdx b/docs/fumadocs/content/docs/guides/run-status.zh.mdx
deleted file mode 100644
index 6f5e11d78..000000000
--- a/docs/fumadocs/content/docs/guides/run-status.zh.mdx
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: 运行状态
-description: 已记录路径证据的读者标签。不要直接使用 profile_resolves_* 字符串。
----
-
-模型页或 catalog 说明某条路径有没有跑通时,用下面这些标签。不要把 YAML 里的 `profile_resolves_*` 或其他 `runtime_status` 原样抄进文档或工单,当成产品徽章。
-
-- **Verified** — 该路径已记录 GPU 产物或官方 demo 一致性。复制模型页命令,可以预期得到已记录的 artifact。
-- **Runner parity pending** — 仓内 pipeline 或 catalog variant 能解析,但 WorldFoundry 尚未记录 runner / 官方 demo 一致性。可以跑;输出应视为未验证。
-- **Static load only** — 只通过了 checkpoint 结构、import 或 schema 检查。这不是 GPU run,也不是官方 demo 证据。
-- **Planned** — 只记录了意向和上游来源。目前没有可运行内容。
-
-例如 `profile_resolves_catalog_variant_runner_parity_pending` 应读成 **Runner parity pending**。[模型中心](/zh/docs/guides/supported-models) 上的 catalog 就绪度徽章(Runner verified、Integrated 等)是另一套计算结果;本页不替换它们。
-
-日常可复现命令用 `worldfoundry-eval run --pipeline.task-profile …`。入口对照见 [CLI 命令入口](/zh/docs/reference/cli#命令入口)。
diff --git a/docs/fumadocs/content/docs/maintainers/contributing.mdx b/docs/fumadocs/content/docs/maintainers/contributing.mdx
index d2c4c81a9..c6959bb53 100644
--- a/docs/fumadocs/content/docs/maintainers/contributing.mdx
+++ b/docs/fumadocs/content/docs/maintainers/contributing.mdx
@@ -161,6 +161,45 @@ Python-backed docs codegen and drift checks (`api:*`, `models:*`, `coverage:*`,
`cli:screenshots`) go through `docs/fumadocs/scripts/run-python.sh`. Override the interpreter
with `WF_DOCS_PYTHON` (then `PYTHON`, then `python3` / `python`) when needed.
+## Documentation setup and deployment
+
+The documentation app uses Next.js 16, React 19, Fumadocs, and Tailwind CSS 4.
+Use Node.js 22 (`docs/fumadocs/.nvmrc`), npm, and the unified Python environment.
+From the repository root:
+
+```bash
+npm --prefix docs/fumadocs ci
+npm --prefix docs/fumadocs run dev
+bash scripts/docs/build.sh
+npm --prefix docs/fumadocs start
+```
+
+The development and static-preview servers use `http://localhost:3000`; both
+`/docs` and `/zh/docs` are available. Add `--skip-install` to the build command
+when dependencies are already installed. The build checks types and generated
+data before exporting `docs/fumadocs/out/`.
+
+Inside `docs/fumadocs/`, `app/` owns routes, `components/` shared UI,
+`content/docs/` paired pages, `content/blog/` articles, `mdx/partials/` shared
+prose, `lib/` helpers and catalog data, `public/` assets, and `scripts/` tooling.
+`source.config.ts` configures collections; `next.config.mjs` configures static
+export and caching. `.source/`, `generated/`, `tmp/`, `.next/`, and `out/` are
+generated. Run `api:generate`, `models:generate`, `benchmarks:generate`, or
+`coverage:generate` after changing their inputs, then the matching `*:check`.
+`models:homes:check` validates model pages; `types:check` generates MDX/types
+and checks TypeScript.
+
+`.github/workflows/deploy-docs.yml` publishes the static export on matching
+`main` changes or manual dispatch. Set these values before the deployment build:
+
+| Variable | Official deployment |
+| --- | --- |
+| `NEXT_PUBLIC_BASE_PATH` | `/WorldFoundry`; empty for local development. |
+| `NEXT_PUBLIC_SITE_URL` | `https://openenvision.github.io`. |
+| `NEXT_PUBLIC_DEMO_ASSET_BASE_URL` | GitHub media CDN for `docs/fumadocs/public`. |
+
+Demo videos remain on the CDN rather than in the Pages artifact.
+
## Fast site iteration
Model demo videos are served from GitHub CDN; docs development does not need `git lfs pull`.
diff --git a/docs/fumadocs/content/docs/maintainers/contributing.zh.mdx b/docs/fumadocs/content/docs/maintainers/contributing.zh.mdx
index c3ceb5de7..8c7f1f235 100644
--- a/docs/fumadocs/content/docs/maintainers/contributing.zh.mdx
+++ b/docs/fumadocs/content/docs/maintainers/contributing.zh.mdx
@@ -138,6 +138,43 @@ Fumadocs 是唯一维护的文档面。新增或修改页面时,在 `docs/fuma
`cli:screenshots`)统一经 `docs/fumadocs/scripts/run-python.sh` 调用解释器。需要覆盖时,
解析顺序为 `WF_DOCS_PYTHON`、`PYTHON`、`python3`、`python`。
+## 文档启动与发布
+
+文档应用使用 Next.js 16、React 19、Fumadocs 和 Tailwind CSS 4。
+准备 Node.js 22(见 `docs/fumadocs/.nvmrc`)、npm 和统一 Python 环境。
+在仓库根目录执行:
+
+```bash
+npm --prefix docs/fumadocs ci
+npm --prefix docs/fumadocs run dev
+bash scripts/docs/build.sh
+npm --prefix docs/fumadocs start
+```
+
+开发与静态预览地址均为 `http://localhost:3000`,包含 `/docs` 和 `/zh/docs`。
+依赖已安装时可给构建命令添加 `--skip-install`。构建先检查类型与生成数据,
+再导出至 `docs/fumadocs/out/`。
+
+`docs/fumadocs/` 内,`app/` 管理路由,`components/` 管理共享 UI,
+`content/docs/` 保存双语页面,`content/blog/` 保存文章,`mdx/partials/`
+保存共享正文,`lib/` 保存工具与目录数据,`public/` 保存资源,`scripts/`
+保存工具脚本。`source.config.ts` 配置集合,`next.config.mjs` 配置静态导出与缓存。
+`.source/`、`generated/`、`tmp/`、`.next/` 和 `out/` 为生成目录。
+输入变化后运行 `api:generate`、`models:generate`、`benchmarks:generate` 或
+`coverage:generate`,再运行对应的 `*:check`。`models:homes:check` 检查模型页;
+`types:check` 生成 MDX/类型并检查 TypeScript。
+
+`.github/workflows/deploy-docs.yml` 在匹配的 `main` 变更或手动触发时发布静态站点。
+部署构建前设置:
+
+| 变量 | 官方部署值 |
+| --- | --- |
+| `NEXT_PUBLIC_BASE_PATH` | `/WorldFoundry`;本地开发留空。 |
+| `NEXT_PUBLIC_SITE_URL` | `https://openenvision.github.io`。 |
+| `NEXT_PUBLIC_DEMO_ASSET_BASE_URL` | `docs/fumadocs/public` 对应的 GitHub media CDN。 |
+
+演示视频保留在 CDN,不放入 Pages 产物。
+
## 快速站点迭代
模型演示视频由 GitHub CDN 提供,文档开发不需要执行 `git lfs pull`。
diff --git a/docs/fumadocs/content/docs/quickstart.mdx b/docs/fumadocs/content/docs/quickstart.mdx
index 2e37db2cc..f5184c327 100644
--- a/docs/fumadocs/content/docs/quickstart.mdx
+++ b/docs/fumadocs/content/docs/quickstart.mdx
@@ -15,7 +15,7 @@ This guide walks through the shortest complete path from a clone to a reviewable
Most runs follow the same shape even when the model or benchmark changes: make the Python environment importable, discover stable IDs, prepare only the required checkpoints and benchmark assets, generate artifacts, inspect them, and only then score them.
- You do not need a GPU or model weights to browse catalogs and inspect readiness. Complete environment and discovery checks, read the reported blockers, and stop before asset download if you are only evaluating coverage.
+ Run environment and catalog checks before downloading model weights. Review the reported blockers and prepare only the assets needed for your first GPU run.
## Workflow
@@ -37,10 +37,12 @@ Most runs follow the same shape even when the model or benchmark changes: make t
## Prerequisites
-- **OS:** Linux recommended for GPU inference and most benchmark runners
-- **Install track:** use `python -m pip install -e ".[tui]"` for lightweight CPU catalog/CLI/TUI work; use `bash scripts/setup/bootstrap_worldfoundry.sh` for the CUDA conda runtime. That bootstrap is the official first-clone script; it already calls `scripts/setup/unified_install.sh` to create the unified GPU env, so you do not start from `unified_install.sh` unless you are only refreshing that env. Optional extras do not select a CUDA PyTorch wheel index.
-- **Python:** 3.10+; the GPU path manages it through the WorldFoundry unified conda environment
-- **Optional:** CUDA-capable GPU, Hugging Face token for gated checkpoints
+- **OS:** Linux for the default GPU runtime and most benchmark runners
+- **GPU:** NVIDIA CUDA-capable GPU; model pages specify architecture and VRAM requirements
+- **Driver:** CUDA 12.8+ support for the unified environment
+- **Install:** `bash scripts/setup/bootstrap_worldfoundry.sh` creates the CUDA conda runtime and already calls `scripts/setup/unified_install.sh`. Optional extras do not select a CUDA PyTorch wheel index.
+- **Python:** 3.10–3.13; bootstrap manages the unified environment's interpreter
+- **Authentication:** Hugging Face token only for gated checkpoints
Catalog browsing and readiness inspection work without weights. The expensive path begins only when you choose a concrete model run and download assets.
@@ -145,7 +147,6 @@ Full cache and path conventions are in [Local assets](/docs/guides/local-assets)
Use the TUI when you do not want to remember IDs and flags. It reads the same manifests as the CLI, shows the available choices, and can print the final command before anything expensive runs.
```bash
-python -m pip install -e ".[tui]"
worldfoundry-eval tui
```
@@ -192,7 +193,7 @@ python -m worldfoundry.studio.workspace_job infer \
--device cuda
```
-The full command map is in [CLI](/docs/reference/cli). Run-status labels are in [Run status](/docs/guides/run-status).
+The full command map is in [CLI](/docs/reference/cli).
## 5. Inference
@@ -283,6 +284,5 @@ worldfoundry-eval run \
-
diff --git a/docs/fumadocs/content/docs/quickstart.zh.mdx b/docs/fumadocs/content/docs/quickstart.zh.mdx
index 9931cbb09..301850aae 100644
--- a/docs/fumadocs/content/docs/quickstart.zh.mdx
+++ b/docs/fumadocs/content/docs/quickstart.zh.mdx
@@ -15,7 +15,7 @@ description: 配置环境、准备资产、使用 TUI 或 CLI,然后运行推
换了模型或 benchmark,大多数 run 的形状仍然一样:先让 Python 环境可 import,再发现稳定 ID,只准备必要的 checkpoint 与 benchmark 资产,生成并检查 artifact,最后才对 artifact 打分。
- 浏览 catalog 和检查 readiness 不需要 GPU 或模型权重。如果你只是判断 WorldFoundry 是否覆盖目标系统,可以完成环境与 discovery 检查、阅读 blocker,然后在下载资产之前停止。
+ 下载模型权重前,先检查环境和 catalog,阅读报告中的 blocker,只准备第一次 GPU 运行需要的资产。
## 使用流程
@@ -37,10 +37,12 @@ description: 配置环境、准备资产、使用 TUI 或 CLI,然后运行推
## 前置条件
-- **操作系统:** 推荐 Linux,用于 GPU 推理和大多数 benchmark runner
-- **安装路径:** 轻量 CPU catalog/CLI/TUI 工作使用 `python -m pip install -e ".[tui]"`;CUDA conda runtime 使用 `bash scripts/setup/bootstrap_worldfoundry.sh`。这是文档用户的官方首次 clone 脚本;它已经会调用 `scripts/setup/unified_install.sh` 创建统一 GPU 环境,因此不要从 `unified_install.sh` 起步,除非你只是在刷新该环境。可选 extras 不会自动选择 CUDA PyTorch wheel index。
-- **Python:** 3.10+;GPU 路径由 WorldFoundry 统一 conda 环境管理
-- **可选:** 支持 CUDA 的 GPU、用于 gated checkpoint 的 Hugging Face token
+- **操作系统:** 默认 GPU runtime 和大多数 benchmark runner 使用 Linux
+- **GPU:** 支持 CUDA 的 NVIDIA GPU;具体架构和显存要求见模型页
+- **驱动:** 统一环境需要支持 CUDA 12.8+ 的 NVIDIA 驱动
+- **安装:** `bash scripts/setup/bootstrap_worldfoundry.sh` 创建 CUDA conda runtime,已包含对 `scripts/setup/unified_install.sh` 的调用。可选 extras 不会自动选择 CUDA PyTorch wheel index。
+- **Python:** 3.10–3.13;bootstrap 管理统一环境的解释器
+- **认证:** 仅 gated checkpoint 需要 Hugging Face token
没有权重也可以浏览 catalog 和检查 readiness。只有在你选定具体模型 run 并开始下载资产后,才会进入昂贵路径。
@@ -145,7 +147,6 @@ export HF_TOKEN=
不想记 model ID、benchmark ID 和命令参数时,用 TUI。它读取的就是 CLI 使用的同一套 manifest,会展示可选项,并且可以在真正启动昂贵任务前打印最终命令。
```bash
-python -m pip install -e ".[tui]"
worldfoundry-eval tui
```
@@ -192,7 +193,7 @@ python -m worldfoundry.studio.workspace_job infer \
--device cuda
```
-完整命令说明见 [CLI](/zh/docs/reference/cli)。状态用词见 [运行状态](/zh/docs/guides/run-status)。
+完整命令说明见 [CLI](/zh/docs/reference/cli)。
## 5. 推理
@@ -283,6 +284,5 @@ worldfoundry-eval run \
-
diff --git a/docs/fumadocs/content/docs/reference/cli.mdx b/docs/fumadocs/content/docs/reference/cli.mdx
index fbc19d073..b78f7e37e 100644
--- a/docs/fumadocs/content/docs/reference/cli.mdx
+++ b/docs/fumadocs/content/docs/reference/cli.mdx
@@ -65,7 +65,7 @@ Running `worldfoundry-eval` with no arguments prints a short first-run banner. A
- **`worldfoundry-studio`** — Separate Studio launcher. See the [Studio guide](/docs/guides/studio).
- **`python -m worldfoundry.studio.workspace_job infer`** — Workspace visual smoke (the same job path the Studio UI submits). Not the documented first-run command.
-**Which command.** Everyday reproducible / model-page commands use `worldfoundry-eval run --pipeline.task-profile …`. Use `python -m worldfoundry.studio.workspace_job infer` only for Workspace visual smoke. Run-status labels are in [Run status](/docs/guides/run-status).
+**Which command.** Everyday reproducible / model-page commands use `worldfoundry-eval run --pipeline.task-profile …`. Use `python -m worldfoundry.studio.workspace_job infer` only for Workspace visual smoke.
Examples below use `worldfoundry-eval` so shell history, job scripts, and bug reports share one spelling.
diff --git a/docs/fumadocs/content/docs/reference/cli.zh.mdx b/docs/fumadocs/content/docs/reference/cli.zh.mdx
index 93f942f04..53199c800 100644
--- a/docs/fumadocs/content/docs/reference/cli.zh.mdx
+++ b/docs/fumadocs/content/docs/reference/cli.zh.mdx
@@ -65,7 +65,7 @@ python -m worldfoundry zoo models --json
- **`worldfoundry-studio`** — 独立的 Studio launcher。详见 [Studio 指南](/zh/docs/guides/studio)。
- **`python -m worldfoundry.studio.workspace_job infer`** — Workspace 视觉冒烟(与 Studio UI 提交的是同一条 job 路径)。不是文档里的第一次推理命令。
-**选哪条命令。** 日常可复现 / 模型页命令用 `worldfoundry-eval run --pipeline.task-profile …`。只有 Workspace 视觉冒烟才用 `python -m worldfoundry.studio.workspace_job infer`。状态用词见 [运行状态](/zh/docs/guides/run-status)。
+**选哪条命令。** 日常可复现 / 模型页命令用 `worldfoundry-eval run --pipeline.task-profile …`。只有 Workspace 视觉冒烟才用 `python -m worldfoundry.studio.workspace_job infer`。
下面统一写 `worldfoundry-eval`,便于 shell history、job script 和问题报告保持一致。
diff --git a/docs/fumadocs/content/docs/reference/vendored-licenses.mdx b/docs/fumadocs/content/docs/reference/vendored-licenses.mdx
index b070a8f88..4071189b3 100644
--- a/docs/fumadocs/content/docs/reference/vendored-licenses.mdx
+++ b/docs/fumadocs/content/docs/reference/vendored-licenses.mdx
@@ -3,9 +3,10 @@ title: Third-party notices
description: Where to find the authoritative license and provenance records for in-tree upstream code.
---
-WorldFoundry includes selected upstream inference code and optional native dependencies. Complete license texts, copyright statements, and component restrictions are collected in the root `THIRD-PARTY-NOTICES`; this page provides links to those records.
+WorldFoundry includes selected upstream inference code and optional native dependencies. Repository-level license texts, copyright statements, and component restrictions are collected in the root `THIRD-PARTY-NOTICES`. Required component-specific license files, including the vendored BigVGAN notices, remain with their sources and are declared as package data. This page provides links to the central records.
-- [Licenses and third-party notices](https://github.com/iChubai/WorldFoundry/blob/release/public-inference-20260909/THIRD-PARTY-NOTICES) include WorldFoundry's Apache-2.0 license, upstream terms, model notices, and the consolidated `thirdparty/` license notes. `Original-File` labels identify where each retained text came from.
-- [Upstream provenance](https://github.com/iChubai/WorldFoundry/blob/release/public-inference-20260909/thirdparty/UPSTREAM_PROVENANCE.md) records source repositories and revisions for vendored components.
+- [Project license](https://github.com/OpenEnvision/WorldFoundry/blob/main/LICENSE) contains the Apache-2.0 terms for WorldFoundry-authored code.
+- [Licenses and third-party notices](https://github.com/OpenEnvision/WorldFoundry/blob/main/THIRD-PARTY-NOTICES) include WorldFoundry's Apache-2.0 license, upstream terms, model notices, and the consolidated `thirdparty/` license notes. `Original-File` labels identify where each retained text came from.
+- [Upstream provenance](https://github.com/OpenEnvision/WorldFoundry/blob/main/thirdparty/UPSTREAM_PROVENANCE.md) records source repositories and revisions for vendored components.
-Read the applicable license text and retained source-file notices before redistributing or using a component. Consolidation does not change any component's license or remove distribution restrictions. Model checkpoints and datasets may have separate terms; their catalog entries and upstream release pages identify those sources. Wheels and source distributions include the central notice bundle.
+Read the applicable license text and retained source-file notices before redistributing or using a component. Consolidation does not change any component's license or remove distribution restrictions. Model checkpoints and datasets may have separate terms; their catalog entries and upstream release pages identify those sources. Wheels and source distributions include both the project license and central notice bundle.
diff --git a/docs/fumadocs/content/docs/reference/vendored-licenses.zh.mdx b/docs/fumadocs/content/docs/reference/vendored-licenses.zh.mdx
index e0693724f..0565e5ace 100644
--- a/docs/fumadocs/content/docs/reference/vendored-licenses.zh.mdx
+++ b/docs/fumadocs/content/docs/reference/vendored-licenses.zh.mdx
@@ -3,9 +3,10 @@ title: 第三方许可与来源
description: 查找仓内上游代码的正式许可说明与来源记录。
---
-WorldFoundry 包含部分上游推理代码和可选的原生依赖。完整许可证文本、版权声明和组件使用限制统一放在根目录的 `THIRD-PARTY-NOTICES`;本页提供正式记录的入口。
+WorldFoundry 包含部分上游推理代码和可选的原生依赖。仓库级许可原文、版权声明和组件限制维护在根目录的 `THIRD-PARTY-NOTICES`。上游要求保留的组件许可文件(包括仓内 BigVGAN 声明)仍随源码保存,并在 package data 中声明。本页提供集中记录的入口。
-- [许可证与第三方声明](https://github.com/iChubai/WorldFoundry/blob/release/public-inference-20260909/THIRD-PARTY-NOTICES)包含 WorldFoundry 自身的 Apache-2.0 许可证、上游许可原文、模型声明,以及集中后的 `thirdparty/` 许可说明。`Original-File` 标明每段保留文本的原始来源。
-- [上游来源记录](https://github.com/iChubai/WorldFoundry/blob/release/public-inference-20260909/thirdparty/UPSTREAM_PROVENANCE.md)记录仓内依赖的源码仓库与版本。
+- [项目许可证](https://github.com/OpenEnvision/WorldFoundry/blob/main/LICENSE)包含 WorldFoundry 自有代码的 Apache-2.0 条款。
+- [许可证与第三方声明](https://github.com/OpenEnvision/WorldFoundry/blob/main/THIRD-PARTY-NOTICES)包含 WorldFoundry 自身的 Apache-2.0 许可证、上游许可原文、模型声明,以及集中后的 `thirdparty/` 许可说明。`Original-File` 标明每段保留文本的原始来源。
+- [上游来源记录](https://github.com/OpenEnvision/WorldFoundry/blob/main/thirdparty/UPSTREAM_PROVENANCE.md)记录仓内依赖的源码仓库与版本。
-重新分发或使用组件前,请阅读适用的许可原文和源码中保留的声明。集中整理不改变组件的许可证,也不解除分发限制。模型 checkpoint 与数据集可能另有条款;可从目录条目和上游发布页查找来源。wheel 和源码发行包均包含集中后的许可文件。
+重新分发或使用组件前,请阅读适用的许可原文和源码中保留的声明。集中整理不改变组件的许可证,也不解除分发限制。模型 checkpoint 与数据集可能另有条款;可从目录条目和上游发布页查找来源。wheel 和源码发行包均包含项目许可证和集中的第三方许可文件。
diff --git a/docs/fumadocs/public/models/irasim/overview.png b/docs/fumadocs/public/models/irasim/overview.png
deleted file mode 100644
index cfe1a18c2defb28258883b5ed4042433fa44adf0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 343881
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