halfsize CLI

CLI сжимает видео до заданного размера локально через FFmpeg и показывает оценку качества VMAF и SSIM, есть скилл для агента

  • 101 ★ репозитория
  • Последний коммит
  • MIT
CLI

Минимальный доступ

Почему такой уровень

  • Запускает FFmpeg и пишет новый файл рядом с исходником, в сеть не ходит после установки
  • При установке npm скачивает бинарник FFmpeg
Все причины и проверки

yklovepython/halfsize

Установка

В терминале, через SkillFoxx CLI

npx skillfoxx add cli/halfsize

Определит агенты на машине, покажет уровень доступа и зафиксирует версию.

Другие способы установки

Доступ и проверки

Как мы проверяем

Минимальный доступИнструмент ничего не запускает и не ходит в сеть.

  • Запускает FFmpeg и пишет новый файл рядом с исходником, в сеть не ходит после установки
  • При установке npm скачивает бинарник FFmpeg

Это чужой код. Посмотрите файлы в репозитории перед установкой.

Что делает

halfsize уменьшает видео до размера, который вы задаете: 25mb, 700k или имя приложения, например discord. Команда сама считает битрейт, подбирает разрешение из лестницы до 240p, кодирует файл в два прохода кодеком H.264 или H.265 и пишет рядом новый файл с суффиксом размера. Исходник остается на месте, файл никуда не загружается. После кодирования программа замеряет результат. SSIM считается в трех точках ролика, VMAF в середине, а вердикт выводится словами: от «неотличимо» до «заметные потери». HDR-ролики с iPhone (HLG и PQ) в том же проходе переводятся в SDR, поэтому цвета не выцветают. Флаг `--json` отдает план, точность попадания в размер и оценки качества для скриптов. В репозитории лежит скилл `skills/halfsize/SKILL.md`. Он учит агента запускать `npx halfsize`, читать результат и не обещать «без потери качества». Есть и локальное веб-приложение (`npx halfsize --web`) и действие для GitHub Actions.

Для кого. Тем, кто присылает видео в мессенджеры и почту с лимитом на файл, и агентам Claude Code, Codex или Cursor, которым поручают сжать ролик под площадку.

Подходит, если

  • Ролик на 130 МБ надо отправить в Discord, а лимит бесплатного аккаунта 20 МБ
  • Агент должен уложить запись экрана в 16 МБ для WhatsApp и сказать, сколько качества ушло
  • Перед загрузкой в сервис хочется увидеть план сжатия без кодирования: помогает `--dry-run`
  • В CI после теста лежит видеоартефакт, и его нужно уменьшить до лимита сборки через действие для GitHub Actions
  • Нужна оценка, насколько разрушит картинку цель в 5 МБ: сравнить VMAF для разных размеров

Не подходит, если

  • Нужен монтаж, нарезка или субтитры: инструмент только сжимает и ничего не склеивает
  • Исходник уже меньше цели: скилл велит остановиться и сообщить, перекодировать файл незачем
  • Важна сохранность HDR: ролики из HLG и PQ принудительно переводятся в SDR
  • Нужен формат или кодек вне H.264 и H.265, например AV1

Пример запроса к агенту

Сожми promo.mp4 так, чтобы он прошел в Discord, и покажи оценку качества

Ограничения

  • Требуется Node.js 18 или новее. При первой установке npm скачивает сборку FFmpeg, за прокси или с проверкой TLS загрузка может не пройти.
  • Лимиты для `--for` (Discord 20 МБ, WhatsApp 16 МБ, Gmail 18 МБ) взяты на ноябрь 2026 и меняются. Флаг `--to` всегда главнее.
  • Если цель меньше минимума для такой длительности, команда выдает наименьший достижимый размер. Принудительное кодирование включает `--force`.
  • Версия проекта 0.1.x, интерфейс может меняться.

Как отключить. Скилл удаляется вместе с папкой `halfsize` в `.claude/skills/` или в каталоге скиллов другого агента. Глобальный пакет убирает `npm uninstall -g halfsize`. Команда `npx halfsize` ничего не ставит в систему, кроме кэша npm.

Частые вопросы

Как сжать видео до 20 МБ для Discord?

Выполните `npx halfsize video.mp4 --for discord`. Команда целится в 20 МБ и подбирает разрешение под этот бюджет. Для произвольного размера используйте `--to 25mb`.

Видео куда-нибудь загружается?

Нет. Кодирование идет локально через FFmpeg, и скилл прямо запрещает агенту загружать файл или советовать онлайн-сжатие первым шагом.

