Christian Fredrik Kalager Schaller beschreef op 15 oktober 2026 hoe Claude Code hem hielp USB-verkeer van een Plustek OpticFilm 8200i te analyseren en camerafouten in Linux aan te pakken op een Lenovo ThinkPad X1 Carbon Gen 14 Aura Edition. Schaller bepaalde zelf wat hij bouwde en testte de resultaten op de fysieke apparaten.
Van USB-verkeer naar een SANE-backend
Voor de scanner draaide Schaller het Windows-stuurprogramma van de fabrikant in een virtuele machine en legde hij tijdens het gebruik USB-verkeer vast. Claude Code hielp bij de analyse van die gegevens en het uitwerken van wijzigingen voor een backend in SANE, de scansoftware voor Linux. Volgens Schaller leverde de aanpak binnen enkele uren een herkenbare eerste scan op; enkele dagen later had hij een bijna perfecte driver met infraroodondersteuning.
Het ging om een nieuwere variant van de Plustek OpticFilm 8200i met een Genesys GL128-controller en USB-ID 07b3:1825. Een ouder model met dezelfde productnaam gebruikt een GL845-controller en werd al door SANE ondersteund. Schaller zegt dat de genesys-backend van SANE in september 2026 ondersteuning voor de nieuwere variant had gekregen; hij ontdekte dat pas nadat hij zijn eigen backend had gemaakt.
Schallers backend ondersteunt kleur-, grijswaarden- en infraroodscans, plus een combinatie van kleur en infrarood. Het opgegeven bereik loopt van 300 tot 7200 dpi, met 8 of 16 bits per kleurkanaal. De backend gebruikt ook het infraroodkanaal om stof en krassen te verwijderen en biedt een belichtingsfactor voor dichte negatieven.
Schaller vergeleek zijn backend met die van upstream SANE op één scanner en met één frame. Beide versies legden volgens hem hetzelfde fijne detail vast bij 3600 dpi. Bij volledige resolutie duurde de scan met zijn backend 34,6 seconden, tegenover 54,4 seconden met upstream SANE.
De ThinkPad-camera: aanpassingen in kernel en libcamera
Het camerawerk betrof de Sony IMX471-sensor achter de Intel IPU7 in de Lenovo ThinkPad X1 Carbon Gen 14 Aura Edition. Onder Linux waren de beelden volgens Schaller donker, vignetterend en geelgroen. Hij beschreef wijzigingen aan zowel de kernel-driver als de softwarematige beeldsignaalprocessor (ISP) van libcamera.
In de kernel ging het om een fout in de uitsnede van het beeld, een onjuist opgegeven breedte voor het testpatroonregister en een limiet op de analoge versterking. Die limiet kostte volgens Schaller ongeveer 1,8 stop aan lichtgevoeligheid. In libcamera voegde hij lensschaduwcorrectie toe en herstelde hij witbalansstatistieken die de bitdiepte van de sensor vermengden met een zwartniveau van 8 bit.
Bij een gecontroleerde test in weinig licht veranderde de rood-groenverhouding volgens Schaller van 0,890 naar 1,047 en de blauw-groenverhouding van 0,672 naar 0,823. De blauwe kleur bleef in die omstandigheden ongeveer 17 procent te laag.
Op 15 oktober meldde Schaller dat hij de kernelpatches bij Kate Hsuan had ingediend. Wim Taymans beoordeelde de libcamera-patches met het oog op indiening bij het project.
De latere hw-harness en de menselijke rol
Schaller beschreef de generieke hw-harness pas na het scanner- en camerawerk; voor die projecten gebruikte hij eigen scripts. De later beschreven werkwijze legt eerst het gedrag van een fabrikantendriver vast in een Windows-VM, registreert USB-verkeer vanaf de Linux-host met usbmon, herhaalt de handeling met de Linux-driver en vergelijkt de traces. Voor apparaten waarbij geen busverkeer kan worden afgetapt, zoals interne MIPI-camera’s, beschrijft de harness inspectie vanuit Windows.
Schaller hield de keuze van wat gebouwd werd en de controle op echte hardware zelf in handen.