Claude Code помог написать Linux-драйвер сканера Plustek OpticFilm 8200i

Автор блога купил сканер плёнок Plustek OpticFilm 8200i, чтобы оцифровать коробку старых негативов после смерти матери. Выяснилось, что в новой версии сканера сменился чипсет, и Linux он больше не поддерживается. Попытки написать драйвер SANE с помощью Claude Code долго ни к чему не приводили, и автор на несколько месяцев бросил проект.
Перелом наступил, когда автор увидел в X пост Тома Крайдера (Glorious Eggroll): тот рассказывал, что починил драйвер мыши с помощью ИИ-инструментов, дав агенту полный контроль над экземпляром Windows для сбора данных. Автор вставил этот твит в Claude и попросил помочь настроить виртуальную машину с Windows для сканера. Связка из запуска сканирования под Windows и одновременного захвата USB-трафика (вероятно, вместе с улучшениями самого Claude Code, пишет автор) сильно изменила дело: через несколько часов появился первый работающий скан на Linux, с проблемами качества, но на 100% узнаваемый. Ещё через несколько дней драйвер был почти идеален, включая сканирование в инфракрасном диапазоне. Но за время паузы кто-то уже успел добавить поддержку этого сканера в SANE. Попутно Claude написал приложение для сканирования негативов Negative Vibes.
Затем автор поручил Claude переиспользовать собранный инструмент и починить MIPI-камеру ноутбука Lenovo ThinkPad X1 Carbon Gen 14 (Aura Edition), обновив драйвер ядра и libcamera. По словам автора, он запустил задачу утром, а к концу дня у него были патчи для ядра и libcamera и заметно лучшая картинка. После этого он попросил Claude сделать инструмент универсальным и описать его. Так появился hw-harness. Автор оговаривает: в таком виде инструмент в его проектах не использовался, это обобщение его самодельных скриптов.
Метод hw-harness такой: 1) запустить фирменный драйвер Windows в виртуальной машине KVM с пробросом реального устройства; 2) записывать трафик на хосте Linux через usbmon, который лежит ниже слоя проброса, поэтому гостевая система его не видит; 3) повторить ту же операцию на Linux со своим драйвером и записать трафик тем же способом; 4) сравнить две трассы: различия и есть список ошибок драйвера. Для устройств без шины, которую можно прослушать, например внутренней MIPI-камеры, инструмент использует осмотр на стороне Windows: INF-файлы, данные реестра, таблицы ACPI и свойства устройств. Автор подчёркивает, что код не копируется: поведение железа наблюдается, а из драйверов Windows извлекаются только конфигурационные данные.
Проект 1: бэкенд SANE для Plustek OpticFilm 8200i. Новая модель использует контроллер Genesys GL128 (USB 07b3:1825); старая модель с тем же названием использует GL845 и уже поддерживается. Бэкенд поддерживает режимы цвета, серого, инфракрасный и цвет+инфракрасный, разрешения от 300 до 7200 dpi при 8 или 16 бит на канал, удаление пыли и царапин по инфракрасному каналу и множитель экспозиции для плотных негативов. Он собирается как RPM для Fedora при каждом коммите. В сентябре 2026 года поддержка сканера появилась и в бэкенде genesys основного SANE. Автор сравнил их: оба разрешают одинаковые мелкие детали при 3600 dpi, его вариант быстрее при полном разрешении (34,6 с против 54,4 с) и умеет удалять пыль по инфракрасному каналу, а в основном SANE больше ступеней разрешения. Это результаты для одного устройства и одного кадра, то есть одна точка данных. Автор считает свой драйвер доказательством концепции и ожидает, что сам перейдёт на основной драйвер, когда тот достигнет паритета.
Проект 2: Negative Vibes, приложение для GNOME на Rust для сканирования цветных и чёрно-белых негативов и слайдов на любом плёночном сканере, который поддерживает SANE. Скан хранится как есть, в 16 бит, линейно, вместе с инфракрасной плоскостью, а все остальные настройки накладываются неразрушающим слоем. Есть инверсия негатива в пространстве плотности с коррекцией основы плёнки и перекрёстных помех красителей, настройки на всю катушку с переопределениями для отдельных кадров, удаление пыли, калибровка IT8 через ArgyllCMS и экспорт в TIFF, JPEG, PNG и DNG с профилями ICC и метаданными. Приложение поставляется как Flatpak вместе с бэкендом, пока проверено только на 8200i. Чтобы поддержать другие сканеры, SANE нужен стандартный способ отдавать инфракрасные каналы, которого пока нет.
Проект 3: починка камеры ThinkPad. В камере стоит сенсор Sony IMX471 за Intel IPU7; на Linux изображение было тёмным, с сильным виньетированием и жёлто-зелёным оттенком. Исправления для ядра (драйвер IMX471): ошибка выбора кадрирования возвращала ошибку до сохранения прямоугольника, и libcamera считала весь массив пикселей рабочим; регистр тестового шаблона был объявлен с неверной шириной; потолок аналогового усиления был слишком низким, что стоило примерно 1,8 ступени чувствительности. Исправления для программного ISP libcamera: полностью отсутствовала коррекция затенения объектива (углы были темнее примерно на 2,7 ступени), а статистика баланса белого суммировалась при родной разрядности сенсора относительно 8-битного уровня чёрного, что искажало баланс; это исправление подходит для любого сенсора RAW10/RAW12. В контролируемом тесте при слабом свете яркость кадра выросла с 31,1 до 90,9, а отношения красного к зелёному и синего к зелёному изменились с 0,890 и 0,672 до 1,047 и 0,823, что близко к эталону с USB-вебкамеры. Синего всё ещё не хватает примерно на 17% при слабом свете, что автор объясняет балансом белого по модели серого мира. Патчи ядра отправлены Кейт Сюань, патчи libcamera проверяет Вим Тейманс для передачи в libcamera. Пакеты RPM для Fedora 44 лежат на странице релизов.
Выводы автора: эталонные записи очень важны, потому что сравнение рабочей и неработающей трассы превращает «не работает» в конкретный список отличий (для MIPI-камеры критично было подключить ещё и USB-камеру для сравнения); ИИ хорош в рутине (расшифровка записей, написание проб, перекрёстная проверка констант), но физическое устройство всё равно должен держать человек; единственный судья, реальное железо. Автор прямо оговаривает, что не утверждает, будто сканы и камера теперь идеальны: сканер даёт приличные сканы, а камера выглядит заметно лучше, чем раньше.
Ключевые факты
- Автор с помощью Claude Code и запуска фирменного драйвера Windows в виртуальной машине KVM с захватом USB-трафика через usbmon получил первый рабочий скан на Linux за несколько часов, до этого проект месяцами стоял.
- Бэкенд SANE для Plustek OpticFilm 8200i (контроллер GL128) поддерживает 300-7200 dpi и инфракрасный канал; при полном разрешении он быстрее основного SANE (34,6 с против 54,4 с), но это результат одного устройства и одного кадра.
- Тот же подход помог починить MIPI-камеру ThinkPad X1 Carbon Gen 14: яркость кадра в тесте выросла с 31,1 до 90,9, патчи для ядра и libcamera отправлены на рассмотрение.
- Обобщённая схема работы выложена как hw-harness: запись эталонного сеанса в виртуальной машине, запись на Linux, сравнение трасс; автор оговаривает, что в таком виде инструмент в его проектах не применялся.
- Пока автор писал свой драйвер, поддержка этого сканера уже появилась в основном SANE; он считает свою работу доказательством концепции.
Почему это важно
Писать драйверы для недокументированного железа традиционно долго: нужно разбирать дампы трафика и по одной проверять гипотезы о регистрах. Здесь описан конкретный случай, когда ИИ-агент вместе с эталонными записями из Windows сократил такую работу до часов и одного рабочего дня. Это одно свидетельство от одного человека, но с конкретными числами и приёмами, которые можно повторить.
Кому это важно
Владельцам железа без Linux-драйвера, мейнтейнерам открытых драйверов и тем, кто пользуется Claude Code или Codex для низкоуровневой работы. Тем, кто оцифровывает плёнку на Linux, интересны бэкенд для 8200i и приложение Negative Vibes. Владельцам ThinkPad X1 Carbon Gen 14 (Aura Edition) стоит следить за судьбой патчей ядра и libcamera.
Как это применить
Схема из четырёх шагов: запустить драйвер производителя в виртуальной машине KVM с пробросом устройства, записать трафик на хосте через usbmon, повторить операцию на Linux со своим драйвером и сравнить трассы. Для устройств без шины, которую можно прослушать, используются INF-файлы, реестр, таблицы ACPI и свойства устройства. Автор советует иметь для сравнения рабочее эталонное устройство (в случае камеры это была USB-камера) и самому проверять результат на реальном железе. Готовых ссылок в тексте нет, но автор называет инструмент hw-harness, приложение Negative Vibes (Flatpak с бэкендом) и RPM для Fedora.
Можно ли доверять
Это личный рассказ от первого лица, без независимой проверки. Конкретные числа (время сканирования, яркость, отношения каналов) автор приводит сам и оговаривает, что сравнение драйверов сделано на одном устройстве и одном кадре. Автор честно говорит, что не считает результат идеальным и что hw-harness в нынешнем виде в его проектах не использовался. Какая именно модель Claude применялась, в тексте не названо.
Риски и подводные камни
Бэкенд автор называет доказательством концепции и сам ожидает перехода на основной драйвер SANE после достижения паритета. Негативный пример: пока он делал паузу, поддержку сканера уже добавили в основное дерево. Патчи для ядра только поданы, а патчи libcamera ещё на рассмотрении, так что в основной код они пока не попали. Синего при слабом свете по-прежнему не хватает примерно на 17%. Расширение Negative Vibes на другие сканеры упирается в отсутствие в SANE стандартного способа отдавать инфракрасные каналы. Автор также утверждает, что метод не копирует код, а берёт из драйверов Windows только конфигурационные данные; это его позиция, юридической оценки в тексте нет.
«Человек по-прежнему решает, что строить, и проверяет на реальном железе, что это работает, но рутина сильно сокращается.»
— автор записи в блоге