Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
ИнфраструктураAPI / Продукт · В работуHabr AI→ оригинал

Разработчик с ИИ-агентами воссоздал Winamp для Mac и уложился в 2–3% CPU

Автор несколько лет откладывал свой плеер в стиле Winamp для Mac, а с ИИ-агентами наконец довёл его до релиза. MacAmp написан на Swift, SwiftUI и AppKit, без Electron: на M1 он берёт около 0,01% процессора на паузе и 2–3% при игре со спектроанализатором. Код в основном писали агенты, а человек отвечал за идею, архитектуру и приёмку. Проект открыт под лицензией MIT.

AI-обработка оригинала Habr AI; редакция Hamidun News
Разработчик с ИИ-агентами воссоздал Winamp для Mac и уложился в 2–3% CPU
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1Агент читает видение, план и справочник по Winamp 2.x перед работой
Ключевой факт #2AGENTS.md, скиллы и тесты одной командой ./build.sh test держат агента в рамках
На ощущения агентам полагаться нельзякроссфейд и drag проверяют руками

Знакомая история: есть заброшенная папка с личным проектом, который три-четыре года назад остановился на первом экране и базовом проигрывании. Разработчик Alexrel искал для Mac простой плеер в духе Winamp, но современные либо превратились в комбайны со стримингами, либо работают на Electron и зря грузят процессор. Свой плеер он наконец довёл до конца с помощью ИИ-агентов. Получился MacAmp: открытая репродукция Winamp 2.95 на Swift, SwiftUI и AppKit, без веб-вью, универсальная сборка для Apple Silicon и Intel, нужна macOS 14 или новее.

Что получилось в итоге

Плеер повторяет оригинал вплоть до окон, меню и горячих клавиш. Главное окно, эквалайзер и плейлист магнитно стыкуются, есть режимы Shade и Double Size. Работают любые скины Winamp 2.x, играются MP3, AAC, FLAC, Ogg, MIDI и другие форматы, поддерживаются интернет-радио, CD-рипы и десятиполосный эквалайзер. Современные функции спрятаны внутрь: например, звук сам переключается на новое устройство вывода.

Главная метрика для утилиты, которая должна висеть в углу, это аппетиты. На M1 плеер на паузе берёт около 0,01% процессора, при игре со спектроанализатором 2–3%. Когда ничего не играет, движок останавливается, а анализатор через две секунды тишины перестаёт присылать кадры.

Инженерные детали, которые стоит подсмотреть

Три отдельных безрамочных NSWindow нужно двигать как одно целое, а в macOS сгруппировать окна нечем. Автор считает позицию каждого окна от точки начала перетаскивания плюс общий сдвиг. Если добавлять маленькие шаги на каждое движение мыши, ошибки округления накапливаются, и стыки разъезжаются. Магнитное притяжение к краям считается один раз по предполагаемым рамкам, а результат применяется ко всей группе.

Вторая деталь касается скинов. Это растровые BMP для экранов старой плотности, и при стандартной отрисовке на Retina шрифт и цифры таймера расплываются. Поэтому окна рисуют себя сами с interpolationQuality = .none, а спрайты вырезаются по пикселям оригинала. Эквалайзер построен на AVAudioUnitEQ: полосы там параметрические фильтры, а предусилитель реализован через globalGain.

Как здесь работали агенты

По словам автора, большую часть кода написали ИИ-агенты. Он придумывал, ставил задачи, смотрел результат и решал, что выпускать. Схема сработала, потому что человек понимает, каким должен быть продукт, и замечает, когда архитектура уезжает в сторону, а конкретные вызовы AppKit знает агент.

Помогли три вещи:

  • Документы в репозитории. Видение, план по этапам, чек-лист, справочник по размерам и поведению Winamp 2.x и скриншоты оригинала. Агент читает всё это перед работой, и не нужно каждый раз объяснять, что «как в Winamp» значит буквально.
  • AGENTS.md и скиллы. Правила и инструкции о том, как безопасно менять эквалайзер и плейлист, не дают агенту ломать работающее.
  • Тесты одной командой. ./build.sh test позволяет быстро проверять каждое изменение.

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

Ограничения и практический вывод

У проекта есть честные пробелы. Нет визуализаций Milkdrop, MP3- и Ogg-кодировщика для CD, трекерных модулей и скробблера Last.fm. Приложение намеренно не подписано Developer ID: плеер подменяет иконки файлов внутри своего бандла и переподписывается локально, поэтому при первом запуске Gatekeeper покажет предупреждение. Обойти его можно через настройки безопасности или командой xattr -dr com.apple.quarantine. Кроме того, автор тестировал плеер на одном Mac и одной фонотеке, поэтому просит отчёты о кроссфейде, CUE, радио после обрыва сети, Bluetooth, сне Mac и больших плейлистах.

Для практика вывод простой. Агентам лучше давать не абстрактное «сделай плеер», а проект с документами, правилами и автоматической проверкой. Тогда они работают как исполнитель, который знает API, а продуктовые решения и приёмка остаются за вами. Исходники и DMG-сборка лежат на GitHub под лицензией MIT.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: что получилось в итоге?

Плеер повторяет оригинал вплоть до окон, меню и горячих клавиш. Главное окно, эквалайзер и плейлист магнитно стыкуются, есть режимы Shade и Double Size. Работают любые скины Winamp 2.x, играются MP3, AAC, FLAC, Ogg, MIDI и другие форматы, поддерживаются интернет-радио, CD-рипы и десятиполосный эквалайзер. Современные функции спрятаны внутрь: например, звук сам переключается на новое устройство вывода. Главная метрика для утилиты, которая должна висеть в углу, это аппетиты.

Что известно по теме: инженерные детали, которые стоит подсмотреть?

Три отдельных безрамочных NSWindow нужно двигать как одно целое, а в macOS сгруппировать окна нечем. Автор считает позицию каждого окна от точки начала перетаскивания плюс общий сдвиг. Если добавлять маленькие шаги на каждое движение мыши, ошибки округления накапливаются, и стыки разъезжаются. Магнитное притяжение к краям считается один раз по предполагаемым рамкам, а результат применяется ко всей группе. Вторая деталь касается скинов.

Что известно по теме: как здесь работали агенты?

По словам автора, большую часть кода написали ИИ-агенты. Он придумывал, ставил задачи, смотрел результат и решал, что выпускать. Схема сработала, потому что человек понимает, каким должен быть продукт, и замечает, когда архитектура уезжает в сторону, а конкретные вызовы AppKit знает агент. Помогли три вещи: Документы в репозитории. Видение, план по этапам, чек-лист, справочник по размерам и поведению Winamp 2.x и скриншоты оригинала.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Практика · Hamidun Academy

Соберите рабочего ИИ-агента или сервис своими руками без ручного кода

В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.

Открыть 72ч бесплатный доступ →Интенсив по Вайб-кодингу
Что вы думаете?
Загружаем комментарии…