Как повторить
Путь 1. Готовый Creator Lab
- Установите Node.js (рекомендуют 24, минимум 22.9) и FFmpeg.
ffmpegиffprobeдолжны быть в PATH (это список папок, где система ищет программы). На Mac:brew install ffmpeg, на Windows:winget install --id Gyan.FFmpeg --exact. - Скачайте инструмент и создайте конфиг:
git clone https://github.com/artemnovitckii/creator-lab.git
cd creator-lab
npm run setup Появится файл .env. В Finder он скрыт, поэтому откройте папку в редакторе кода.
- Впишите в
.envключи.APIFY_TOKENберётся в Apify Console: настройки аккаунта, раздел API и интеграций.TYPESAFE_API_KEYвыдают на https://console.typesafe.ai/keys, когда вас пустят из списка ожидания. Ещё нужен ключ одного сервиса расшифровки:GROQ_API_KEYс https://console.groq.com/keys илиFIREWORKS_API_KEYс https://app.fireworks.ai/. ВTRANSCRIPTION_PROVIDERпо умолчанию стоитfireworks. Если выбрали Groq, впишитеgroq. Ключ второго сервиса оставьте пустым. В каждом кабинете включите оплату и поставьте лимит трат: потолок расходов в самом инструменте ограничивает только Apify. - Проверьте настройки и запустите:
npm run doctor
npm start- Нажмите «New analysis» и введите имя аккаунта без
@. Для пробного запуска поставьте 20 роликов, concurrency 2 (сколько роликов обрабатывается одновременно) и лимит Apify $1. Для русской речи укажите языкru: английский Jev понимает лучше остальных языков. После проверки можно запускать до 1 000 роликов за раз. Запуск ставится на паузу, и готовые расшифровки повторно не оплачиваются. - В дашборде выберите тему, потом тип крючка и нажмите «Compare engagement»: появятся медиана просмотров, лайки и комментарии на 1 000. Рядом с цифрами смотрите размер выборки. «Export JSON» сохраняет результат.
Путь 2. Своя сборка на Python
- На странице Apify Instagram Reel Scraper укажите аккаунт, а в
resultsLimitпоставьте около 500. Транскрипт и скачивание видео выключите: обе опции платные. Сохраните результат какreels.json. - Сразу скачайте звук по
audioUrl, а если его нет, поvideoUrl: ссылки быстро перестают работать. Расшифровать можно у Groq: модельwhisper-large-v3-turbo, $0.04 за час звука, минимум 10 секунд на запрос, на бесплатном тарифе файл до 25 МБ. Бесплатный вариант работает на вашем компьютере (brew install whisper-cpp, нужна многоязычная модель без.en):
ffmpeg -i reel.mp4 -ar 16000 -ac 1 reel.wav
curl -L -o ggml-small.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
mkdir -p transcripts
whisper-cli -m ggml-small.bin -f reel.wav -l auto -otxt -of transcripts/SHORTCODE Вместо SHORTCODE подставьте shortCode ролика.
- Получите ключ Jev на https://console.typesafe.ai/keys, затем выполните
pip install typesafe-sdk(нужен Python 3.10 или новее) иexport TYPESAFE_API_KEY=.... - Запустите скрипт. Описания категорий в нём примерные. Описания, которые использует Creator Lab, лежат в
lib/schema.mjsего репозитория.
import csv, json
from pathlib import Path
from typesafe_sdk import Choice, TypeSafeClient
client = TypeSafeClient() # ключ берёт из TYPESAFE_API_KEY
QUESTIONS = {
"topic": Choice(
instructions="What is the main topic of this reel script?",
criteria={
"business": "Running or growing a company",
"marketing": "Ads, leads, offers, funnels",
"mindset": "Habits, discipline, motivation",
"technology": "Tools, AI, software",
"other": "None of the above",
},
),
"hook": Choice(
instructions="What kind of hook does the opening of this script use?",
criteria={
"curiosity": "Opens a question or gap the viewer wants closed",
"recognition": "Describes a situation the viewer sees themselves in",
"result": "Opens with a concrete outcome or number",
"direct": "Addresses the viewer or states the offer at once",
"mistake": "Opens with an error or a warning",
"contradiction": "Attacks a common belief",
"other": "None of the above",
},
),
"structure": Choice(
instructions="How is this script structured?",
criteria={
"problem_solution": "A problem, then the fix",
"steps": "A numbered or sequential how-to",
"comparison": "Two things set against each other",
"opinion": "A stated position with support",
"explanation": "Explains how something works",
"qa": "A question and its answer",
"other": "None of the above",
},
),
}
reels = json.load(open("reels.json"))
rows = []
for r in reels:
f = Path("transcripts") / f"{r.get('shortCode')}.txt" # текст от whisper из шага 2
text = f.read_text().strip() if f.exists() else (r.get("transcript") or "").strip()
if not text:
continue
a = client.system_one(state=text, questions=QUESTIONS, model="jev-1.13.0").answers
rows.append({
"url": r.get("url"),
"plays": r.get("videoPlayCount"),
"likes": r.get("likesCount"),
"topic": a["topic"].choice,
"hook": a["hook"].choice,
"structure": a["structure"].choice,
})
with open("labeled.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=rows[0].keys())
w.writeheader()
w.writerows(rows)- Сначала прогоните 20 роликов. Если ярлык расходится с вашей оценкой чаще чем в одном ролике из пяти, уточните описания в
criteria. - Посчитайте медиану просмотров по типам крючка:
groupby("hook")["plays"].median()в pandas.
Как проверить результат
В Creator Lab пробный запуск на 20 роликах проходит без красных ошибок и стоит около 5 центов у Apify и около цента у Jev. Откройте пять роликов через «Original Reel» и сверьте их ярлыки со своим ощущением. Ярлыки с уверенностью ниже 0.65 или unclear инструмент сам помечает для ручной проверки. В своей сборке у каждой строки labeled.csv должны быть заполнены topic, hook и structure, а «other» не должен набирать больше пары десятков процентов. Если один тип крючка забрал 80–90 % роликов, описания слишком широкие.
Ссылки
- Creator Lab: бесплатный инструмент (MIT). Берите оригинал
artemnovitckii/creator-lab: у него есть чужие копии. - Инструкция по установке: ключи, пробный запуск, разбор ошибок.
- Apify Instagram Reel Scraper: сборщик роликов.
- TypeSafe AI: Jev: что за модель и сколько стоит.
- Модели и лимиты Jev: версии, лимиты, языки.
- Groq: speech-to-text: расшифровка речи, цены и ограничения.
- whisper.cpp, модели: модели для расшифровки на своём компьютере.
Источник: artem.novitckii, Instagram Reels.