Waarom doen we dit
Aan het einde van het vorige bericht noemde ik het testen van ComfyUI en diffusiemodellen. Dat was geen wegwerp opmerking - het is de volgende logische stap voor bigunphoto. Het idee: een klant uploadt een foto, kiest een scenario - een wandeling in Amsterdam, een modeshot, een kustportret - en krijgt een set afbeeldingen terug in de visuele stijl van de fotograaf. Geen fysieke shoot vereist.
De vraag was waar te beginnen. Ik had nul ervaring met afbeeldingsgeneratie pijplijnen buiten het gebruik van consumentenapps.
Waarom ComfyUI specifiek
Ik begon met klein onderzoek. Tegenwoordig kan iedereen hoogwaardige afbeeldingen genereren met Google Gemini met behulp van nanobanana of met ChatGPT of zelfs via deze vreemde discord-achtige aanpak met MidJourney. Maar deze zijn meestal webservices die niet kunnen worden geïntegreerd met bigunphoto.com. Ik had iets nodig dat specifiek voor afbeeldingen was. Het gemakkelijkste en meest voor de hand liggende pad zou een API zijn - Replicate, fal.ai, iets dat beheerd wordt. Betaal per generatie, geen infrastructuur hoofdpijn.
Tegelijkertijd zocht ik naar een DIY-oplossing omdat ik geïnteresseerd ben om een beetje met dit gebied te oefenen. Een ander principe was pay-as-you-go als er zo min mogelijk kosten voor MVP zijn.
Aan de andere kant, het stijlprobleem. Tatiana's fotografie heeft een specifieke visuele handtekening - de manier waarop ze werkt met licht, de stemming, de kadrage, selectie van poses. Een aandelen diffusiemodel weet daar niets van. Het onderwijzen ervan vereist fijnafstemming, en fijnafstemming betekent het beheersen van de pijplijn. Beheerde APIs geven je dat niet tegen een redelijke kost.
Ik heb een MacBook M4 Max met 36GB uniforme geheugen. Niet de krachtigste machine op de markt, maar ik vond dat het capable is om diffusiemodellen zoals FLUX van JuggernautXL uit te voeren. De marginale kost van een generatie is elektriciteit. Dat voelde als de juiste plek om te prototypen voordat ik me verplichtte tot cloud-inferentie kosten. Dus ik implementeerde ComfyUI erop.
ComfyUI is een knooppunt-gebaseerde interface voor het bouwen van afbeeldingsgeneratie pijplijnen. Je koppelt knooppunten aan elkaar - elk knooppunt doet één ding: een model laden, een preprocessor toepassen, de sampler uitvoeren, de uitvoer decoderen. De workflow is een grafiek. Je kunt precies zien wat er op elke stap gebeurt, wat handig is als er iets misgaat, en dingen zullen misgaan.
Het heeft bijna geen alternatieven nu, Automatic1111 is al meer dan een jaar niet bijgewerkt. Ik koos ComfyUI omdat het grafiekmodel beter overeenkomt met hoe ik over de pijplijn als een systeem denk, en omdat het meer controle biedt over individuele stappen. Ook zijn workflows JSON-bestanden, wat betekent dat ze programmatisch vanuit de backend kunnen worden aangeroepen - belangrijk als dit een productfunctie wordt.
Het scenario: een wandeling in Amsterdam
Voor de eerste test koos ik een foto van een model van top tot teen en wilde haar in Amsterdam plaatsen. Behoud de gezicht en lichaamsproporties, verander de achtergrond, verander de pose enigszins.
Dat zijn drie afzonderlijke problemen, en elk heeft zijn eigen knooppunt nodig.

