---
title: scope-camera-video-generation
canonical_url: "https://www.modelscope.cn/studios/TencentARC/scope-camera-video-generation"
md_url: "https://www.modelscope.cn/studios/TencentARC/scope-camera-video-generation.md"
repository: TencentARC/scope-camera-video-generation
chinese_name: "SCoPE Camera Controlled Video"
last_updated: 2026-08-19
sdk_type: gradio
sdk_version: 6.17.3
downloads: 0
stars: 37
---

# scope-camera-video-generation

> scope-camera-video-generation - TencentARC 在 ModelScope 创建的在线 Demo。SCoPE 相机轨迹可控图生视频，基于Modelscope创空间

TencentARC/scope-camera-video-generation 是 ModelScope 魔搭社区上的在线可交互 Demo（创空间），基于 gradio 6.17.3 构建，中文名为「SCoPE Camera Controlled Video」。

- **Repository**: TencentARC/scope-camera-video-generation
- **SDK**: gradio
- **SDK version**: 6.17.3
- **Downloads**: 0
- **Stars**: 37
- **Last updated**: 2026-08-19

Source: https://www.modelscope.cn/studios/TencentARC/scope-camera-video-generation

---

# SCoPE — camera-trajectory controlled image-to-video

> ModelScope migration of the upstream
> [TencentARC Hugging Face Space](https://huggingface.co/spaces/TencentARC/scope-camera-video-generation),
> source revision `a7a8de0926e5c76cf66d91ecb7a03be5d942ae9f`. See
> [UPSTREAM.md](UPSTREAM.md) for provenance and migration details.

[TencentARC/SCoPE](https://modelscope.cn/models/TencentARC/SCoPE) retrofits **Wan2.2-I2V-A14B**
with *Sightline-Coordinate Positional Encoding*: Plücker camera rays are normalised, gated and
injected directly into the DiT's self-attention queries and keys, so an explicit 3D camera path
steers the generated shot. Give it a first frame and a camera move, and it returns an 81-frame,
832×480, 16 fps clip. A caption is used for the scene content; if you leave it blank, a small
vision-language model (`Qwen/Qwen2-VL-2B-Instruct`) writes one from your first frame automatically.

* Paper / project page: <https://visual-ai.github.io/scope/>
* Reference code: <https://github.com/TencentARC/SCoPE>

## What this Studio runs

The app uses SCoPE's **own** code (`scope/`) and its vendored DiffSynth-Studio pipeline
(`diffsynth/`, restored to the v1.1.8 modules the release was cut against), driven exactly as
`scope/inference.py` does: `pipe(prompt=…, input_image=…, camera_control_panshot={pose, x_fov, xi},
height=480, width=832, num_frames=81, sigma_shift=5.0, switch_DiT_boundary=0.9,
camera_cfg_scale=1.0, lock_first_frame=False, tiled=False)`.

Camera paths are OpenCV **camera-to-world** matrices of shape `[81, 3, 4]`, expressed relative to
the first frame, which is the format SCoPE was trained on. The 16 presets in `trajectories/` are
taken from the release's own `examples/` trajectory set (re-expressed relative to frame 0), and the
"camera motion scale" slider rescales only their translation component. Every preset carries a real
translation; pure in-place rotations were dropped because their effect is hard to see.

## Deviations from the reference configuration

The full 67 GB checkpoint at the paper's sampling settings (40 steps, `cfg_scale=3.5`) needs several
minutes of GPU per clip. To fit a shared 48 GB xGPU, this Studio:

1. Serves both 14B experts in **fp8** (`torchao`, `Float8DynamicActivationFloat8WeightConfig`) and
   the UMT5-XXL text encoder in int8. SCoPE's Plücker/gate MLPs are deliberately left in bf16.
2. Fuses the **[Wan2.2-Lightning](https://modelscope.cn/models/lightx2v/Wan2.2-Lightning) 4-step
   distillation LoRA** (`Wan2.2-I2V-A14B-4steps-lora-rank64-Seko-V1`, strength 1.0) into both
   experts and samples 4 steps at `cfg_scale = 1.0`, per the LoRA's reference workflow
   (shift 5, split 2+2 — which is what `switch_DiT_boundary = 0.9` produces).
3. Streams the checkpoint shard by shard from the same-ID ModelScope repositories, deleting each
   file once its tensors are quantised, so the 71 GB download never has to exist on disk at once.
4. Uses spatial VAE tiling for the 81-frame conditioning encode and final decode to stay within the
   44.64 GiB actually exposed by the 48 GB xGPU runtime.
5. Serializes GPU inference because the vendored Wan VAE keeps mutable temporal caches; examples
   only populate the controls and never launch hidden background generations.
6. Keeps the large DiT projections quantised to fp8 while casting Q/K/V activations to bf16 at the
   FlashAttention boundary, whose CUDA kernels do not accept fp8 inputs.
7. Persists the fused+quantised fp8 state dict of each expert below `/mnt/workspace` after the
   first cold start (`scope-fp8-cache/`), so later restarts skip the shard downloads, LoRA fusion
   and re-quantisation. The cache is keyed by `FP8_CACHE_VERSION` and validated by key set.

The model cache is stored below `/mnt/workspace`, so subsequent restarts can reuse the persistent
ModelScope cache. No Hugging Face token or other Secret is required.

Expect slightly softer detail and less prompt adherence than the official 40-step samples; camera
control itself is architectural and unaffected by the shorter schedule.

## Credits

Model, code and example images © the SCoPE authors (Apache-2.0). The showcase images in
`examples/` are drawn from the SCoPE release: three AI-generated scenes, one iStock aerial clip
(rice-field motorbike), and two OmniWorld character scenes (kept in their own "with characters"
group). Automatic prompting uses
[`Qwen/Qwen2-VL-2B-Instruct`](https://modelscope.cn/models/Qwen/Qwen2-VL-2B-Instruct)
(Apache-2.0).
