Как удалить Render Job из очереди через DaVinci Resolve Python API
DeleteRenderJob, разные форматы job id и аккуратная очистка одного задания
Показываем практический способ удалить конкретное задание из Render Queue, учитывая что Resolve может возвращать job id строкой, числом или словарем.
API
Resolve Scripting API
Язык
Python
Resolve
19–20+
Требуется
Запущенный Resolve
Синтаксис
result = api_method()Параметры
- • Параметры зависят от конкретного метода Resolve Scripting API и показаны в рабочем примере.
Возвращает
Возвращаемое значение нужно проверять перед следующим шагом автоматизации.
import os
import sys
import time
from pathlib import Path
def import_resolve_module():
try:
import DaVinciResolveScript as dvr
return dvr
except ImportError:
search_paths = [
os.environ.get("RESOLVE_SCRIPT_API", ""),
os.environ.get("RESOLVE_MODULES", ""),
r"C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\Developer\Scripting\Modules",
"/opt/resolve/Developer/Scripting/Modules",
"/opt/BlackmagicDesign/DaVinciResolve/Developer/Scripting/Modules",
"/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/Modules",
str(Path.home() / "Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/Modules"),
]
for path in search_paths:
if path and os.path.isdir(path) and path not in sys.path:
sys.path.append(path)
import DaVinciResolveScript as dvr
return dvr
def safe_call(obj, name, *args, **kwargs):
try:
fn = getattr(obj, name, None)
if callable(fn):
return fn(*args, **kwargs)
except Exception:
return None
return None
def get_project_and_timeline():
dvr = import_resolve_module()
resolve = dvr.scriptapp("Resolve")
if not resolve:
raise RuntimeError("DaVinci Resolve API недоступен")
project_manager = safe_call(resolve, "GetProjectManager")
project = safe_call(project_manager, "GetCurrentProject") if project_manager else None
if not project:
raise RuntimeError("Нет открытого проекта DaVinci Resolve")
timeline = safe_call(project, "GetCurrentTimeline")
if not timeline:
raise RuntimeError("Нет активного Timeline")
return resolve, project, timeline
def extract_render_job_id(job):
if isinstance(job, dict):
return (
job.get("JobId")
or job.get("jobId")
or job.get("JobID")
or job.get("Id")
or job.get("id")
)
return job
def delete_render_job(project, raw_job):
job_id = extract_render_job_id(raw_job)
variants = []
if job_id is not None:
variants.extend([job_id, str(job_id)])
try:
variants.append(int(job_id))
except Exception:
pass
variants.append(raw_job)
seen = set()
for value in variants:
marker = repr(value)
if marker in seen:
continue
seen.add(marker)
if safe_call(project, "DeleteRenderJob", value):
return True
return False
resolve, project, timeline = get_project_and_timeline()
safe_call(project, "StopRendering")
jobs = safe_call(project, "GetRenderJobs") or safe_call(project, "GetRenderJobList") or []
for job in jobs:
print("delete", extract_render_job_id(job), delete_render_job(project, job))
Документация
Что делает пример
Код получает список заданий, достает id из каждого job и пробует удалить его несколькими вариантами значения. Это повторяет практический подход для разных версий Resolve API.
Почему используется несколько вариантов
Иногда API возвращает строковый id, иногда число, иногда словарь с полями JobId или Id. DeleteRenderJob тоже может принимать не все варианты. Поэтому функция перебирает только безопасные формы одного и того же задания.
Чем отличается от полной очистки
Этот пример показывает удаление конкретных jobs. Полная очистка очереди обычно строится поверх него: получить список, пройти по каждому элементу и удалить все задания.
Разбор примера
Подключение к Resolve
Пример начинает работу с подключения к запущенному DaVinci Resolve через официальный Python-модуль.
Проверка проекта
Перед вызовами Media Pool, Timeline или Render Queue код проверяет наличие открытого проекта.
Вызов метода API
Основной блок выполняет задачу статьи: как удалить render job из очереди через davinci resolve python api.
Проверка результата
После вызова API результат проверяется, чтобы скрипт не продолжал работу с пустым объектом или не созданной задачей.
Особенности Resolve API
- Перед удалением активного задания лучше вызвать StopRendering().
- Не полагайтесь только на одно имя поля JobId.
- После удаления перечитайте GetRenderJobs(), чтобы убедиться, что очередь изменилась.
- Если DeleteRenderJob не сработал, запускайте новые jobs только по конкретному id.
Частые ошибки
Resolve API недоступен
Причина: Приложение не запущено или Python не видит DaVinciResolveScript.
Решение: Запустите Resolve и проверьте путь к Developer/Scripting/Modules.
Метод вернул None или False
Причина: В Resolve нет нужного проекта, Timeline, клипов, preset или доступа к папке.
Решение: Проверьте входные данные и добавьте явную проверку результата после каждого важного вызова API.
Скрипт работает только на одной машине
Причина: Пути к файлам или папкам Resolve зашиты под конкретную систему.
Решение: Вынесите пути в переменные и добавьте стандартные пути Windows, Linux и macOS.
Следующий шаг
Следующий шаг зависит от задачи: импорт медиа, создание Timeline или запуск рендера.
Связанные статьи API
Render
Как очистить Render Queue в DaVinci Resolve через Python API
Показываем рабочий подход к очистке очереди рендера: получить список задач, извлечь job id и удалить старые Render Jobs перед созданием новой задачи.
Render
Как остановить рендер через DaVinci Resolve Python API
Разбираем безопасный вызов StopRendering и проверку IsRenderingInProgress, чтобы остановить активный экспорт перед изменением Render Queue.
Render
Как запустить один Render Job через DaVinci Resolve Python API
Рабочий пример показывает, как запускать только свежий Render Job и не трогать старые задания, которые могли остаться в Render Queue.

