ВИДЕОМОНТАЖЁРDAVINCI RESOLVE · ВИДЕО · AI

RESOLVE API / FIELD GUIDE / 01

Как подключиться к DaVinci Resolve через Python API

Сначала получите объект приложения. Проект и таймлайн — следующие, отдельные проверки.

Настройка внешнего Python для Resolve Studio: официальный модуль, пути Windows/macOS/Linux, проверка продукта и версии. Без открытия проекта, скрытых повторов и установки случайного пакета из pip.

НА ВЫХОДЕ

Получить название и версию запущенного Resolve — без изменения рабочего проекта.

PYTHON / RESOLVEУЧЕБНАЯ МОДЕЛЬ
01python connect_resolve.py

Запускайте пример из того же окружения, из которого затем будет работать автоматизация. Скрипт сайта ничего не запускает сам.

ПРОВЕРКА

Зафиксированы Python и архитектура.

Переключатели меняют объяснение. Ничего не подключается к Resolve и не запускается на вашем компьютере.

01 / BEFORE THE CODE

До кода — условия запуска.

01

Запущенный Resolve Studio

Основной маршрут — внешний локальный Python и настольная Studio. В релизе 21.1 Blackmagic относит Python scripting к Studio; прежний опыт с Free не подтверждает текущую совместимость. Не используйте Fusion-подключение как обход ограничения редакции.

02

Python и библиотека одной установки

Для синтаксиса этих примеров нужен Python 3.8 или новее. Отдельно нужны совместимые 64-битные Python и native-библиотека Resolve. Номер Python, архитектуру и ограничения сверяйте с README своей установки. Наличие Python 3 само по себе не гарантирует загрузку бинарного модуля.

03

Локальный доступ, без сети

Для внешнего скрипта проверьте Preferences → System → General → External scripting using → Local, если этот пункт есть в вашей версии. Network не нужен для примеров на этом компьютере. Не повышайте права процесса до администратора как универсальное исправление.

Ориентируйтесь на актуальные требования Studio и документацию установленной версии, а не на старые инструкции для консоли или Free.[1][4][3]

02 / API CONTRACT

Какой объект. Какой метод. Какой результат.

Модуль Blackmagicscriptapp("Resolve")
Вход
Имя приложения: строка "Resolve".
Возвращает
Объект Resolve; пустой результат обрабатываем как недоступность.
Проверить
Не вызывать последующие методы, пока объект не получен.
ResolveGetProductName()
Вход
Без аргументов.
Возвращает
Название продукта.
Проверить
Сравнить с запущенной редакцией, не угадывать по имени файла.
ResolveGetVersionString()
Вход
Без аргументов.
Возвращает
Строка версии приложения.
Проверить
Сохранить полную строку, включая build; не сравнивать версии лексикографически.

Контракты методов Resolve описаны Blackmagic; Python и авторские helper обозначены отдельно. Дополнительные проверки — устройство наших примеров. Непустой объект не доказывает совместимость всего API.[3]

03 / UNDERSTAND

Что именно мы подключаем

Python обращается к модулю Blackmagic, тот загружает native-компонент scripting и получает объект уже запущенного Resolve. Это локальная интеграция приложения, а не REST-запрос к сайту и не установка нейросети. MCP использует другой способ передачи команд; для первого Python-примера он не нужен.

Разделяйте три независимых вопроса: найден ли Python-файл, удалось ли загрузить его зависимости и вернуло ли приложение объект Resolve. Успех предыдущего шага не доказывает следующий. Именно поэтому пример подключения не требует ни проекта, ни таймлайна.[3]

04 / UNDERSTAND

Пути: Scripting, Modules и native-библиотека

RESOLVE_SCRIPT_API задаёт корень Developer/Scripting. Внутри него helper сам добавляет Modules/DaVinciResolveScript.py. Передавать в эту переменную уже готовую папку Modules нельзя: получится Modules/Modules. RESOLVE_SCRIPT_LIB, если задана, указывает на конкретный fusionscript.dll или fusionscript.so из той же установки.

Для обычного import DaVinciResolveScript папка Modules должна быть видна Python, например через PYTHONPATH. В нашем helper это не требуется: он загружает официальный файл по точному пути. RESOLVE_MODULES не является переменной, которую использует этот пример; прежний пользовательский alias не нужно принимать за обязательную настройку Blackmagic.

Стандартные пути ниже — ориентиры для настольной установки. Переносная установка, Linux в другом каталоге, Mac App Store, sandbox или другая архитектура требуют проверки своих файлов. Не скачивайте чужую native-библиотеку и не заменяйте установленный модуль ради совпадения с примером.[3][5]

Windows

