| Время | Событие | Задача | Длительность |
|---|---|---|---|
| Пока нет событий делегирования | |||
Собрать статический веб-дневник задач без фреймворков и сборки: 4 файла (index.html, style.css, app.js, data.js), жёстко заданные CSS-токены дизайна (тёмный сайдбар, лайм-акцент #C8FF3D, светлая рабочая область), хранение состояния в localStorage с мерджем сид-данных из data.js, автоматический перенос незакрытых задач на следующий день, помодоро-таймер на реальном времени. Полный текст спеки — во вкладке «Выполнение → Код», карточка промпта.
Равные условия: обеим моделям выдан один и тот же файл SPEC.md и один и тот же стартовый промпт, каждая работала в своей папке независимо. Qwen — локально через Ollama/opencode, DeepSeek V4 Flash — облако через OpenRouter/opencode.
| Критерий | Qwen3-Coder-Next (локально) | DeepSeek V4 Flash (облако) |
|---|---|---|
| Время | 2 ч 25 мин 34 сек | 4 мин 47 сек (в 30 раз быстрее) |
| Стоимость | $0 | $0.023 |
| Токены вход/выход | 216 244 / 14 082 | 80 649 / 13 382 |
| Все 4 файла | Нет — index.html, style.css, data.js. app.js не написан | Да, все четыре |
| Соответствие дизайн-токенам спеки | Нет — своя мятно-зелёная светлая тема вместо тёмного сайдбара с лайм-акцентом | Да, точное совпадение переменных из SPEC.md |
| Данные | Захардкожены прямо в HTML, никакой связи с data.js/localStorage | Полная интеграция: мердж сида, localStorage, перенос задач |
| Качество разметки | Сама по себе не хаотичная, читаемая структура — но не по спеке, и есть баг: артефакт-галлюцинация «休息» на всех тегах «Перерыв», плюс название приложения на английском («Day Diary») вместо русского | Чистая, семантичная, ID-шники совпадают с app.js один в один |
| Работает при открытии | Нет — визуально «муляж» без логики, чекбоксы и таймер нерабочие | Да, полностью — проверено вживую (чекбоксы, таймер, счётчики) |
| Поведение процесса | Дважды переписала index.html и style.css заново, сама решила закончить (finish: stop), не дойдя до app.js | Дошла до конца за один проход |
Итог: локальная модель потратила в 30 раз больше времени и весь бюджет на нерабочий макет мимо спеки — не только не успела, но и не поняла задачу правильно. Облачная модель уложилась в 5 минут и 2.3 цента и сделала рабочее приложение строго по ТЗ.
Сгенерировать иллюстрацию для поста на тему «локальная модель vs облачная» в виде гонки черепахи (Ollama) и зайца (DeepSeek): заяц побеждает, черепаха отстаёт/повержена, читаемая надпись «OLLAMA vs DEEPSEEK», фирменные лайм-цвета, лёгкая ирония над старым хайпом «зачем платить за облако, если есть локалка».
Первая же попытка зависла на 30+ минут — шаги сэмплирования шли по 2-5 минут вместо ожидаемых 1-3 секунд. Диагностика по логам ComfyUI и nvidia-smi показала: 100% загрузки GPU, но всего ~65 Вт мощности — это признак не вычислений, а постоянной подкачки памяти. Причина: UNet (6.6 ГБ) и текстовый энкодер T5-XXL (4.7 ГБ) вместе почти полностью забивали 12 ГБ видеокарты, и системе приходилось на каждом шаге перегружать веса. Фикс — перевод текстового энкодера на CPU (он нужен только один раз, до сэмплирования): скорость выросла примерно в 100 раз, с 150-290 сек/шаг до ~2.2 сек/шаг.
Повторная нестабильность: дважды генерация снова проваливалась в тот же swap-тормоз посреди уже стабильного прогона — не из-за самого воркфлоу, а из-за фоновой конкуренции за 12 ГБ видеопамяти с другими процессами на компьютере (голосовая диктовка на CUDA, несколько открытых браузеров). Помогал полный перезапуск ComfyUI перед повторной попыткой.
Тёмная атмосфера, надпись на баннере частично разъехалась, значки (лама/кит) не считались.
Надпись «OLLAMA vs DEEPSEEK» стала идеально читаемой, заметный скачок качества. Значки снова не считались.
Табло «DEEPSEEK WINS» + перечёркнутый значок считались частично (текст съехал, крестики не точно как просили, но идея читается). Черепаха так и не легла на панцирь.
Черепаха действительно стала меньше и менее заметна, но модель проигнорировала указание по ракурсу камеры — получилось ниже и ближе к зайцу, а не выше.
Ни в одной из четырёх попыток не получилось заставить модель нарисовать черепаху именно «перевёрнутой на панцирь с оторванной лапой» — как только в описании одного персонажа одновременно несколько условий (поза + состояние + мелкая деталь), Flux начинает игнорировать часть из них. Промпты, как видно выше, были подробные и по 150-200 слов — дело не в краткости, а в том, что модель не справляется с несколькими одновременными условиями на одном объекте. Помогает только упрощение до одного главного признака за раз (см. v4, где «просто перевёрнута» сработало лучше, чем «перевёрнута + оторванная лапа + обломки»).
Flux.1-dev (квантованный GGUF, локально) неплохо держит короткие фразы на баннерах, общую композицию и освещение — это не самая сильная сторона открытых моделей, и результат приятно удивил. Слабое место — одновременно несколько сложных условий на одном объекте (поза + повреждения + мелкие бейджи): такое нужно упрощать и закладывать бюджет на 3-5 итераций, а не рассчитывать на один точный промпт с первого раза, как это обычно бывает с более крупными коммерческими моделями.
Для чего годится: обложки постов, мемы, быстрые иллюстрации, тестовые арты, где расхождение в деталях не критично. Для чего не годится без ручной доработки: точный брендинг/логотипы, сцены с жёсткими композиционными требованиями (конкретный ракурс камеры), любой текст длиннее 2-3 слов.
Оживить сцену «гонки» из картинки v2 (image-to-video) и отдельно — сделать простой зацикленный ролик «заяц на подсвеченном вращающемся пьедестале» (text-to-video) как пример использования для сайтов. Модель — Wan2.2-TI2V-5B (GGUF, локально).
Первая попытка (1280×704, 81 кадр) провалилась технически: 3 шага из 20 заняли 51 минуту (по 14-18 мин/шаг) — UNet видео-модели не помещался в 12 ГБ VRAM целиком даже частично, система непрерывно подкачивала веса. При такой скорости весь ролик занял бы 4-6 часов. Отменено.
Фикс: резко урезали разрешение до 512×512 и кадры до ~70, плюс перенесли текстовый энкодер на CPU (тот же приём, что сработал с картинками). Результат — стабильные ~11 сек/шаг, UNet грузится полностью без подкачки.
Результат: движение камеры и фейерверки реально отработали (проверено вручную по кадрам через ffmpeg — камера физически надвигается на зайца от общего плана до крупного). Персонаж и стиль сцены при этом заметно разошлись с исходной картинкой v2 (сменился дизайн робота, ночной стадион стал дневным небом) — модель использовала стартовый кадр скорее как слабую подсказку. Черепаха из промпта «continues walking in background» почти не видна — камера её обгоняет уже к 4-му кадру.
Результат: ПРОВАЛ по главному требованию. Три проверенных кадра (1, 4, 7 из ролика) визуально ПОЛНОСТЬЮ идентичны — заявленное в промпте вращение на 360° модель просто проигнорировала, выдав одну статичную картинку, продублированную на всю длину ролика. Освещение, композиция, дизайн фигуры — хорошие сами по себе, просто нет анимации вообще.
Оба ролика разобраны вручную: кадры извлечены через ffmpeg (каждый N-й кадр из ролика), просмотрены визуально построчно. Полный текстовый разбор с описанием каждого проверенного кадра — по кнопке ниже.
Локальное видео на этом железе технически осуществимо только при жёстком урезании параметров (512×512, ~50-70 кадров, CLIP на CPU) — иначе уходит в многочасовую подкачку памяти. Но даже при рабочей конфигурации результат непредсказуем: одна генерация дала убедительное движение, вторая полностью проигнорировала требование движения и осталась статичной. Для сценариев, где движение — ключевое требование, надёжнее закладывать движение уже в стартовый кадр (как сработало с гонкой), либо бюджетировать несколько попыток на каждый ролик, как с картинками — только дороже по времени (15-20+ минут за попытку против ~70 сек у картинки).
Проверить локальную генерацию музыки с вокалом на русском языке: шуточная былина-баллада про «гонку нейросетей» (Gemini, Kimi, GLM, DeepSeek, Qwen, GPT соревнуются, а побеждает Cloud Code), плюс отдельно короткий инструментал в стиле трейлера. Модель — MiniMax Music3 (int8, локально через ComfyUI).
Первая попытка — не тот движок. Через готовый хелпер ACE-Step 1.5 (документированный в скилле как основной вариант) ComfyUI отклонил воркфлоу: не хватало файла текстового энкодера qwen_4b_ace15.safetensors — локально стоит более старая версия ACE-Step без этого компонента. Собрал воркфлоу вручную под MiniMax Music3, у которого нашёлся полностью рабочий комплект файлов (unet, CLIP-энкодер, VAE) и готовый узел с поддержкой лирики.
Вторая попытка — ошибка на сохранении. Генерация былины прошла полностью (215 сек авторегрессивной генерации), но упала на последнем узле (SaveAudioAdvanced) из-за неправильно переданного параметра формата файла. Пересохранил через более простой узел (SaveAudioMP3) — благодаря кэшу ComfyUI пересчитывать генерацию не пришлось, досчиталось за 1.4 сек.
Итог: обе финальные генерации прошли чисто, без деградации по времени (в отличие от картинок и видео — здесь swap-тормоза не возникало, текстовый энкодер сразу поместился).
Стиль — русская былина-баллада с мужским вокалом. Текст написан по канонам жанра (архаичная лексика, «Ой ты гой еси», «богатырь», «витязь») после того, как посмотрел формат разметки ACE-Step/MiniMax (теги [verse]/[chorus]/[bridge]).
Вокал и произношение (особенно на русском) — оценивай сам, я звук не слышу и сужу только по логам/метаданным (проверил ffprobe: 49.99 сек, 320 кбит, файл целый).
Чистый инструментал, без вокала (тег [inst] вместо лирики) — тест того, насколько модель держит настроение без текста.
62 сек генерации — заметно быстрее былины (216 сек), в основном за счёт короче длительности и отсутствия объёмной авторегрессивной генерации вокала.
MiniMax Music3 оказался более надёжным путём, чем документированный в скилле ACE-Step 1.5 (у которого не хватало файла модели) — стоит иметь это в виду на будущее и сразу пробовать MiniMax, если ACE-Step откажет. Технически генерация музыки прошла стабильнее картинок и видео: не было ни одного swap-тормоза, только одна ошибка формата на сохранении (исправлена без пересчёта благодаря кэшу).
Для чего годится: черновые треки, фоновая музыка, тестовые джинглы, быстрые эксперименты со стилем/языком вокала. Открытый вопрос: качество русского вокала/произношения — я сам оценить не могу, финальную оценку даёт слушатель.