Снимок: 2026-10-11. Секция хаба Tools, тайл «Видео» / «Edit», подпись «Preview-сборка · временно выключен» / «Preview build · temporarily disabled». Инструмент выключен в каталоге (enabled = false): карточка в хабе серая и не открывается. Открыть можно только из Записи экрана («Открыть видеоредактор») и из истории записей.
Экран и навигация
Screen.VideoEditor→VideoEditorScreen(771 строка).- Вход: из Записи экрана
onOpenEditor, из истории записей (media_open_video_editor).
Возможности (подробно)
Клипы и таймлайн
initialProject/addClip— добавление клипа (из записей экрана или из галереи:media_add_video).TimelineStrip(772 строки) — визуальная шкала:ClipStrip(клипы),TimeRuler(линейка времени),TransitionMarker(переходы между клипами),ZoomBar(масштаб шкалы),MiniButton.- Расчёт геометрии:
msToPx/pxToMs/timelineMsAt/timelineToPx,buildLayout,dropIndex— куда вставить перетаскиваемый клип.
Воспроизведение и позиционирование
togglePlayback,onPlaybackStateChanged,PlaybackPositionState,captureAnchor/settleSeek/applySeek— точное позиционирование.stepFrame— покадровая перемотка (FrameStepper).- Жесты:
ScrubGestures(beginScrub/updateScrub/finishScrub),scrub-жесты, зум двумя пальцами,media_fit— вписать.
Редактирование
edit()— обрезка по началу/концу (media_start,media_end,media_frame_trimming).- Разделение клипа (
media_split), слияние/добавление (media_add_clip). - Крайние проверки:
media_too_close_to_clip_edge— нельзя резать вплотную к краю. - История правок:
EditHistory(undo/redo—media_undo,media_redo),restore— откат.
Переходы
VideoTransitionCard— выбор перехода между двумя клипами: длительность (media_duration,media_ms), вид, «точный оверлей появится после рендера» (media_exact_overlap_after_render).- Проверка: клипы слишком короткие для перехода (
media_clips_are_too_short_for_a_transition).
Экспорт (рендер)
Два пути, оба существуют:
- Быстрый (по умолчанию) —
VideoExporterчерез Media3 Transformer (внутри APK, без Termux): обрезка, склейка, скорость.ProgressHolderдаёт процент,ExportState:Idle/Running(progress, output)/Done(output, bytes)/Failed(error),isRunningзащищает от второго рендера параллельно (media_ffmpeg_render_already_in_progress). - Тяжёлый —
MediaExportчерез ffpeg в Termux (экспорт терминальной командой): переходы, субтитры, нормализация звука. Через ws-backend.
startExport/cancelExport — кнопки; media_retry_export — повтор после ошибки, media_cancel_render — отмена.
Вкладки и источники
VideoEditorTabContent — вкладки таймлайна, настроек и экспорта: ExportButton, FrameStepper, RecordingsCard (записи экрана как источник клипов), AppCard, Chip (переход, обрезка).
Где в коде
| Файл | Строк | Роль |
|---|---|---|
ui/video/VideoEditorScreen.kt | 771 | Экран, логика правок, экспорт |
ui/video/TimelineStrip.kt | 772 | Таймлайн, клипы, линейка, переходы, зум |
ui/video/VideoEditorTabContent.kt | 497 | Вкладки, кнопки, карточки источников |
ui/video/VideoTransitionCard.kt | 167 | Карточка перехода |
ui/video/ScrubGestures.kt | 58 | Жесты скраббинга |
Плюс пакет video/ (вне ui, 1142 строки в 10 файлах): VideoProject (356) — модель проекта, VideoExporter (169) — Media3 Transformer, PlaybackPosition (125) — позиция/воспроизведение, VideoSources (124) — источники клипов, MediaExport (108) — ffmpeg-путь, MediaProbe (85) — метаданные, VideoProjectStore (72) — проекты на диске, EditHistory (40) — undo/redo, VideoMediaItems, TimelineGeometry.
Данные и API
- Проекты лежат файлом на диске, не в Room:
Download/y83ws/projects/<id>/project.json, экспорт в.../exports/. Причина в комментарии кода: проекты нужны и Termux, и ffmpeg (рендер по схеме), а каталог уже открыт Termux через MANAGE_EXTERNAL_STORAGE. - Источники: файлы записей экрана (
bridge/ScreenRecordings) и галерея (MediaStore) —VideoSources.kt. - Быстрый экспорт локальный (Media3); тяжёлый (ffmpeg) — через Termux и backend.
- Мост:
bridge.BridgeState,app_video_status.
Агент
Мост
app_video_status— статус рендера/экспорта.app_record_*— записи экрана (см. Запись экрана).
Агент не управляет монтажом напрямую: нет MCP-тулов монтажа. Он может проверить статус рендера (app_video_status) и работать с записями.
Подводные камни
- Инструмент выключен в каталоге (
enabled = false) — карточка серая, не нажимается. Это осознанный флаг preview-сборки, а не баг. - Два экспортных пути. По умолчанию Media3 Transformer (обрезка/склейка/ скорость, без Termux). Переходы, субтитры и нормализация звука идут в ffmpeg на Termux — без установленного ffmpeg тяжёлый рендер падает (
media_ffmpeg_render_unavailable). - Один рендер за раз.
isRunning/already_in_progress— второй экспорт не запустится, пока идёт первый. - Переходы видны только после рендера. В предпросмотре — «точный оверлей появится после экспорта».
- Короткие клипы. Переход требует минимальной длины, иначе кнопка заблокирована.
- Проект — файл в
Download, не Room. ПлюсMANAGE_EXTERNAL_STORAGE: файл проекта виден Termux и ffmpeg, поэтому удаление папки убивает проект. На диске он НЕ сохраняется как «черновик в БД» —EditHistoryживёт в состоянии экрана.
Как обновлять
- Каталог:
data/InstrumentCatalog.kt(idvideo, флагenabled = false). - Маршрут:
ui/navigation/Screen.kt(Screen.VideoEditor). - Код UI:
ui/video/*. - Движок: пакет
video/—VideoExporter(Media3),MediaExport(ffmpeg),VideoProjectStore(файлы проектов),MediaProbe. - Вход из записи:
ScreenRecordScreen.onOpenEditor→MainRouter. - Статус:
app_video_statusв мосте.