RESOLVE_SCRIPT_API%PROGRAMDATA%\Blackmagic Design\DaVinci Resolve\Support\Developer\ScriptingRESOLVE_SCRIPT_LIBC:\Program Files\Blackmagic Design\DaVinci Resolve\fusionscript.dll

Python-модуль: Modules/DaVinciResolveScript.py внутри указанной папки Scripting. Проверьте файлы своей установки.

macOS

RESOLVE_SCRIPT_API/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/ScriptingRESOLVE_SCRIPT_LIB/Applications/DaVinci Resolve/DaVinci Resolve.app/Contents/Libraries/Fusion/fusionscript.so

Python-модуль: Modules/DaVinciResolveScript.py внутри указанной папки Scripting. Проверьте файлы своей установки.

Linux

RESOLVE_SCRIPT_API/opt/resolve/Developer/ScriptingRESOLVE_SCRIPT_LIB/opt/resolve/libs/Fusion/fusionscript.so

Python-модуль: Modules/DaVinciResolveScript.py внутри указанной папки Scripting. Проверьте файлы своей установки.

Это ориентиры для распространённых установок, не команда на скачивание или замену библиотек. %PROGRAMDATA% — запись переменной среды Windows; helper читает её значение и не исполняет эти строки как shell-команды.

05 / UNDERSTAND

Первый запуск без лишних действий

Скачайте оба Python-файла в одну папку. Откройте Resolve Studio; сохраните рабочие изменения. Откройте терминал в папке примера и выполните команду для своего интерпретатора. Если Python вызывается полным путём, используйте этот путь вместо python или python3 во всех последующих шагах.

Ожидается JSON с двумя непустыми полями: product и version. Значения берутся у приложения; статья не подставляет тестовую версию. Сверьте их с About DaVinci Resolve. Открывать проект ради этой проверки не нужно, поэтому ошибка project is None здесь вообще не возникает.

Не запускайте неизвестные скрипты только потому, что в них встречается официальный import. Подключение не ограничивает следующие команды режимом чтения: безопасность нашего примера определяется его содержимым, а не правами объекта Resolve.[3][4]

06 / UNDERSTAND

Почему helper не «пробует всё подряд»

При явно заданном неверном пути пример останавливается. Он не переходит незаметно к другой установке Resolve и не заменяет сбой загрузки библиотеки сообщением «модуль не найден». Исходное исключение сохранено в цепочке ошибок — оно покажет, например, проблему зависимости, архитектуры или импорта внутри модуля.

Это вспомогательный код сайта, не официальный SDK Blackmagic. Внутри loader учтено, что загружаемый wrapper может заменить свою запись в sys.modules native-модулем. Успех офлайн-теста этого механизма не подтверждает совместимость fusionscript с вашим Python.[5][6]

PYTHON / COMPLETE EXAMPLE

Прочитайте код. Затем запускайте осознанно.

Два файла в одной папке

Скачайте connect_resolve.py и resolve_api_connection.py либо возьмите комплект из пяти скриптов. Helper написан нами; официальный модуль DaVinciResolveScript и нативная библиотека должны браться из вашей установки Resolve.

Скачать все примеры с инструкцией (.zip) ↓
connect_resolve.py
Скачать .py
"""Read application identity only. Keep resolve_api_connection.py alongside this file."""
from resolve_api_connection import connect


def inspect_application(resolve):
    product = resolve.GetProductName()
    version = resolve.GetVersionString()
    if not product or not version:
        raise RuntimeError("Application identity could not be read")
    return {"product": product, "version": version}


def main():
    import json
    result = inspect_application(connect())
    print(json.dumps(result, ensure_ascii=False, indent=2))
    # No project is required. A successful read is NOT permission for later writes.


if __name__ == "__main__":
    main()

Общий helper подключения — посмотреть и скачать

Этот файл находит и загружает установленный мост. При импорте Python может записывать кэш байткода, а нативный вызов — зависнуть; это не песочница и не механизм тайм-аута. Используйте доверенную локальную установку.

resolve_api_connection.py
Скачать .py
"""Load the installed Blackmagic module; do not install a similarly named package.

This helper uses standard desktop installation paths or RESOLVE_SCRIPT_API.
It does not enable scripting, start Resolve, open projects or retry API calls.
Validate Python/native-library compatibility against your installed README.txt.
"""
from __future__ import annotations

import importlib.util
import os
from pathlib import Path
import struct
import sys


class ResolveConnectionError(RuntimeError):
    """An explicit environment, module, or application-connection failure."""


