Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ DEEPGRAM_UTT_SPLIT=0.8
OPENROUTER_API_KEY=
# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1

# Целевой уровень качества URL-видео: 144..4320 или best.
# Это мягкая цель: если формата не выше цели нет, берётся ближайший вариант выше.
VIDEO_TARGET_RESOLUTION=720

# Модели LLM через OpenRouter (приоритетный список, fallback при 429)
LLM_MODELS_SPLIT=google/gemini-3.6-flash,google/gemini-3.5-flash,google/gemini-3.5-flash-lite
LLM_MODELS_SUBSPLIT=google/gemini-3.6-flash,google/gemini-3.5-flash,google/gemini-3.5-flash-lite
Expand Down
5 changes: 1 addition & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
# JS-рантайм для yt-dlp (YouTube требует исполнения JS-челленджей).
# Установщик кладёт бинарь в $DENO_INSTALL/bin/deno → /usr/local/bin/deno.
RUN apt-get update && apt-get install -y --no-install-recommends curl unzip \
&& curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh \
&& curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh -s v2.9.3 \
&& apt-get purge -y curl unzip && apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*

COPY --from=builder /install /usr/local
# Свежий yt-dlp (старая версия не тянет актуальный YouTube).
# Устанавливаем ПОСЛЕ COPY из builder, чтобы не перезатёрло свежую версию.
RUN pip install --no-cache-dir --upgrade yt-dlp
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir --no-deps -e .
Expand Down
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
</p>

HTTP-сервис обработки лекций: на вход — лекция в виде аудиозаписи, видеофайла или
ссылки на видео (YouTube/HTTP), опционально + слайды PDF/PPTX; на выходе —
ссылки на видео (YouTube, публичные посты X и обычные HTTP(S)-URL), опционально +
слайды PDF/PPTX; на выходе —
структурированный конспект в формате Obsidian (Markdown + нарезанные
медиафрагменты + слайды), упакованный в ZIP.

Expand Down Expand Up @@ -110,6 +111,12 @@ Expiration 1 день (временные ZIP от `/result-url`). Префик
питон-пакеты `opencv-python-headless` и `numpy` (локальный анализ видеоряда для
стадии `video_slides`).

Для X поддерживаются публичные `x.com`/`twitter.com`-посты без cookies. Если пост
содержит несколько видео, URL поста выбирает первое вложение, а суффикс `/video/N` —
явно указанное. Закрытые, удалённые и требующие авторизации посты не поддерживаются.
Качество всех URL-видео задаёт `VIDEO_TARGET_RESOLUTION`: числовое значение является
ориентационно-независимой мягкой целью, `best` снимает ограничение.

Проверка:

```bash
Expand Down Expand Up @@ -287,6 +294,7 @@ python scripts/submit_task.py submit --audio lecture.mp3 --slides slides.pdf
# видео (слайды извлекаются из видеоряда автоматически)
python scripts/submit_task.py submit --video lecture.mp4
python scripts/submit_task.py submit --video-url "https://youtu.be/abc"
python scripts/submit_task.py submit --video-url "https://x.com/i/status/2078106556634124335"

# видео без слайдов
python scripts/submit_task.py submit --video lecture.mp4 --no-slides
Expand Down Expand Up @@ -340,6 +348,7 @@ python scripts/submit_task.py --base http://my-host:8000/api/v1 status <task_id>
| `DEEPGRAM_UTT_SPLIT` | Порог паузы utterance в секундах (по умолчанию `0.8`). |
| `OPENROUTER_API_KEY` | Ключ OpenRouter; LLM-вызовы идут через BYOK Google AI Studio. |
| `OPENROUTER_BASE_URL` | Base URL OpenRouter (по умолчанию `https://openrouter.ai/api/v1`). |
| `VIDEO_TARGET_RESOLUTION` | Целевое разрешение URL-видео: `144..4320` либо `best`; по умолчанию `720`. |
| `LLM_MODELS_*` | Приоритетные списки моделей по этапам структуризации (fallback при 429). |
| `LLM_CONCURRENCY_*` | Параллельность вызовов LLM по этапам. |
| `LLM_EFFORT_*` | Reasoning effort по этапам структуризации (по умолчанию `low`). |
Expand Down
3 changes: 3 additions & 0 deletions deploy/env.core.example
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ DEEPGRAM_UTT_SPLIT=0.8
OPENROUTER_API_KEY=
# OPENROUTER_BASE_URL=https://openrouter.ai/api/v1

# Целевой уровень качества URL-видео: 144..4320 или best.
VIDEO_TARGET_RESOLUTION=720

LLM_MODELS_SPLIT=google/gemini-3.6-flash,google/gemini-3.5-flash,google/gemini-3.5-flash-lite
LLM_MODELS_SUBSPLIT=google/gemini-3.6-flash,google/gemini-3.5-flash,google/gemini-3.5-flash-lite
LLM_MODELS_RENDER=google/gemini-3.5-flash-lite,google/gemini-3.6-flash,google/gemini-3.5-flash
Expand Down
Loading
Loading