Как поставить скилл halfsize в Claude Code?

Выполните `npx skills add YKLovePython/halfsize`. Скилл можно скопировать вручную в `.claude/skills/halfsize/`.

Чем halfsize отличается от HandBrake и голого ffmpeg?

HandBrake требует разбираться в кодеках и пресетах, ffmpeg нужно кормить одиннадцатью флагами. halfsize принимает целевой размер и после кодирования сообщает VMAF и SSIM.

Что делать, если halfsize не находит FFmpeg?

Выполните `npx halfsize --doctor`: он покажет найденные FFmpeg и кодеки. Путь к своей сборке задают переменные `HALFSIZE_FFMPEG` и `HALFSIZE_FFPROBE`, а на macOS помогает `brew install ffmpeg`.

Обсуждение

Вопросов и отзывов пока нет.

ffmpeg-skill — скилл и MCP-сервер: агент режет и склеивает видео, правит звук, делает субтитры и экспорт под TikTok, Reels и YouTube через локальный FFmpeg

СкиллРасширенный доступ5,2 тыс.Звезды репозитория

Скилл и формат .cdaf: текстовое описание видео рядом с файлом, чтобы агент читал его, а не пересматривал ролик заново.

СкиллРасширенный доступ226Звезды репозитория

Агент монтирует короткие видео с говорящим человеком: расшифровка, субтитры, B-roll и экспорт для Xiaohongshu, Douyin и Channels

СкиллРасширенный доступ209Звезды репозитория

CLI для программного создания видео из HTML: агент собирает кадры по шаблонам и рендерит готовый MP4 на вашем компьютере

CLIРасширенный доступ4,8 тыс.Звезды репозитория
Официальный

Команда в стиле FFmpeg, которая режет видео локально и отправляет тяжелые задачи в облако Volcengine: улучшение, ASR, OCR

CLIШирокий доступ223Звезды репозитория

Сравнение с похожими

Карточки с тем же главным запросом: чем они отличаются.

ИнструментОфициальныйЗвезды репозиторияГлавное отличие
halfsize (эта карточка)нет101
ffmpeg-skillнет5 244монтаж, субтитры и экспорт через FFmpeg, а halfsize занят одной задачей: целевой размер с оценкой качества
video-useнет30 939монтаж с вырезанием пауз и цветокоррекцией, размер файла не задает

Коротко о README

README начинается с проблемы лимитов мессенджеров и сравнения с HandBrake и онлайн-сжимателями. Дальше идут быстрый старт, локальное веб-приложение, таблица размеров для площадок, описание пяти шагов работы, измеренная цена каждого размера и справочник флагов. Отдельные разделы посвящены установке за прокси, FAQ и подключению скилла к агенту.

Бейдж для README

Исходный SKILL.md

---
name: halfsize
description: Compress a video to an exact target size (20 MB, 16 MB, 700k, ...) on the local machine with FFmpeg, then verify quality with VMAF/SSIM. Use when a user needs a video to fit a platform cap, asks to "make this smaller", or wants to know what a size cut costs in quality.
---

# halfsize

`halfsize` is a local CLI. It does the bitrate math, picks a resolution, encodes twice,
and reports the measured quality. It never uploads the file.

## When to use this

- "Make this fit in 25 MB" / "Discord won't take it" / "WeChat says the file is too big"
- "Compress this but don't ruin it" — run it and report VMAF instead of guessing
- "How small can this go?" — try a target and read the verdict

## Commands

```bash
# exact size
npx halfsize input.mp4 --to 25mb

# let a platform cap pick the size
npx halfsize input.mp4 --for discord
npx halfsize input.mp4 --for gmail     # 18 MB, safe under the 25 MB message cap
npx halfsize input.mp4 --for outlook   # 15 MB, safe under the 20 MB message cap

# several files, one command
npx halfsize a.mp4 b.mp4 c.mp4 --to 10mb

# smaller, at the cost of compatibility
npx halfsize input.mp4 --to 10mb --codec h265

# keep resolution, accept a worse ratio
npx halfsize input.mp4 --to 25mb --no-downscale

# no soundtrack
npx halfsize input.mp4 --to 10mb --no-audio

# inspect the plan without encoding
npx halfsize input.mp4 --to 25mb --dry-run --json

# machine-readable result (plan, accuracy, VMAF, SSIM)
npx halfsize input.mp4 --to 25mb --json
```

With more than one input, `--json` returns `{ "files": [ ... ] }`.

If `npx halfsize` is unavailable, use `npx github:YKLovePython/halfsize` with the same flags.

Сообщить о проблеме