Мой блог
Создание плагинов для open-source видеоредактора с помощью нейросетей
создание плагинов для видеоредактора — Разработчики видеоредакторов нередко сталкиваются с проблемой монолитности архитектуры и конфликтами версий библиотек при интеграции множества нейросетей. Подобные трудности привели к переосмыслению структуры проекта Wunjo Make, который превратился из стандартного Flask-приложения в кроссплатформенный редактор на базе Qt и Python с поддержкой подключаемых модулей. Создание плагинов для таких систем позволяет гибко расширять функциональность, избегая конфликтов зависимостей и перегрузки системы ненужными компонентами.
В материале рассматривается практический подход к разработке расширений для видеоредактора как самостоятельно, так и с привлечением облачных моделей через специальные навыки и инструменты автоматизации.



Зачем понадобилась модульная архитектура
Проект Wunjo Make развивается на протяжении трех лет и представляет собой переработанный форк Kdenlive с открытым исходным кодом. Изначально монолитная структура, содержащая более пятидесяти нейросетей, страдала от конфликтов версий. Например, определенные модели липсинка требовали конфигураций библиотек, ломавших замену лиц. Переход на модульную систему позволил разделить окружения и дать пользователям возможность устанавливать только те функции, которые им действительно необходимы.
В новую архитектуру заложено две ключевые концепции. Первая — это интеграция протокола Model Context Protocol (MCP) для взаимодействия с локальными и облачными языковыми моделями вроде Qwen 3.5. Нейросети способны искать файлы на компьютере и в сети, управлять сценариями и автоматизировать монтажные конвейеры. Вторая концепция — система изолированных плагинов, позволяющая добавлять функции генерации речи, редактирования видео, замены элементов внешности или создания звуковых эффектов с помощью сторонних API.
Концепция плагинов в программном обеспечении
История расширений насчитывает несколько десятилетий: от текстовых редакторов на мейнфреймах в 1970-х до современных графических пакетов, браузеров и цифровых аудиостанций. Базовый принцип остается неизменным: главная программа предоставляет контролируемую среду, а внешний модуль расширяет ее возможности. В контексте видеоредактора с нейросетями такой подход решает проблему изоляции тяжелых библиотек с несовместимими лицензиями.
Устройство плагина и изоляция окружения
В рассматриваемом проекте плагин представляет собой директорию, содержащую файл манифеста plugin.json, основной скрипт main.py и файл зависимостей. При архивации папка превращается в файл с расширением .wmplugin.
Управление зависимостями через uv
Для каждого расширения создается изолированное виртуальное окружение. При активации плагина редактор задействует пакетный менеджер на Rust под названием uv, который разворачивает Python 3.11 и загружает необходимые зависимости локально. Это исключает конфликты, позволяя разным плагинам использовать разные версии библиотек.
Процесс выполнения задач
Редактор не импортирует код плагина напрямую. Вместо этого формируется временный JSON-файл с заданием, который передается интерпретатору в качестве аргумента. В файле указаны параметры клипов, тайминги, настройки проекта и пути к ffmpeg. Плагин возвращает результаты через стандартный вывод, передавая прогресс, статусы или списки созданных файлов, что гарантирует стабильность всей программы даже при сбое отдельного модуля.
Права и типы плагинов
Место появления элемента в интерфейсе определяется его манифестом. Модули для обработки видео активируются через контекстное меню клипа, звуковые — на аудиодорожках, а генеративные элементы управляются через чат-панель. Поддерживаются два основных вида модулей:
- Локальные — запускают модели непосредственно на устройстве пользователя без требования постоянного подключения к сети.
- API-плагины — обращаются к внешним веб-сервисам, получая ключи доступа исключительно через безопасные переменные окружения.
Безопасность обеспечивается жесткими ограничениями: код плагина может записывать данные только в отведенную ему рабочую директорию и не имеет права самостоятельно инсталлировать компоненты во время работы.
Разработка модуля с помощью языковых моделей
В репозитории проекта предусмотрена специальная директория со вспомогательными инструкциями и правилами для облачных агентов вроде Claude Code, Codex или Cursor. Эти материалы содержат стандарты оформления манифестов, форматы ввода-вывода и рабочие образцы.
Пример простого модуля инверсии цветов
В качестве демонстрации минимального расширения приводится скрипт инверсии цветов на базе встроенного в редактор ffmpeg, не требующий установки дополнительных библиотек. Он состоит из манифеста и логического файла на Python:
{
"manifest_version": 1,
"id": "invert",
"name": "Invert",
"version": "1.0.0",
"description": "Inverts the colours of a clip with the editor's own ffmpeg.",
"license": "MIT",
"kind": "local",
"target": "video",
"entry": "main.py",
"os": ["linux", "windows", "macos"],
"input": {"clip": "video", "multiple": false, "zone": false},
"result": {"type": "video", "place": "bin"}
}
Скрипт считывает параметры задания, запускает обработку видеопотока и возвращает отчет о прогрессе выполнения. Создание архива для установки осуществляется с помощью специального скрипта упаковки, после чего модуль готов к импорту в программу через меню настроек.