De dieptekaart behandelt lichaamsproporties. De AIO Aux Preprocessor met DepthAnythingV2 neemt de bronfoto en produceert een grijswaarden dieptebeeld - lichtere pixels zijn dichter bij de camera. Dit codeert het volume en de silhouet van de figuur zonder de houding volledig vast te leggen. Het ControlNet model leest deze dieptekaart tijdens de generatie en gebruikt het als een beperking. Sterkte op 0,65, end_percent op 0,65 - wat betekent dat ControlNet de eerste 65% van de diffusie-stappen beïnvloedt, en dan laat het model vrij werken aan details. Lagere sterkte geeft meer houdingsvrijheid; hogere sterkte kopieert de silhouet meer letterlijk.
Het gezicht wordt behandeld door IPAdapter FaceID. Dit is geen gezichtsverwisseling - het codeert het gezicht van de bronafbeelding als een inbedding en conditioneert de generatie om een soortgelijk gezicht te produceren. De IPAdapter Unified Loader FaceID laadt het model met de FACEID PLUS V2 preset. InsightFace behandelt de gezichtsdetectie en inbeddingextractie. De gewichtparameters controleren hoe sterk de gezichtsembedding de generatie trekt - te laag en het gezicht drijft, te hoog en alles else wordt star.
ReActor draait aan het einde als een correctielaag. Na generatie doet het een directe gezichtsverwisseling van de bronfoto op het gegenereerde resultaat. IP-Adapter geeft het model een richting; ReActor dwingt het bestemming. Samen behandelen ze de gevallen waarin IP-Adapter een gezicht produceert dat dichtbij maar niet exact is - wat vaker gebeurt met profielopnamen dan met frontale.
De checkpoint is Juggernaut XL. Het is getraind voor fotorealistische mensen en geeft betere resultaten voor het hele lichaam dan het basis SDXL-model. De sampler is dpmpp_2m_sde met een Karras scheduler - beter fijn detail dan de standaard Euler. CFG op 6,0, 30 stappen.
Wat we kregen
De eerste resultaten waren op verschillende interessante manieren kapot: ReActor was verkeerd aangesloten en wisselde het gezicht naar de bronfoto in plaats van het gegenereerde. De upscaler produceerde wat leek op een smeltende CRT-monitor. InsightFace was helemaal niet verbonden, dus IP-Adapter werkte zonder gezichtsembeddings.
Elk van deze was een aansluitfout, geen model falen. Dat is het ding over ComfyUI - de grafiek is expliciet, dus fouten zijn meestal vindbaar. Fix de verbinding, draai opnieuw.
Na het sorteren van de aansluitingen: de Amsterdamse grachtachtergrond is overtuigend, de proporties houden stand, de kleding verandert maar de figuur niet, de houding verschuift natuurlijk. Het gezicht is dichtbij - merkbaar dezelfde persoon, geen perfecte kloon. Het krijgen van exacte gelijkenis is een functie van bronfoto kwaliteit en hoek. Frontale opnamen met goede belichting geven betere resultaten dan profielen.
De lichtmismatch tussen figuur en achtergrond is het resterende zichtbare artefact. De bron was studio-verlicht; de gegenereerde achtergrond is buiten diffuus licht. Ze zijn niet helemaal eens. Dit is een bekend probleem en er zijn benaderingen om het aan te pakken - kleurgradiënt knopen, meer zorgvuldige prompt engineering rond verlichting, of een andere generatiestrategie voor de achtergrond. Dat is de volgende stap.

Wat komt eraan
De workflow werkt goed genoeg om als basis te dienen. De volgende stappen die ik begon te werken in parallel:
ComfyUI verbinden met de site, het creëren van taken en arbeiders, gebruikers- en administratieve interfaces. Ik heb al een werkend MVP hiervoor, dat ik momenteel lokaal test. Binnenkort zal ik er een ander bericht over plaatsen en het op productie vrijgeven.
Een ander verhaal is de creatie van geavanceerde workflows, die kunnen helpen om een reeks afbeeldingen met verschillende houdingen te genereren, het veranderen van kleding ondersteunen, enz.
Een ander groot ding is het trainen van een LoRA op Tatiana's portfolio - dat is wat de visuele stijl in de generatie zal inbedden, niet alleen de locatie.
Als dit klinkt als iets dat je zou gebruiken - een virtuele fotosessie in jouw keuze van locatie, in de esthetiek van een echte fotograaf - dan zijn we dit aan het bouwen. Volg de blog en blijf op de hoogte. Als je geïnteresseerd bent - zeer snel zul je in staat zijn om het uit te proberen.
