halfsize CLI
CLI сжимает видео до заданного размера локально через FFmpeg и показывает оценку качества VMAF и SSIM, есть скилл для агента
- 101 ★ репозитория
- Последний коммит
- MIT
Минимальный доступ
Почему такой уровень
- Запускает FFmpeg и пишет новый файл рядом с исходником, в сеть не ходит после установки
- При установке npm скачивает бинарник FFmpeg
Установка
- Работает в
В терминале, через 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`.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
CLI-инструментыffmpeg-skill — скилл и MCP-сервер: агент режет и склеивает видео, правит звук, делает субтитры и экспорт под TikTok, Reels и YouTube через локальный FFmpeg
CLI frames вставляет скриншоты и записи экрана в официальные рамки устройств Apple и сам определяет модель по размеру кадра
Скилл и формат .cdaf: текстовое описание видео рядом с файлом, чтобы агент читал его, а не пересматривал ролик заново.
Агент монтирует короткие видео с говорящим человеком: расшифровка, субтитры, B-roll и экспорт для Xiaohongshu, Douyin и Channels
CLI для программного создания видео из HTML: агент собирает кадры по шаблонам и рендерит готовый MP4 на вашем компьютере
Команда в стиле FFmpeg, которая режет видео локально и отправляет тяжелые задачи в облако Volcengine: улучшение, ASR, OCR
Сравнение с похожими
Карточки с тем же главным запросом: чем они отличаются.
| Инструмент | Официальный | Звезды репозитория | Главное отличие |
|---|---|---|---|
| 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.