Skip to content

Repository files navigation

Kadr

ИИ-нативный видеоредактор с GPU-ускорением — и с Claude Code прямо в таймлайне.

English version → · Полное руководство по функциям → · Video →

License: GPL-3.0

Поддержать меня можно на Boosty: https://boosty.to/triangle_black/

Демо Kadr

Kadr — многодорожечный видеоредактор (Electron + React + TypeScript), построенный вокруг одной идеи: ИИ-агент должен монтировать видео рядом с вами, на том же таймлайне, теми же инструментами. Нажмите «Claude», напишите «добавь сюда анимированные субтитры» — и смотрите, как это происходит вживую в превью.

Возможности

  • 🎬 Полноценный многодорожечный монтаж — видео/аудио/текстовые дорожки, трим, луп, фейды, связанные AV-клипы, полная история отмен. Скорость ×0.02–×100 Ctrl-драгом за любой край клипа (левый якорит правую границу) с прилипанием к круглым множителям и краям соседних клипов и живым бейджем «×N» у курсора.
  • 📥 Медиа отовсюду — перетащите файлы в любое место окна (на дорожку — лягут клипами встык в точку броска, аудио уйдёт на свою дорожку), картинку прямо из браузера (скачается по URL), или нажмите Ctrl+V — вставка из буфера обмена понимает и скопированные файлы, и «Копировать изображение» (например, из Telegram, который фото перетаскиванием не отдаёт). Поддержаны и XDG-портальные перетаскивания из песочных приложений. В медиапанели — множественное выделение и удаление файлов вместе с их клипами на таймлайне (одна отмена).
  • GPU-композитинг (WebGL2) — превью и есть рендер: один и тот же компоновщик рисует оба, экспорт пиксель-в-пиксель WYSIWYG.
  • 🔑 Ключевые кадры везде — позиция, масштаб, поворот, прозрачность, громкость, маски; рабочий процесс в стиле After Effects.
  • 🧊 Настоящее 3D — наклоны и глубина клипа, «полёт камеры» целой дорожкой, перспективно-корректные текстуры.
  • 🎭 Маски — анимируемые кромки + до 8 фигур с растушёвкой (прямоугольник/эллипс/треугольник, инверсия).
  • 🌫️ Эффекты: дымное внешнее сияние и размытие — сияние из клубов billow-шума с рваными щупальцами и искрами; гауссово размытие слоя с ползунком интенсивности; всё параметрично, сохраняется в пресеты и идентично в превью и рендере.
  • Реверс клипа — правый клик → «Реверсировать»: используемый кусок исходника рендерится задом наперёд (с кэшем), связанная AV-пара переворачивается синхронно, повторный клик мгновенно возвращает оригинал.
  • 🔀 26 переходов — 14 переходов наложения (Vegas-стиль: просто перекройте два клипа) и 12 кинематографичных торцевых (вип-паны, зум-блюры, RGB-расхождение, глитч…) со спектральным смазом.
  • 🗣️ Локальное распознавание речи — faster-whisper (large-v3) с пословными таймкодами и серьёзной защитой от галлюцинаций (чистый тон обязан дать ноль реплик — закреплено тестами). Редактор SRT/TXT встроен.
  • Авто-субтитры — один диалог: распознавание → анимированные караоке-титры (пословная подсветка, появления поп/подъём/фейд); позиция и размер — мышью прямо в превью.
  • 🌊 Неоновая волна — аудио-реактивная светящаяся линия по громкости выделенного диапазона (весь микс или одна дорожка); стиль правится в коде фрагмента, огибающая — точный аналог «Bake Sound» из Blender.
  • 🗣️ Озвучка через ElevenLabs — любой текст из корзины, файла с диска или прямо из поля ввода превращается в аудиоклип на таймлайне. Длинный текст режется по границам предложений под лимит модели и сшивается через previous_text/next_text, так что интонация не рвётся на стыках; опциональное ускорение применяется в том же проходе ffmpeg, что и декодирование, — без лишней генерации. Файл пишется в FLAC и в том же числе каналов, что прислал синтез (моно остаётся моно: апмикс в стерео тихо отнимал 3 дБ). API-ключ никогда не попадает в рендерер и не хранится в проекте — только в <userData> с правами 0600, страница может лишь спросить «ключ задан?».
  • 🎯 Поиск дефектов озвучки и перегенерация одной фразы — локальный детектор (собственный проект автора, встроен в редактор) размечает на таймлайне подозрительные места фиолетовыми полосами: ЛКМ — «дефект», ПКМ — «не дефект», двойной клик — прослушать фразу. Подтверждённые места перегенерируются целиком одним проходом: новая реплика синтезируется из точной подстроки сценария с контекстом вокруг, подгоняется по темпу и уровню и вшивается равномощным кроссфейдом ровно посередине настоящей тишины между предложениями. Длина измеряется, а не вычисляется, и всё правее сдвигается по всем дорожкам — синхрон с картинкой не разъезжается. Ваши решения копятся и по кнопке переобучают детектор.
  • 🪟 Предпросмотр в отдельном окне — кнопка рядом со снимком кадра выносит превью в самостоятельное окно ОС: его можно растянуть, перенести на второй монитор и смотреть во весь экран, пока таймлайн остаётся в основном окне. Переносится тот же самый холст — контекст GPU не пересоздаётся, фрагменты не перезагружаются, пробел и стрелки работают из обоих окон. Второй клик возвращает превью на место.
  • 🎨 Интерфейс на дизайн-системе — единая палитра токенов, иконки вместо эмодзи (шрифт эмодзи в каждой ОС свой, и они никогда не выравнивались с текстом), контраст измерен по WCAG 2.2 AA, видимый фокус с клавиатуры, один общий каркас у всех диалогов (Escape, ловушка фокуса, горячие клавиши редактора не срабатывают сквозь диалог) и заметная полоса прокрутки таймлайна с минимальным размером ползунка — на пятнадцатиминутном проекте при большом зуме он раньше вырождался в один пиксель.
  • 🧰 Журнал сессии и панель хранилища — две ненавязчивые кнопки в топбаре. Журнал показывает, что именно не получилось (двадцать мест раньше молчали в консоль), живёт только в памяти и гаснет вместе с окном. Хранилище показывает, что редактор оставил на диске, и делит это на восстановимое (прокси, посредники, рендеры фрагментов — их можно чистить точечно по типу и по проекту) и невосстановимое (реверсы, скачанное, озвучки), которое никогда не удаляется одним кликом. Удалите прокси, откройте проект через год — он подхватится сам.
  • ⚛️ Remotion-фрагменты — программируемая моушн-графика (React/TSX) как клипы таймлайна. Живое превью с hot reload (никаких рендеров во время итераций!), автоматический режим захвата пикселей для GL-эффектов, 3D и переходов на фрагменте, и ровно один настоящий рендер при экспорте (кэш по хешу содержимого). Код фрагментов лежит в папке проекта — проект переносится вместе со своей графикой.
  • 🪟 Видео с альфа-каналом — прозрачные WebM (VP8/VP9+alpha), MOV (ProRes 4444) и HEVC с альфой сохраняют прозрачность и в превью, и в экспорте: под ними видно нижние дорожки, маски и эффекты работают как обычно.
  • 🤖 Встроенный Claude Code — настоящая интерактивная сессия Claude в терминальной панели, подключённая к живому проекту через MCP: читает таймлайн, правит клипы, транскрибирует, создаёт и дорабатывает Remotion-фрагменты, пока вы смотрите превью. Панель перетаскивается, растягивается и помнит своё место между запусками.
  • 📍 Маркеры таймлайна — клавиша M ставит нумерованный маркер на плейхеде: перетаскивается, удаляется правым кликом, живёт в проекте и виден встроенному Claude («правь от маркера 3 до маркера 4»).
  • 📤 Экспорт без компромиссов — видео кодирует ffmpeg x264 с честным битрейтом пресета (кодировщик Chromium игнорировал битрейт и «мылил» картинку — измерено и заменено; кадры передаются в ffmpeg без единой копии), 8-сэмпловый motion blur, frame blending для исходников с «чужим» fps, пресеты YouTube/Shorts/WebM/MP3. По окончании рендера — короткий сигнал.
  • 🚀 Быстрый рендер на любом исходнике — покадровая перемотка <video> стоит ~0.2 с на кадр, и редактор обходит её везде: видео с альфа-каналом (в том числе все прозрачные Remotion-фрагменты) читается через упакованный без потерь посредник, MP4 с индексом в конце файла — по «хвосту», недекодируемые кодеки — через H.264-посредник. Реальный проект на 11 минут с прозрачными фрагментами: 13 минут вместо нескольких часов (58 кадров/с при 1080p60).
  • 🛟 Забота о работе — фоновые 540p-прокси для превью, автосохранение раз в 5 минут (атомарное, не мешает рендеру и ИИ-сессиям), индикатор несохранённых изменений и «✓ Сохранено», самовосстановление после жёсткого закрытия (никаких зависших процессов), пресеты эффектов и поз, общие для всех проектов, интерфейс RU/EN.
  • 🔒 Чистый npm audit — Electron 42 / Chromium 148, vite 7, свежий tar: 0 известных уязвимостей в зависимостях (спасибо @Antony-hash512 за issue #1).

Требования

Компонент Для чего Примечание
Node.js ≥ 20 всё
ffmpeg + ffprobe импорт, аудиомикс, экспорт любая свежая сборка в PATH
python3 + faster-whisper распознавание речи, авто-субтитры pip install faster-whisper; модели скачаются при первом запуске
Claude Code CLI панель «Claude» опционально; использует ваш существующий вход
сеть (один раз) workspace Remotion-фрагментов ~/kadr-fragments, ~150 МБ
ключ ElevenLabs озвучка опционально; вводится в настройках озвучки и хранится вне проекта
python ≥ 3.11 + torch поиск дефектов озвучки опционально; путь к интерпретатору — настройка, без него модуль честно вырождается в обычную озвучку

Запуск

git clone https://github.com/HelpFreedom/kadr.git && cd kadr
npm install        # postinstall пересоберёт node-pty под Electron
npm run dev

Импортируйте медиа, монтируйте, жмите «Экспорт». Для ИИ-ассистента нажмите «Claude» в топбаре (CLI claude должен быть установлен и залогинен). Если для Claude/npm нужен прокси — создайте ~/.config/kadr/claude-env.json:

{ "env": { "HTTPS_PROXY": "http://127.0.0.1:1080", "NO_PROXY": "127.0.0.1,localhost" } }

Как устроена ИИ-интеграция

Kadr поднимает локальный мост в рендерер и отдаёт Claude MCP-сервер с пятью инструментами:

Инструмент Что делает
kadr_state весь живой проект: дорожки, клипы, пути медиа, транскрипты, пресеты
kadr_eval выполнить JS против API редактора (каждая правка — в истории отмен)
kadr_snapshot снимок кадра в PNG — «глаза» агента: он видит то же, что вы
kadr_export отрендерить проект или диапазон и дождаться файла
kadr_transcribe локальный Whisper по файлу или диапазону таймлайна
kadr_fragment_create создать Remotion-композицию как клип таймлайна
kadr_neon_wave аудио-реактивная волна по диапазону
kadr_voice_speak озвучить текст и положить клип на таймлайн
kadr_voice_check прогнать детектор дефектов по озвучке
kadr_voice_mark · kadr_voice_verdict поставить свою отметку · вынести решение по найденному
kadr_voice_regenerate перегенерировать подтверждённые фразы (только их)
kadr_voice_learn посчитать корпус разметки, а по явному подтверждению — переобучить детектор

Главный цикл: Claude создаёт фрагмент, правит его TSX обычными файловыми инструментами — vite горячо перезагружает превью за ~2 секунды. Вы даёте правки обычным языком; рендер один — финальный.

Тесты

E2E-тесты управляют настоящим приложением через Chrome DevTools Protocol:

npx electron-vite dev -- --remote-debugging-port=9777   # терминал 1
node scripts/e2e13.mjs                                  # терминал 2 (и т. д.)

Покрыто: переходы, сияние, пресеты, прокси, точность экспорта (PSNR быстрого пути против отката), motion blur, каденс frame blending, MCP-мост, антигаллюцинационный контракт транскрипции, фрагменты и режим захвата, семантика автосохранения, авто-субтитры, дизайн-система (контраст, отсутствие эмодзи, фокус, контракт диалогов), журнал сессии, панель хранилища (обещание «удалили прокси — через год подхватится» проверяется по пикселям), вынесенное окно предпросмотра, озвучка, разметка и перегенерация фраз, формат корпуса обучения.

Ещё четыре проверки — чистая математика без приложения и без сети:

node scripts/check-envelope.mjs   # огибающая громкости (аналог Bake Sound)
node scripts/check-ttstext.mjs    # разбиение длинного текста по границам
node scripts/check-proxy.mjs      # выбор прокси и его запись для Chromium
node scripts/check-voicemap.mjs   # пересчёт таймингов после вклейки фразы

Документация

  • FEATURES.md — полное руководство по функциям (1200+ строк).
  • CLAUDE.md — карта архитектуры (её же читает Claude Code).

Авторы

  • Black Triangle — владелец репозитория, постановка задач, приёмка, вся содержательная часть по монтажу и звуку.
  • Claude (Anthropic) — разработка в паре: реализация, измерения, тесты и эта документация.

Лицензия

GPL-3.0

About

AI-native GPU-accelerated video editor with Claude Code built into the timeline

Resources

Stars

115 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages