<style>
.mc-pipeline {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: .35rem;
  margin: 1.5rem 0 2rem; align-items: stretch;
}
.mc-pipeline .step {
  background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius);
  padding: .85rem .8rem; font-size: .82rem; line-height: 1.35; position: relative;
  display: flex; flex-direction: column; justify-content: center; min-height: 6rem;
}
.mc-pipeline .step .n {
  font-family: var(--font-mono); font-size: .66rem; color: var(--accent);
  margin-bottom: .3rem; letter-spacing: .03em;
}
.mc-pipeline .step::after {
  content: "→"; position: absolute; right: -1.05rem; top: 50%; transform: translateY(-50%);
  color: var(--muted); font-size: 1rem;
}
.mc-pipeline .step:last-child::after { content: ""; }
@media (max-width: 720px) {
  .mc-pipeline { grid-template-columns: 1fr; gap: .6rem; }
  .mc-pipeline .step::after { content: "↓"; right: auto; left: 50%; top: auto; bottom: -1rem; transform: translateX(-50%); }
  .mc-pipeline .step:last-child::after { content: ""; }
}
ol.mc-steps { list-style: none; margin: 0 0 1rem; padding: 0; counter-reset: mcstep; }
ol.mc-steps li {
  counter-increment: mcstep; position: relative; padding-inline-start: 2.6rem;
  margin-bottom: 1rem; line-height: 1.55;
}
ol.mc-steps li::before {
  content: counter(mcstep); position: absolute; left: 0; top: -.05rem;
  width: 1.7rem; height: 1.7rem; border-radius: 50%;
  background: var(--card-bg); border: 1px solid var(--border); color: var(--accent);
  font-family: var(--font-mono); font-size: .78rem; font-weight: 600;
  display: flex; align-items: center; justify-content: center;
}
.mc-limits { display: grid; gap: .9rem; margin: 0 0 1rem; }
.mc-limit {
  background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius);
  padding: 1.1rem 1.3rem;
}
.mc-limit .tag {
  font-family: var(--font-mono); font-size: .72rem; letter-spacing: .06em; text-transform: uppercase;
  color: var(--accent); margin-bottom: .4rem; display: block;
}
.mc-limit p { margin: 0; }
.mc-screens { display: grid; grid-template-columns: repeat(3, 1fr); gap: .8rem; margin: 1.3rem 0; }
.mc-screen {
  border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem;
  background: var(--card-bg);
}
.mc-screen .num { font-family: var(--font-mono); color: var(--muted); font-size: .75rem; }
.mc-screen .name { font-weight: 600; margin-top: .25rem; }
@media (max-width: 640px) { .mc-screens { grid-template-columns: 1fr; } }
</style>

# Архив, в котором можно найти любое выступление

У клуба почти наверняка уже есть накопленный архив прошлых концертов — часть на дисках, часть в облаке, часть в папках без названий. И каждый новый вечер добавляет к этому ещё: аудио с пульта, видео с чьей-то камеры или телефона, фотографии. Найти конкретное выступление можно, только если кто-то вспомнит, когда это было, и пересмотрит всё вручную.

Мы предлагаем разобрать то, что уже накопилось, и дальше держать архив в таком виде, чтобы для этого больше никогда не требовался человек с хорошей памятью.

<div class="mc-pipeline">
  <div class="step"><span class="n">вход</span>Видео с камеры, звук с пульта, фото — как обычно, без особой подготовки</div>
  <div class="step"><span class="n">сначала — всё; дальше — только новое</span>Разбор накопленного архива, потом ежедневный скан на новые файлы</div>
  <div class="step"><span class="n">cpu</span>Whisper-turbo: звук → текст с таймкодами</div>
  <div class="step"><span class="n">индекс</span>Таблица «файл → мероприятие»</div>
  <div class="step"><span class="n">клубу</span>Список файлов по вечеру — на YouTube, артистам, в монтаж</div>
</div>

## Как это устроено

Сначала программа проходит по всему, что уже есть, — по дискам, папкам, облачным хранилищам — и разбирает это целиком: что где лежит, что дублирует друг друга, к какому вечеру что относится. Это разовый проход по всему накопленному архиву, и он закрывает главный вопрос: что вообще есть в этих завалах файлов.

Дальше программа сама возвращается к этой же папке каждую ночь и проверяет, что появилось нового со вчерашнего дня. Обрабатывается только разница — то, что уже разобрано, второй раз не трогается. Архив, который сегодня разобрали один раз, через месяц не превращается обратно в кучу файлов без подписей — он остаётся актуальным сам по себе.

## Что происходит каждую ночь

<ol class="mc-steps">
<li>Скан хранилища — сверка с индексной таблицей, в обработку идут только новые файлы.</li>
<li>Звук — с пульта или из видеозаписи — распознаётся в текст с таймкодами через Whisper-turbo, полностью локально, без видеокарты.</li>
<li>Видео размечается по сменам плана, не покадрово, — чтобы через минуту понять, что происходило в кадре, не пересматривая всю запись.</li>
<li>Файлы одного вечера — видео, аудио, фото — группируются в одно мероприятие по времени съёмки и записи.</li>
<li>Индексная таблица пополняется: какое мероприятие, какие файлы, что на них звучало и когда.</li>
</ol>

