Files
VFXProxy/jobs.py
T
twotalesanimation 1a2ece6f12 Initial Commit
2026-07-04 15:54:19 +02:00

62 lines
2.5 KiB
Python

"""
jobs.py — Build and serialise the jobs.json payload passed to process.py.
The jobs file is the sole interface between the GUI/host Python environment
and the Nuke Python environment. Keeping it as plain JSON means process.py
has no dependency on this project's other modules.
"""
from __future__ import annotations
import json
from pathlib import Path
from parser import Shot
# ──────────────────────────────────────────────────────────────────────────────
# Public API
# ──────────────────────────────────────────────────────────────────────────────
def build_jobs_payload(shots: list[Shot], template_script: str) -> dict:
"""Return the dict that will be serialised to jobs.json.
Parameters
----------
shots:
Shots selected for rendering.
template_script:
Absolute path to the Nuke template (.nk) file.
"""
return {
"template_script": Path(template_script).as_posix(),
"jobs": [_shot_to_job(s) for s in shots],
}
def write_jobs_file(payload: dict, path: str) -> None:
"""Write *payload* to *path* as indented JSON."""
with open(path, "w", encoding="utf-8") as fh:
json.dump(payload, fh, indent=2)
def read_jobs_file(path: str) -> dict:
"""Read and return the jobs payload from *path*."""
with open(path, encoding="utf-8") as fh:
return json.load(fh)
# ──────────────────────────────────────────────────────────────────────────────
# Internal helpers
# ──────────────────────────────────────────────────────────────────────────────
def _shot_to_job(shot: Shot) -> dict:
return {
"basename": shot.basename,
"input_sequence": shot.input_sequence,
"first_frame": shot.first_frame,
"last_frame": shot.last_frame,
"output_folder": shot.output_folder,
"output_movie": shot.output_movie,
"output_exr": shot.output_exr,
}