Same-step state editing for interruptible world models.
Paper: ActionSplice: In-Flight Action Editing for Interactive World Models
Project page: pardistaghavi.github.io/actionsplice-website
ActionSplice updates an active world-model rollout when the control input changes before the current video chunk has finished sampling. Waiting delays the response, directly switching the conditioning leaves the intermediate solver state shaped by the previous action, and restarting repeats completed computation. A learned Counterfactual State Transport (CST) corrector moves the interrupted solver state toward the matched counterfactual state at the same solver step, then lets the frozen backbone and sampler finish the normal trajectory without replaying completed evaluations.
ActionSplice provides two separately trained correctors:
| Variant | Edited region | Intended use |
|---|---|---|
| CST-R | Complete active chunk | Retarget a chunk after a control interruption |
| CST-T | Temporal suffix at boundary m |
Preserve the temporal prefix at the intervention step and correct only the suffix |
| Backend | Native state | Corrector input | Corrector target | Same-step reconstruction |
|---|---|---|---|---|
| minWM Wan Action2V | [B,T,16,H,W] |
[B,T,16,H,W] |
Clean prediction | Stored transition noise |
| HY-WM1.5 | [B,32,T,H,W] |
[B,T,32,H,W] |
Direct Euler state | None; deterministic resume |
git clone https://github.com/PardisTaghavi/ActionSplice.git
cd ActionSplice
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev]'
pytestOptional dependencies are grouped by workflow:
python -m pip install -e '.[train]'
python -m pip install -e '.[inference]'ActionSplice integrates with upstream repositories rather than redistributing their code or weights. Prepare pinned source checkouts with:
bash scripts/prepare_backends.shNote
minWM and HY-WorldPlay have independent dependency stacks. Use a separate
Python environment for each backend and install that upstream repository's
requirements there. ActionSplice's inference extra supplies only the shared
client-side dependencies.
Pinned revisions and licensing notes are recorded in THIRD_PARTY.md.
Choose one backend-specific configuration:
| Backend | CST-R | CST-T |
|---|---|---|
| minWM | configs/minwm/train_cst_r.json |
configs/minwm/train_cst_t.json |
| HY-WM1.5 | configs/hyworld15/train_cst_r.json |
configs/hyworld15/train_cst_t.json |
Replace the <PATH_TO_...> values in a copied configuration, then train one
corrector:
actionsplice-train \
--capture-dir /path/to/captures \
--output-dir outputs/minwm-cst-r \
--config configs/minwm/train_cst_r.jsonResume an interrupted run with --resume /path/to/checkpoint.pt.
The training code preserves the research objectives already used by the project: normalized state reconstruction, the minWM clean-prediction delta, suffix-masked CST-T reconstruction, the CST-T intra-chunk boundary term, and optional decoded LPIPS/temporal/boundary terms. Repository cleanup did not introduce new losses.
All loss coefficients are configurable through the loss_weights block. Its
defaults reproduce the current HY-WM1.5 objective; the minWM configurations
override the residual coefficient. See the training guide for the complete
lambda schema.
Capture commands, manifest formats, split checks, and backend-specific examples are documented in docs/training.md.
The repository contains no backbone or corrector checkpoints. Use a local checkpoint path with the commands below.
Local corrector checkpoints can be loaded independently of the backbone:
from pathlib import Path
import torch
from cst.backends import get_backend
from cst.core.runtime import load_transport_model
corrector, metadata = load_transport_model(
Path("checkpoints/hyworld15-cst-r/best.pt"),
device=torch.device("cuda"),
dtype=torch.bfloat16,
)
get_backend("hyworld15").validate_checkpoint_config(
metadata["model_config"], method="cst_r"
)The loader validates checkpoint structure and role; the backend validation checks the target type, latent-channel count, solver length, and selected method. Load the upstream backbone separately under its original license.
Backend-specific commands run both variants end to end from a small rollout configuration:
actionsplice-infer-minwm \
--method cst_r \
--task-config configs/inference/minwm_cst_r.example.json \
--minwm-root /path/to/minWM \
--transport-checkpoint /path/to/minwm-cst-r.pt \
--output outputs/minwm-cst-r.mp4
actionsplice-infer-hyworld15 \
--method cst_t \
--task-config configs/inference/hyworld15_cst_t.example.json \
--reference-image /path/to/reference.png \
--hyworld-root /path/to/HY-WorldPlay \
--model-path /path/to/HunyuanVideo-1.5 \
--action-checkpoint /path/to/action/checkpoint.safetensors \
--transport-checkpoint /path/to/hyworld15-cst-t.pt \
--output outputs/hyworld15-cst-t.mp4ActionSplice/
├── src/cst/
│ ├── backends/ minWM/HY adapters and shared backend registry
│ ├── core/ corrector model, state layouts, same-step runtime
│ ├── data/ capture schemas, datasets, partitions, manifests
│ ├── training/ shared corrector training loop and losses
│ └── cli/ capture, manifest, training, and inference commands
├── configs/
│ ├── minwm/ minWM CST-R/CST-T capture and training configs
│ ├── hyworld15/ HY CST-R/CST-T capture and training configs
│ └── inference/ runnable single-rollout CST-R/CST-T examples
├── docs/ training, inference, and model loading guides
├── scripts/ pinned upstream setup
└── tests/ CPU unit tests
The distribution is named actionsplice; the import package remains cst
because CST is the framework's core operation. cst.backends is the shared
backend boundary and keeps upstream imports lazy.
Checkpoint naming compatibility
Research checkpoints retain legacy role strings for strict validation:
| Public method | minWM role | HY-WM1.5 role |
|---|---|---|
| CST-R | action_h0 |
action_h0_state |
| CST-T | action_hm |
action_hm_state |
Public commands, files, and documentation use CST-R/CST-T.
If you use ActionSplice, please cite:
@article{taghavi2026actionsplice,
title={ActionSplice: In-Flight Action Editing for Interactive World Models},
author={Taghavi, Pardis and Guo, Tingyu and Lossner, Jonas and Pandey, Gaurav and Langari, Reza},
journal={arXiv preprint arXiv:2609.08230},
year={2026}
}ActionSplice is released under the Apache License 2.0.
Contributions are welcome; see CONTRIBUTING.md for the development and pull-request workflow.