def scripting_root() -> Path:
    configured = os.environ.get("RESOLVE_SCRIPT_API")
    if configured is not None:
        if not configured.strip() or configured != configured.strip():
            raise ResolveConnectionError("RESOLVE_SCRIPT_API is empty or has outer whitespace")
        if configured.startswith(('"', "'")) or configured.endswith(('"', "'")):
            raise ResolveConnectionError("Do not store literal outer quotes in RESOLVE_SCRIPT_API")
        root = Path(os.path.expandvars(configured)).expanduser()
    elif sys.platform == "win32":
        root = Path(os.environ.get("PROGRAMDATA", r"C:\ProgramData")) / "Blackmagic Design/DaVinci Resolve/Support/Developer/Scripting"
    elif sys.platform == "darwin":
        root = Path("/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting")
    elif sys.platform.startswith("linux"):
        root = Path("/opt/resolve/Developer/Scripting")
    else:
        raise ResolveConnectionError("Set RESOLVE_SCRIPT_API for this platform/installation")
    if not root.is_absolute():
        raise ResolveConnectionError("RESOLVE_SCRIPT_API must be an absolute Scripting directory")
    return root


def module_file() -> Path:
    # RESOLVE_SCRIPT_API points to Scripting, not its Modules subdirectory.
    return scripting_root() / "Modules" / "DaVinciResolveScript.py"


def load_resolve_module():
    if struct.calcsize("P") * 8 != 64:
        raise ResolveConnectionError("Use a compatible 64-bit Python interpreter")
    source = module_file()
    if not source.is_file():
        raise ResolveConnectionError("Official DaVinciResolveScript.py not found at: " + str(source))
    configured_lib = os.environ.get("RESOLVE_SCRIPT_LIB")
    if configured_lib is not None:
        lib = Path(os.path.expandvars(configured_lib)).expanduser()
        if not lib.is_absolute() or not lib.is_file():
            raise ResolveConnectionError("RESOLVE_SCRIPT_LIB must name the installed native library file")
    name = "DaVinciResolveScript"
    spec = importlib.util.spec_from_file_location(name, source)
    if spec is None or spec.loader is None:
        raise ResolveConnectionError("Cannot create a loader for the official module")
    previous = sys.modules.get(name)
    module = importlib.util.module_from_spec(spec)
    sys.modules[name] = module
    try:
        spec.loader.exec_module(module)
        # Blackmagic's wrapper can replace its sys.modules entry with a native module.
        loaded = sys.modules[name]
        if not callable(getattr(loaded, "scriptapp", None)):
            raise ResolveConnectionError("Loaded module does not expose scriptapp")
        return loaded
    except Exception as exc:
        if previous is None:
            sys.modules.pop(name, None)
        else:
            sys.modules[name] = previous
        raise ResolveConnectionError("Official module was found, but loading it failed") from exc


def connect():
    module = load_resolve_module()
    try:
        resolve = module.scriptapp("Resolve")
    except Exception as exc:
        raise ResolveConnectionError("scriptapp failed; inspect the original exception") from exc
    if not resolve:
        raise ResolveConnectionError("No Resolve object: check running Studio, Local access and Python environment")
    return resolve


def project_manager(resolve):
    manager = resolve.GetProjectManager()
    if not manager:
        raise ResolveConnectionError("Resolve connected, but Project Manager is unavailable")
    return manager

Команды запуска

Windows / PowerShell

Windows / PowerShell
python .\connect_resolve.py

Запустите из папки с обоими .py-файлами; python должен указывать на нужный интерпретатор.

macOS / Linux

macOS / Linux
python3 ./connect_resolve.py

При нестандартной установке сначала задайте абсолютный RESOLVE_SCRIPT_API.

Что делает код

  1. Найти файл

    Helper выбирает стандартный Scripting-каталог или явно заданный RESOLVE_SCRIPT_API.

  2. Загрузить зависимости

    Официальный wrapper загружает свою native-библиотеку; ошибка сохраняет исходную причину.

  3. Получить приложение

    scriptapp вызывается один раз. При пустом результате выполнение останавливается.

  4. Проверить чтение

    Пример читает только название продукта и полную строку версии.

Границы, которые важно сохранить

Helper не устанавливает Python, не включает scripting и не запускает Resolve.

Успешное чтение версии не доказывает наличие активного проекта.

Модуль Blackmagic и helper сайта — разные файлы. Скачайте оба авторских файла примера; официальный модуль берётся из установки.

DEBUG / OBSERVATION FIRST

Ошибка — отправная точка, не готовый диагноз.

Не найден DaVinciResolveScript.py

Возможная причинаНеверный корень Scripting или другая установка.

Следующая проверкаПроверьте реальный файл через Developer documentation. В RESOLVE_SCRIPT_API не дописывайте Modules.

Файл найден, но loading it failed

Возможная причинаСбой внутри wrapper/native-зависимости, а не обязательно отсутствие модуля.

Следующая проверкаПрочитайте исходное исключение. Сопоставьте Python, разрядность, архитектуру и RESOLVE_SCRIPT_LIB своей установки.

