VideoScore
Human-feedback-trained video reward metric with in-tree runtime, frame-tree requirements, datasets, and run commands.
On this page
About
VideoScore is an EMNLP 2024 automatic video evaluation model trained to simulate fine-grained human feedback for video generation. It is trained on VideoFeedback, a dataset of 37.6K generated videos from 11 video models with human ratings across multiple aspects.
WorldFoundry integrates the VideoScore inference and benchmark evaluation runtime in tree at worldfoundry/evaluation/tasks/execution/runners/videoscore. The official repository is a protocol reference; WorldFoundry runs the checked-in VideoScore runtime and loads datasets/checkpoints from local assets or Hugging Face.
Official references:
- Project page: tiger-ai-lab.github.io/VideoScore
- Paper: arXiv:2406.15252
- Dataset: TIGER-Lab/VideoFeedback
- Benchmark dataset: TIGER-Lab/VideoScore-Bench
- Model: TIGER-Lab/VideoScore-v1.1
- In-tree runner:
worldfoundry/evaluation/tasks/execution/runners/videoscore/run_videoscore_official_runner.py
Evaluation Protocol
VideoScore predicts five aspect scores on a 1-4 scale:
| Metric | Meaning |
|---|---|
visual_quality | Overall visual quality, fidelity, and artifact level. |
temporal_consistency | Temporal stability and frame-to-frame coherence. |
dynamic_degree | Amount and quality of motion. |
text_to_video_alignment | Alignment between the prompt and generated video. |
factual_consistency | Whether generated content is factually consistent with the described scene. |
videoscore_average | Mean of the five aspect scores. |
WorldFoundry normalizes 1-4 raw scores to 0-1 in the scorecard.
Data And Frames Preparation
VideoScore benchmark evaluation consumes extracted frame directories, not a flat directory of mp4 files. Prepare either:
--frames-dir: a directory already containing frames in the layout expected by the officialeval_videoscore.py, or--bench-data-rootplus--bounded-sample-count: WorldFoundry materializes a bounded set of frames from the local benchmark dataset for a small validation run.
Download benchmark data and optional training/evidence data:
export WORLDFOUNDRY_VIDEOSCORE_BENCH_ROOT=/path/to/datasets/VideoScore-Bench
export WORLDFOUNDRY_VIDEOFEEDBACK_DATASET_ROOT=/path/to/datasets/VideoFeedback
hf download TIGER-Lab/VideoScore-Bench \
--repo-type dataset \
--local-dir "${WORLDFOUNDRY_VIDEOSCORE_BENCH_ROOT}"
hf download TIGER-Lab/VideoFeedback \
--repo-type dataset \
--local-dir "${WORLDFOUNDRY_VIDEOFEEDBACK_DATASET_ROOT}"If you prepare a full frame tree yourself:
export WORLDFOUNDRY_VIDEOSCORE_FRAMES_DIR=/path/to/videoscore/frames--bench-name selects the split inside VideoScore-Bench. The default is video_feedback; other official splits come from the VideoScore-Bench release.
Checkpoint Preparation
Use the official VideoScore-v1.1 reward model or a local mirror:
export WORLDFOUNDRY_VIDEOSCORE_MODEL_REPO=/path/to/checkpoints/VideoScore-v1.1
hf download TIGER-Lab/VideoScore-v1.1 \
--local-dir "${WORLDFOUNDRY_VIDEOSCORE_MODEL_REPO}"If WORLDFOUNDRY_VIDEOSCORE_MODEL_REPO is not set, the runner falls back to the Hugging Face id TIGER-Lab/VideoScore-v1.1.
Run A Full Frame-Tree Evaluation
Run VideoScore on a prepared frame tree:
cd /path/to/WorldFoundry
PYTHONPATH=. "${WORLDFOUNDRY_UNIFIED_PYTHON:-python}" \
worldfoundry/evaluation/tasks/execution/runners/videoscore/run_videoscore_official_runner.py \
--model-repo-name "${WORLDFOUNDRY_VIDEOSCORE_MODEL_REPO:-TIGER-Lab/VideoScore-v1.1}" \
--bench-data-root "${WORLDFOUNDRY_VIDEOSCORE_BENCH_ROOT}" \
--bench-name "${WORLDFOUNDRY_VIDEOSCORE_BENCH_NAME:-video_feedback}" \
--frames-dir "${WORLDFOUNDRY_VIDEOSCORE_FRAMES_DIR}" \
--dataset-root "${WORLDFOUNDRY_VIDEOFEEDBACK_DATASET_ROOT}" \
--output-dir tmp/videoscore/official-run \
--timeout 7200 \
--jsonThis path calls the in-tree benchmark/eval_videoscore.py runtime and writes the official result JSON under upstream/.
Run A Bounded Validation
For a small local check using the downloaded benchmark data:
cd /path/to/WorldFoundry
PYTHONPATH=. "${WORLDFOUNDRY_UNIFIED_PYTHON:-python}" \
worldfoundry/evaluation/tasks/execution/runners/videoscore/run_videoscore_official_runner.py \
--model-repo-name "${WORLDFOUNDRY_VIDEOSCORE_MODEL_REPO:-TIGER-Lab/VideoScore-v1.1}" \
--bench-data-root "${WORLDFOUNDRY_VIDEOSCORE_BENCH_ROOT}" \
--bench-name video_feedback \
--bounded-sample-count 8 \
--dataset-root "${WORLDFOUNDRY_VIDEOFEEDBACK_DATASET_ROOT}" \
--output-dir tmp/videoscore/bounded8 \
--jsonThe bounded path materializes frames for a small number of benchmark rows and runs the same VideoScore normalization pipeline. Use full frame-tree evaluation for benchmark-scale results.
Import Existing Results
Import an existing official-compatible VideoScore result JSON:
PYTHONPATH=. "${WORLDFOUNDRY_UNIFIED_PYTHON:-python}" \
worldfoundry/evaluation/tasks/execution/runners/videoscore/run_videoscore_official_runner.py \
--official-results-path /path/to/eval_video_feedback_videoscore.json \
--dataset-root "${WORLDFOUNDRY_VIDEOFEEDBACK_DATASET_ROOT}" \
--frames-dir "${WORLDFOUNDRY_VIDEOSCORE_FRAMES_DIR}" \
--output-dir tmp/videoscore/imported \
--jsonTraining
The official VideoScore paper trains the reward model using the Mantis training stack and VideoFeedback data. WorldFoundry vendors the inference/evaluation runtime needed for benchmark reproduction. To reproduce VideoScore model training itself, use the official training protocol and then pass your trained model directory with --model-repo-name.
Outputs
Each run writes:
scorecard.json: normalized aspect scores andvideoscore_average.raw_metric_table.jsonl: metric rows used by the scorecard.per_sample_scores.jsonl: per-sample extracted scores when available.generated_video_manifest.json: frame/video manifest for the evaluated artifacts.dataset_manifest.json: discovered dataset metadata.upstream/eval_<bench_name>_videoscore.json: raw official result JSON.upstream_stdout.logandupstream_stderr.log: runtime logs.