Как получить текущий проект DaVinci Resolve через Python
Project Manager, Current Project и проверка активного Timeline перед автоматизацией
Показываем рабочий способ получить открытый проект Resolve и активный Timeline. Этот код нужен перед импортом медиа, чтением настроек таймлайна, экспортом аудио и запуском рендера.
API
Resolve Scripting API
Язык
Python
Resolve
19–20+
Требуется
Запущенный Resolve
Синтаксис
project = resolve.GetProjectManager().GetCurrentProject()Параметры
- • Метод не принимает параметры.
Возвращает
Текущий Project object или None, если проект не открыт.
import os
import sys
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",
"/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
dvr = import_resolve_module()
resolve = dvr.scriptapp("Resolve")
if not resolve:
raise RuntimeError("Resolve API недоступен")
project_manager = resolve.GetProjectManager()
project = project_manager.GetCurrentProject()
if not project:
raise RuntimeError("Нет открытого проекта DaVinci Resolve")
print("Project:", project.GetName())
timeline = project.GetCurrentTimeline()
if timeline:
print("Timeline:", timeline.GetName())
else:
print("В проекте нет активного Timeline")Документация
Что возвращает GetCurrentProject
Метод GetCurrentProject() возвращает проект, который сейчас открыт в интерфейсе DaVinci Resolve. Он не ищет файл на диске и не создаёт новый проект. Поэтому поведение предсказуемое: если проект открыт, вы получаете объект Project; если нет — None.
Почему проверка обязательна
Большинство следующих методов вызывается уже у объекта project: GetMediaPool(), GetCurrentTimeline(), SetRenderSettings(), AddRenderJob(). Если проект не открыт, эти вызовы невозможны. Явная проверка делает скрипт понятным и безопасным для повторного использования.
Активный Timeline
Проект может быть открыт, но активного Timeline может не быть. Это нормальная ситуация для нового проекта. Поэтому пример отдельно проверяет project.GetCurrentTimeline() и не считает отсутствие Timeline критической ошибкой, если текущая задача пока работает только с проектом.
Практическая роль
Такой фрагмент удобно использовать в начале статей и скриптов, которые работают с уже открытым проектом. Он не меняет состояние Resolve, а только получает ссылки на текущие объекты приложения.
Разбор примера
Получаем Project Manager
Resolve хранит операции с проектами в отдельном объекте Project Manager.
Запрашиваем текущий проект
GetCurrentProject() возвращает именно тот проект, который сейчас открыт в интерфейсе Resolve.
Проверяем пустой результат
Если проект не открыт, метод возвращает None. Проверка нужна до любых операций с Timeline или Media Pool.
Получаем Timeline
Активный Timeline проверяется отдельно: проект может быть открыт, но Timeline может отсутствовать.
Особенности Resolve API
- GetCurrentProject() не создаёт проект и не загружает его по имени.
- Для создания проекта используйте ProjectManager.CreateProject().
- GetCurrentTimeline() может вернуть None даже при открытом проекте.
- Перед рендером, чтением FPS или перебором клипов активный Timeline лучше проверять явно.
Частые ошибки
Нет открытого проекта
Причина: Project Manager доступен, но пользователь не открыл проект.
Решение: Откройте проект в Resolve или загрузите его через LoadProject().
Нет активного Timeline
Причина: В проекте нет Timeline или он не выбран.
Решение: Создайте Timeline через Media Pool или выберите существующий Timeline в интерфейсе.
Скрипт работает не с тем проектом
Причина: GetCurrentProject() берёт активный проект из интерфейса.
Решение: Перед запуском проверьте имя проекта или используйте LoadProject() с нужным названием.
Следующий шаг
После получения проекта можно читать Media Pool, Timeline, настройки FPS и Render Queue.
Связанные статьи API
Старт
Как подключиться к DaVinci Resolve через Python API
Разбираем рабочий стартовый шаблон для Python-скрипта: как найти модуль DaVinciResolveScript, получить объект Resolve, проверить версию программы, Project Manager и текущий проект.
Проекты
Как создать проект DaVinci Resolve через Python API
Рабочий пример показывает, как через Project Manager создать проект, не плодить дубликаты и загрузить существующий проект, если CreateProject не создал новый.
Timeline
Как получить FPS Timeline через DaVinci Resolve Python API
Рабочий пример читает FPS активного Timeline, корректно приводит строковое значение к float и использует настройки проекта как запасной источник.