No Resolve object

Возможная причинаМодуль загрузился, но приложение не дало объект.

Следующая проверкаПроверьте запущенную Studio, Local и окружение процесса. Не подменяйте это автоматическим Fusion fallback.

Из IDE работает, из терминала — нет

Возможная причинаРазные интерпретаторы или переменные окружения.

Следующая проверкаСравните sys.executable и настройки IDE; повторите диагностику точно тем Python, который запускает рабочий скрипт.

PRACTICE / YOUR OWN EVIDENCE

Проверка «приложение — не проект»

  1. Запустите пример с открытым тестовым проектом и сверьте product/version в About.
  2. После сохранения закройте проект вручную, оставив Resolve запущенным. Повторите чтение версии.
  3. Сравните результаты: состояние проекта не должно быть обязательным условием проверки приложения. При отклонении остановитесь на диагностике, не добавляйте автоматическое создание проекта.
КРИТЕРИЙ ПРИЁМКИ

Получены реальные product/version; скрипт не вызывал создание, загрузку проекта, импорт или рендер. Реальный запуск выполните на своей установке.

Это условия вашей проверки, а не отчёт об испытании, уже выполненном на сайте.

FAQ

Вопросы, которые возникают на практике.

Нужна ли Studio?

Для описанного внешнего Python-маршрута используйте Studio. Изменения выпуска 21.1 нельзя игнорировать на основании старых руководств для Free. Эта статья не обещает обход ограничений через Console или Fusion.[1][4]

Нужно ли делать pip install DaVinciResolveScript?

В этом маршруте используется файл, поставленный с Resolve. Одноимённый пакет из стороннего реестра не становится официальным модулем автоматически. Helper не скачивает зависимости.[3]

Нужно ли включать Network?

Нет: пример запускается на той же машине. Проверьте Local в своей версии. Network расширяет поверхность доступа и не является универсальным способом починить импорт.[3]

Можно ли сразу использовать это в боевом проекте?

Пример читает только приложение, но последующий код может менять проект. Сначала проверьте свою версию и тестовый проект; успешное получение объекта не подтверждает любые будущие операции.

SOURCES / VERSION BOUNDARIES

Источники, а не подразумеваемая сертификация.

Сверка источников, офлайн-тесты Python и проверка интерфейса — разные виды подтверждения. Ни один из них не означает, что каждый пример проверен со всеми сборками Studio, ОС и версиями Python. Указанная дата — дата редакционной проверки, не сертификат живого прогона.

  1. Blackmagic Design — DaVinci Resolve Studio 21.1 release notes

    8 сентября 2026. В объявлении выпуска Python scripting отнесён к Studio. Это источник требований редакции, а не протокол испытания наших примеров.

  2. Blackmagic Design — Support Center

    Каталог обновлений проверен 5 октября 2026: опубликована ветка 21.1.1. Последний выпуск не равен минимальной версии каждого метода.

  3. Blackmagic Scripting README — snapshot 24 July 2026 (Resolve 21.0.4)

    Публичная копия первичного README Blackmagic, поддерживаемая X-Raym. По ней сверены базовые сигнатуры; это не официальный хостинг и не README 21.1.1. Оригинал своей установки: Help → Documentation → Developer → Scripting → README.txt; расположение пункта зависит от версии.

  4. Blackmagic Design — Scripting and Automation

    Официальное описание Python/Lua scripting и интеграций Studio. Нельзя переносить обещания Studio на Free без проверки конкретного выпуска.

  5. Python — importlib

    Загрузка Python-файла по известному пути. Наш helper сохраняет исходное исключение, а не объявляет любой ImportError отсутствием модуля.

  6. Python — ImportError and ModuleNotFoundError

    Различие ошибок поиска и загрузки зависимостей; цепочка исключений нужна для точной локальной диагностики.

KEEP BUILDING

Продолжайте с конкретной задачей.

API / Старт

Как проверить доступность Resolve Scripting API

Диагностика Python, официального модуля, объекта Resolve и текущего проекта. Разделяем ошибку загрузки и подключения; формируем локальный JSON-отчёт без имён проектов по умолчанию.

API / Проекты

Как получить текущий проект DaVinci Resolve через Python

Получаем Project Manager, проверяем текущий проект по имени и ID, читаем число таймлайнов и активный Timeline. Пустой таймлайн допускается; автоматическая загрузка и создание проекта исключены.

API / Проекты

Как создать проект DaVinci Resolve через Python API

Контролируемый CreateProject в локальной Project Library: проверка имени, библиотеки и папки, отдельный --apply, остановка при открытом проекте и проверка сохранения. Без скрытого LoadProject и автоматического удаления.

Вернуться в библиотеку API →MCP и AI-ассистенты →