File size: 1,559 Bytes
1cdb3b1
 
f0b4ccd
 
 
1cdb3b1
 
 
 
 
 
 
 
 
b82cf78
 
 
 
1cdb3b1
b82cf78
 
 
1cdb3b1
b82cf78
 
 
 
1cdb3b1
b82cf78
f0b4ccd
b82cf78
 
f0b4ccd
b82cf78
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
---
base_model: Qwen/Qwen3-VL-4B-Instruct
license: apache-2.0
library_name: transformers
pipeline_tag: video-text-to-text
tags:
- camera-movement
- video-understanding
- qwen3-vl
- distillation
---

# CamDistill-4B

Camera-movement understanding model trained with **Camera Token Distillation** on top of
`Qwen/Qwen3-VL-4B-Instruct`. A lightweight Camera Token Module learns geometry-aware camera
tokens (distilled from VGGT) and injects them into the language model. Given a video, it outputs
structured JSON describing every camera-movement segment.

- **Paper**: [Temporally Grounded Compositional Camera Motion Understanding via Geometric Knowledge Distillation](https://huggingface.co/papers/2608.10932)
- **Project page**: https://ddz16.github.io/cammotion.github.io
- **Code**: https://github.com/ddz16/CamDistill

> ⚠️ **This model cannot be loaded with plain 🤗 Transformers.** It contains an extra Camera Token
> Module and a patched forward pass. Loading it as a standard `Qwen3VLForConditionalGeneration`
> would silently drop those weights and produce incorrect results. Use the CamDistill repo, which
> registers the required custom model type through a plugin.

## Usage

Clone the [CamDistill repo](https://github.com/ddz16/CamDistill), then run (camera tokens are generated internally — **no online
VGGT required**):

```bash
python camera_movement_sft/infer_single.py \
    --model ddz16/CamDistill-4B \
    --video /path/to/video.mp4 \
    --variant camdistill
```

See the repo's README for environment setup and batch evaluation.