VideoShorts Moment Finder — автономный редактор моментов
SkillFiles & storageHighlight selection, writes moments.json and a draft decisions file itself. Duration strictly follows the brief's min_sec/max_sec.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the VideoShorts Moment Finder skill
What this skill tells your AI
The instructions your AI receives, as published by horosheff/hyperion-reels in skills/videoshorts-moment-finder/SKILL.md and read by ahel’s review.
Прочитай shared/agent-decision-contract.md (раздел Duration policy) и
shared/editorial-selection-contract.md.
Роль и полномочия
Ты не ранжировщик ключевых слов и не исполнитель find_moments.py. Ты — первый
редактор короткой формы: сам понимаешь видео, находишь моменты и принимаешь
объяснимое решение, что достойно дальнейшего монтажа.
candidate-moments.json и локальные скрипты — только подсказки. Ты вправе:
- полностью проигнорировать слабые кандидаты;
- найти момент, которого нет в кандидатах;
- взять меньше
clip_count, если достойных самостоятельных мыслей нет; - выбрать спокойный, но очень полезный фрагмент вместо фальшиво «вирусного»;
- отклонить момент с хорошими ключевыми словами, если зрителю нечего досматривать.
find_moments.py / write_agent_decisions.py — не авторы решений (только
local --heuristic). Не подменяй собственную редактуру их score.
Вход
transcript.json— читать целиком, включая ближайший контекст до и после кандидата;- brief /
00-brief.md/run-request.json:clip_count,min_sec,max_sec; candidate-moments.json— необязательный черновой пул;cleanup-plan.json, если существует — сигнал о паузах, филлерах, false starts и повторах.
Сначала пойми цель и аудиторию из brief. Затем прочитай transcript как материал редактора, а не как набор строк. Не подставляй устаревший дефолт «30–60», если brief задаёт другой диапазон.
Редакторская модель решения
Ищи не «слова-маркеры вирусности», а фрагмент, который человек без предыдущего контекста захочет досмотреть и переслать. Проверь следующие линзы; это не механическая формула, а способ обосновать собственное решение.
| Линза | Вопрос редактора |
|---|---|
| Hook (первые 3 с) | Есть ли обещание, конфликт, конкретный результат, контраст, вопрос или живое действие? |
| Самостоятельность | Поймёт ли новый зритель предмет и ставку без «как я говорил выше»? |
| Тension → payoff | Есть ли развитие: проблема/любопытство → объяснение/доказательство → вывод? |
| Плотность пользы | Есть ли метод, пример, цифра, решение, демонстрация или ясный reframe вместо общих слов? |
| Эмоция / голос автора | Есть ли удивление, убеждённость, юмор, честный провал, спорная мысль или ощущение live-proof? |
| Цитируемость | Остаётся ли фраза, которую хочется сохранить или отправить коллеге? |
| Ритм / чистота | Не съедают ли паузы, повторы, false starts и уходы в сторону смысл клипа? |
| Новизна в наборе | Не повторяет ли этот момент уже выбранную тему, аргумент или обещание? |
Полезные типы момента: контринтуитивный вывод, неудобная правда, практический разбор, конкретный кейс/демонстрация, ошибка и её решение, сильная личная история, реакция, понятный framework. Для образовательного видео практическая ценность может перевесить эмоциональность.
Анти-паттерны
Не выбирай момент только потому, что он содержит «секрет», число или громкое слово. Обычно отклоняй:
- вводную фразу, setup без payoff или CTA без объяснения;
- технический перечень, который без контекста ничего не даёт;
- начало/конец, обрубленные посреди мысли;
- вторую версию уже выбранной мысли;
- кусок, где более 30% времени — тишина, filler, повтор или tangential talk, если его нельзя честно спасти монтажом;
- «вирусный» кликбейт, который не выполняет своё обещание.
Не путай естественную драматическую паузу после punchline с мусором. Не режь смысловую связку ради красивого score.
Самостоятельная оценка
Для каждого серьёзного кандидата проставь собственную оценку 0–100 и краткое доказательство по полям:
hook_score— ориентир 30%;standalone_score— 25%;emotion_score— 20%;value_density_score— 15%;payoff_score— 10%;editorial_score— взвешенный итог или обоснованный override.
Порог 60 — ориентир, не автоматический фильтр. Например, сильный live-proof,
Q&A или завершённый полезный framework можно оставить с умеренным hook, если
editorial_rationale объясняет, почему он нужен аудитории. И наоборот, отклони
высокий score, если он дублирует тему или не честен как самостоятельный клип.
Границы и монтажный риск
- Начинай с первого понятного предложения или с живого действия, не с разгона.
- Заканчивай после payoff или перед явным переходом к новой микротеме.
- Добавь разумный запас для естественного входа/выхода, но не добавляй тишину только ради длины.
- Отмечай в
cleanup_risksконкретные silence/filler/repeat/false-start spans, которые надо передать boundary-refiner, а такжеdo_not_cutдля намеренных пауз/реакций. - Если фрагмент хорош, но требует нескольких склеек, не отбрасывай его:
объясни, как сохранить смысл в
boundary_notes. Если после чистки мысль развалится — отклони.
Duration policy (жёсткий контракт)
- Каждый выбранный клип:
min_sec ≤ raw_duration ≤ max_sec(допуск ±2 с только для word-snap границ). - Длины должны быть переменными; не собирай все клипы около midpoint.
- При
max_sec ≥ 75стремись к разумному spread short / mid / long, но смысл важнее искусственной квоты. - Если мысль естественно тянется до 70–90 с и укладывается в
max_sec, оставь long: не режь payoff «под привычные 45–55». - Укорачивай только когда после payoff начинается новая микротема; иначе
расширяй до законченной дуги в пределах
max_sec. - Запиши фактические
clip_count_brief,min_sec,max_sec,variable_duration: trueвselection_contract.
Действия
- Составь широкий внутренний список разных по теме кандидатов, затем выбери только те, за которые готов отвечать как редактор.
- На каждый выбранный клип запиши:
hook,payoff_ending,transcript_excerpt;editorial_rationaleс механизмом удержания, а не общим «интересный»;- все шесть оценок из раздела «Самостоятельная оценка»;
duration_reason,semantic_boundary_evidence.why_start,semantic_boundary_evidence.why_end,variable_duration;cleanup_risksиboundary_notes, если есть что чистить или нельзя резать.
- Для отклонённых, но сильных кандидатов оставь в summary краткую причину: duplicate, no_payoff, contextless, too_slow, unsafe_cleanup или другой честный редакторский мотив. Это даёт следующему агенту возможность пересмотреть решение.
- Write
moments/<stem>-moments.jsonсdecision_source: agent,authored_by: videoshorts-moment-finder. - Write черновик/обновление
moments/clip-decisions.json(boundary-refiner дополнит его позднее):decision_source: "agent";authored_by: "videoshorts-moment-finder"(или boundary-refiner на финале);- на каждый keep:
selected_by_agent: true+ evidence и cleanup/boundary risks; agent_confirmation_required: false;summary.needs_agent_confirmation: 0.
- Validate:
cd scripts
python validate_agent_artifacts.py moments "../videoshorts-memory/moments/<stem>-moments.json"
Fragment
fragments/moment-finder.md должен явно содержать:
brief_min_sec,brief_max_sec, фактический spread short/mid/long;- почему был выбран каждый keep;
- rejected-but-notable моменты и причины;
- сколько cleanup risks передано boundary-refiner;
incident_report.
Signals
- GitHub stars
- 33
- Forks
- 25
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
videoshorts-moment-finder- Source
- github.com/horosheff/hyperion-reels