← Все статьи DaVinci Resolve API
DaVinci Resolve APIНовичокПроекты

Как получить текущий проект 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, если проект не открыт.

Полный рабочий пример Pythonкод можно использовать как основу скрипта
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, а только получает ссылки на текущие объекты приложения.

Разбор примера

1

Получаем Project Manager

Resolve хранит операции с проектами в отдельном объекте Project Manager.

2

Запрашиваем текущий проект

GetCurrentProject() возвращает именно тот проект, который сейчас открыт в интерфейсе Resolve.

3

Проверяем пустой результат

Если проект не открыт, метод возвращает None. Проверка нужна до любых операций с Timeline или Media Pool.

4

Получаем 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