| set -Eeuo pipefail | |
| JOBDIR="$1" | |
| LAUNCHER="$2" | |
| TASK="$3" | |
| PROMPT="$4" | |
| RESOLUTION="$5" | |
| FRAMES="$6" | |
| STEPS="$7" | |
| SEED="$8" | |
| IMAGE="${9:-}" | |
| status(){ | |
| python3 - "$JOBDIR/status.json" "$1" "$2" "${3:-}" <<'PY' | |
| import json, sys, time | |
| from pathlib import Path | |
| p=Path(sys.argv[1]) | |
| data={"status":sys.argv[2],"message":sys.argv[3],"updated_at":time.time()} | |
| if len(sys.argv)>4 and sys.argv[4]: | |
| data["video"]=sys.argv[4] | |
| p.write_text(json.dumps(data,ensure_ascii=False,indent=2),encoding="utf-8") | |
| PY | |
| } | |
| status running "generation started" | |
| OUT="$JOBDIR/worker.log" | |
| set +e | |
| if [[ "$TASK" == "t2v" ]]; then | |
| "$LAUNCHER" t2v "$PROMPT" "$RESOLUTION" "$FRAMES" "$STEPS" "$SEED" "" "" >"$OUT" 2>&1 | |
| else | |
| "$LAUNCHER" i2v "$PROMPT" "$RESOLUTION" "$FRAMES" "$STEPS" "$SEED" "$IMAGE" "" >"$OUT" 2>&1 | |
| fi | |
| RC=$? | |
| set -e | |
| if [[ "$RC" -ne 0 ]]; then | |
| status failed "launcher rc=$RC" | |
| exit "$RC" | |
| fi | |
| VIDEO="$(sed -n 's/^VIDEO=//p' "$OUT" | tail -n1)" | |
| [[ -f "$VIDEO" ]] || { status failed "launcher passed but video missing"; exit 90; } | |
| status completed "generation completed" "$VIDEO" | |