| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| cd "$ROOT_DIR" |
|
|
| GPU="${GPU:-0}" |
| PYTHON_BIN="${PYTHON_BIN:-python}" |
| CONFIG_PATH="${CONFIG_PATH:-configs/self_forcing_dmd.yaml}" |
| CHECKPOINT_PATH="${CHECKPOINT_PATH:-checkpoints/self_forcing_dmd.pt}" |
| OUTPUT_FOLDER="${OUTPUT_FOLDER:-videos/self_forcing_dmd}" |
| NUM_OUTPUT_FRAMES="${NUM_OUTPUT_FRAMES:-21}" |
| NUM_SAMPLES="${NUM_SAMPLES:-1}" |
| SEED="${SEED:-0}" |
|
|
| PROMPT="${PROMPT:-A cinematic shot of a stylish woman walking down a neon-lit Tokyo street at night, reflections shimmering on the wet pavement, natural body motion, detailed background, smooth camera movement.}" |
| DATA_PATH="${DATA_PATH:-}" |
|
|
| if [[ -z "$DATA_PATH" ]]; then |
| DATA_PATH="$OUTPUT_FOLDER/prompts.txt" |
| mkdir -p "$OUTPUT_FOLDER" |
| printf '%s\n' "$PROMPT" > "$DATA_PATH" |
| fi |
|
|
| for required_path in "$CONFIG_PATH" "$CHECKPOINT_PATH" "$DATA_PATH"; do |
| if [[ ! -f "$required_path" ]]; then |
| echo "错误:找不到所需文件:$required_path" >&2 |
| exit 1 |
| fi |
| done |
|
|
| if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then |
| echo "错误:找不到 Python 命令:$PYTHON_BIN" >&2 |
| echo "请先激活 Self-Forcing 环境,或通过 PYTHON_BIN 指定 Python。" >&2 |
| exit 1 |
| fi |
|
|
| mkdir -p "$OUTPUT_FOLDER" |
|
|
| echo "DMD 推理配置:" |
| echo " GPU: $GPU" |
| echo " Config: $CONFIG_PATH" |
| echo " Checkpoint: $CHECKPOINT_PATH" |
| echo " Prompts: $DATA_PATH" |
| echo " Output: $OUTPUT_FOLDER" |
|
|
| CUDA_VISIBLE_DEVICES="$GPU" "$PYTHON_BIN" inference.py \ |
| --config_path "$CONFIG_PATH" \ |
| --checkpoint_path "$CHECKPOINT_PATH" \ |
| --data_path "$DATA_PATH" \ |
| --output_folder "$OUTPUT_FOLDER" \ |
| --num_output_frames "$NUM_OUTPUT_FRAMES" \ |
| --num_samples "$NUM_SAMPLES" \ |
| --seed "$SEED" \ |
| --use_ema \ |
| --save_with_index |
|
|