## Тексты песен: узнаём точнее с каждым разом

Мы уже собрали базу текстов исполняемых песен разных жанров: перед распознаванием программа подсказывает нейросети, какая песня, скорее всего, звучит, и куда точнее справляется с необычными словами и именами, чем при обычной расшифровке речи. Эта база растёт с каждым новым архивом — включая записи самого клуба: чем больше ваших вечеров мы обработаем, тем точнее становится распознавание именно вашего репертуара и ваших постоянных исполнителей.

## Что вы получите

По любому мероприятию — концерту, творческому вечеру — сразу видно: какие видео, аудиозаписи и фото к нему относятся, что было исполнено и в какую минуту записи. Дальше с этим можно:

- вырезать конкретный номер по таймкоду и выложить на YouTube;
- отдать исполнителю его собственное выступление, не пересматривая весь вечер;
- передать материал в монтаж с уже готовой разметкой, что где искать;
- найти все записи и фото с участием конкретного исполнителя за всё время — не только за один вечер.

## Исполнители: подтвердили один раз — дальше система узнаёт сама

Тот же принцип, что и с голосом, работает с лицом в кадре — на видео или на фотографии: один раз подтверждаете, кто это, дальше система узнаёт этого человека сама, в любой новой записи, без повторного вопроса. Хранится не один усреднённый портрет, а несколько эталонных снимков на человека, поэтому узнавание не теряется даже спустя годы, при другом освещении или причёске.

Для клуба это значит: если артист выступал у вас десять раз за два года, после первого подтверждения система сама находит все десять выступлений — не нужно пересматривать архив вручную каждый раз, когда нужно отдать исполнителю его собственные записи.

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

## Что мы пока не проверяли — честно

<div class="mc-limits">

<div class="mc-limit">
<span class="tag">Whisper-turbo на CPU</span>
<p>Мы много раз запускали его на видеокартах и знаем, что версия для CPU существует и работает в принципе; но именно на процессоре клубного компьютера мы её ещё не тестировали. Первые несколько дней пилота — включая ту самую нагрузку — как раз и покажут реальную скорость: сколько минут обработки уходит на час записи на конкретном железе клуба.</p>
</div>

<div class="mc-limit">
<span class="tag">Только быстрый проход</span>
<p>Whisper-turbo — это черновой, быстрый режим распознавания; более медленный и точный проход, дообучаемый под конкретные голоса, обычно требует видеокарты и здесь не включён. Для поиска, таймкодов и разбивки по мероприятиям точности turbo-режима достаточно; если позже понадобится текст более высокого качества — например, дословные субтитры для публикации, — это отдельный, более тяжёлый шаг, который можно добавить.</p>
</div>

<div class="mc-limit">
<span class="tag">Без Ollama</span>
<p>В этой версии мы сознательно не ставим локальную языковую модель, которая обычно пишет краткое содержание документов и по-настоящему описывает фотографии. Но то, что мы всё равно отдаём — размеченный по времени текст и таблица «файл → мероприятие» — это готовый, компактный материал именно того вида, который любая современная онлайн-нейросеть (ChatGPT, Claude, Gemini — что уже используете) разбирает сама, без всякой донастройки под неё. Резюме вечера, поиск по смыслу, ответы на вопросы по архиву остаются доступны — просто эту работу на последнем шаге берёт на себя онлайн-инструмент, а не наш локальный.</p>
</div>

<div class="mc-limit">
<span class="tag">Описание сюжета фото</span>
<p>Без Ollama система не пишет текстовое описание того, что происходит на фотографии, — не расскажет про атмосферу кадра или что на заднем плане. Она уже узнаёт исполнителей по лицу и группирует фото в мероприятие по времени съёмки — этого достаточно, чтобы найти нужный вечер и нужного человека, но не чтобы получить пересказ содержания снимка.</p>
</div>

</div>

## Отдельный интерфейс

Для клуба это будет отдельная, облегчённая (standalone) версия — узкий инструмент под одну задачу, без лишних настроек и режимов. Интерфейс тоже свой, под три экрана:

<div class="mc-screens">
  <div class="mc-screen"><div class="num">01</div><div class="name">Новое за сегодня</div></div>
  <div class="mc-screen"><div class="num">02</div><div class="name">Мероприятия и файлы</div></div>
  <div class="mc-screen"><div class="num">03</div><div class="name">Плеер с транскриптом</div></div>
</div>

Клик по строке текста в третьем экране перематывает запись на нужную минуту.

## Дальше

Предлагаю начать с пилота прямо на компьютере клуба: разобрать часть уже накопленного архива и подключить несколько ближайших вечеров вживую. Так сразу будет видно и реальный объём того, что уже накопилось, и скорость обработки на конкретном железе клуба.
