Haarvisie verslagen
← Alle verslagen📄 Download als PDF
🎧 Luister dit verslag
1,0x
⬇️ Download naar telefoon
📖 Lees mee met de podcast

Hé Jamal, goed dat je luistert! Ik wilde even een moment pakken om je bij te praten over al die gave AI-pijplijnen waar Sjakie en jij zo hard aan hebben gewerkt voor Haarvisie. Dit is echt de ruggengraat van onze visuele content geworden, en het is indrukwekkend om te zien hoe ver we zijn gekomen.

In de kern zijn we super efficiënt geworden in het maken van professionele video's en beelden. Denk aan onze *Master Reel Pipeline*, dat is die gouden standaard met die before/after extensie-reel, de transparante nieuwsbalk en die draaiende awards. Die is nu de basis voor zo'n beetje elke korte video die we maken. Vanuit daar zijn we verder gegaan met hele specifieke versies, zoals de '10 Dames Branded Reels' voor balayage en de '10 Krullen-video's'. Het mooie daarvan is dat we met behulp van AI, via die Kling-prompts, heel consistent vrolijke, natuurlijke video's kunnen maken, zonder gedoe met belichting of achtergronden. En jij hebt die belangrijke regel vastgezet: dames moeten vanaf frame één vrolijk zijn en natuurlijk bewegen! Die losse 'Bewegende Reels' zijn de bouwstenen; eerst de standalone video, en dan pas de before-foto's of info eromheen.

Maar we doen meer dan alleen losse reels. Voor de grotere presentaties hebben we bijvoorbeeld de 'Bewegende Showcase' met acht modellen naast elkaar, en de 'Scherm-video' voor in de salons. Die laatste is echt slim, met die wisselende kapsel-infokaarten die naadloos loopen. Daarbij hebben we ook geleerd wat wel en niet werkt qua layout, en dat jouw nadruk op *echte* before-foto's echt cruciaal is. En natuurlijk de 'Catwalk-video's', zowel de 16:9 versie als de 'Infokaarten' die ertussen komen, die een dynamische look geven. Het is gaaf hoe we modellen vloeiend van rechts naar links kunnen laten lopen voor die Haarvisie neonwand. En die anti-blur clausule in de prompt is daarbij een life-saver gebleken!

We gebruiken de AI ook voor hele diverse campagnes. Die 'Salon-Reel' voor TikTok vertelt een mooi verhaal: van de neonwand, naar de salon, en dan de catwalk. En de 'Luxe Klantvideo' is een prachtige toevoeging, met behoud van het gezicht en zelfs muziek – dat is een uitzondering op onze 'geen-geluid-regel', maar past perfect bij de luxe-uitstraling. Zelfs voor de 'Haarvisie Reis Spanje' hebben we een hele reeks pijplijnen gekregen, van teasers tot recaps. En voor de 'Teamfoto's' gebruiken we nu soul training. Dat stelt ons in staat om consistent teamleden in verschillende outfits te tonen, wat een enorme efficiëntieboost is. Met wat handigheid kunnen we zelfs valkuilen zoals ongewenste decolletés of NSFW-filters omzeilen.

Overal doorheen lopen trouwens die universele regels die de kwaliteit waarborgen: altijd audio strippen tenzij jij expliciet anders vraagt, Higgsfield-presets weigeren om de controle te behouden, eerst een test en dan pas batchen, en natuurlijk die galerijen die we nooit legen, alleen aanvullen. En niet te vergeten, die consistente blikrichting in showcases: balayage kijkt naar rechts, krullen naar links, zodat ze naar elkaar kijken.

Al met al, Jamal, is het fantastisch om te zien hoe deze AI-pijplijnen niet alleen de consistentie en kwaliteit van onze visuele content naar een hoger niveau tillen, maar ook de snelheid en schaal waarop we kunnen werken. Dit maakt onze marketing en branding echt toekomstbestendig. Goed bezig, mannen!

Haarvisie AI Pijplijnen — Alle Recepten

Elke pijplijn die Sjakie + Jamal samen hebben gebouwd. Wat het doet, waar het staat, hoe het werkt, en wat er fout ging.


1. MASTER REEL PIPELINE (GOUDEN STANDAARD)

Script: ~/Downloads/Claude-Werk/haarvisie-nieuwsbalk/build_reel.py
Recept: ~/Downloads/Claude-Werk/haarvisie-nieuwsbalk/RECEPT.md
Goedgekeurd: 2026-06-20 — "dit wordt de basis van ALLE video's"

Wat het doet: Before/after extensie-reel met transparante nieuwsbalk, draaiende pastel-awards, polaroid-before gekanteld linksboven, geen geluid.

Hoe: python3 build_reel.py — pas CONFIG bovenin aan (SOURCE_REEL, BEFORE_IMG, PAIRS). Map is zelfstandig.

Variants: build_reel_bal.py (balayage, polaroid links + portret-before), build_reel_59.py (extensie 59)

Nieuwsbalk-regels:
- TRANSPARANT (geen cream-balk — "hakt te hard af")
- Witte tekst Hanken Grotesk ~48px met drop-shadow
- Awards als separators: Beste Hair Extensions + Great Lengths, om en om
- Seamless scroll: 2 kopieën, x=-mod(t*160,L) en +L
- Logo Haarvisie-wordmark LINKSBOVEN, donker (~380px breed)

Waar naartoe: video.haartips.nl/reels10.html (per video nieuwsbalk aanpasbaar via POST /api/reels10-ticker)

Valkuilen: Logo in het midden valt weg op elke kleur → ALTIJD linksboven op lichte bovenhoek.


2. 10-DAMES BRANDED REELS (BALAYAGE)

Recept: ~/Downloads/Claude-Werk/reels-10dames/RECEPT.md
Script: build_reel_bal.py
Goedgekeurd: 2-7-2026, dame 9 = referentie

Wat het doet: 10 balayage-dames, elk 10s Kling3.0-clip + polaroid-before links + transparante nieuwsbalk met awards.

Kling-prompt (bevroren):

Vertical portrait video, waist-up framing. The video starts in the MIDDLE of her movement - 
she is already gently walking a slow small step forward while turning her upper body, hair 
swinging softly. She keeps moving naturally the whole video... Warm cheerful expression from 
the very first frame... Plain seamless light grey studio...

Stap-voor-stap:
1. Import after-foto naar Higgsfield: media_import_url
2. generate_video kling3_0, mode=pro, dur=10, 9:16, sound=off, declined_preset_id=24bae836-2c4a-48e0-89b6-49fcc0b21612
3. Download clip
4. Portret-crop before: ~/Downloads/Claude-Werk/reels-10dames/befores/portret_crop.py (cv2 face-detect, Mac-only)
5. build_reel_bal.py met REEL_SOURCE, REEL_BEFORE, REEL_POL_SIDE=left, REEL_POL_Y=150, REEL_DURATION=10
6. Audiostriptap: -map 0:v:0 -c:v copy

Reel-regels (Jamal, 2-7):
- Vrolijk VANAF FRAME 1 (niet opbouwen)
- Mond beweegt, naturlijk
- Egale lichtgrijze achtergrond — GEEN plafond, deuren, ramen
- Einde: full-frontal + glimlach
- Constante belichting

Blikrichting: balayage (links) kijkt naar RECHTS, krullen (rechts) naar LINKS → naar elkaar

Opslag: VPS /var/www/balayage-tool/reels10/REEL_dXX.mp4 (archief append-only, nooit verwijderen)

Valkuilen: Higgsfield stelt altijd "IN THE DARK" preset voor → altijd weigeren via declined_preset_id.


3. 10 KRULLEN-VIDEO'S

Recept: ~/Downloads/Claude-Werk/krullen-10video/RECEPT.md
Gestart: 3-7-2026

Wat het doet: Zelfde pijplijn als balayage-reels, maar voor gekrulde extensies uit krullen.haartips.nl.

Bron: GET https://krullen.haartips.nl/api/gallery (header: x-access-code: krul2026). Gebruik afterUrl direct (NIET after2/after3 — geeft gezichtsdrift).

Afwijking vs. balayage: Ticker-tekst = "KRULLEN OP MAAT" i.p.v. "KLEUR OP MAAT".

Valkuilen: Krul ALTIJD vanaf de aanzet/scalp (geen gladde eerste centimeters) — staat in de generatie-prompt.


4. BEWEGENDE SHOWCASE (8 MODELLEN)

Recept: ~/Downloads/Claude-Werk/haarvisie-nieuwsbalk/bewegende-showcase-pijplijn/RECEPT.md
Status: Werkend (2026-06-29, "wordt al beter")
Live: balayage.haartips.nl/extra-videos/Showcase-8Modellen-Bewegend-Dynamisch.mp4

Wat het doet: 8 bewegende modellen (5 krullen + 4 balayage/kleur) naast elkaar in 2 kolommen, scrollende ticker, Haarvisie-logo. 48 seconden, geen geluid.

Stap-voor-stap:
1. Host bron-foto's op VPS: /var/www/balayage-tool/_tmp/src_*.jpg → publiek via balayage.haartips.nl/_tmp/
2. media_import_url → Higgsfield generate_video kling3_0, dur=5, ~10 credits/clip
3. Download clips naar /tmp/m3_<key>.mp4
4. local_prep.py — cv2 uitlijnen: CW=540, CH=1300, HEADY=170, TARGET_FACE=250, YCUT=1180
5. build8.py — panels (vstack 4+4, hold/slide), linker kolom hflip (kijkt naar rechts/naar elkaar), DUR=48
6. Audio strippen

Prompt-kern:

Upper-body shot, lively dynamic movement: she shifts her body and playfully glances back 
over her shoulder... her {hair} clearly SWINGS and bounces, eyes open, candid lively energy. 
Light grey studio filling the frame, camera static.

5. BEWEGENDE REELS (STANDALONE — ZOALS video.haartips.nl/bewegend/)

Recept: Embedded in krul-extensies skill + ~/Downloads/Claude-Werk/haarvisie-nieuwsbalk/RECEPT.md
Live: video.haartips.nl/bewegend/index.html (m01-m10)

Wat het doet: Standalone 9:16 video per model — model vult het VOLLEDIGE FRAME, subtiele beweging. Dit is de KERN-EENHEID. Geen compositie, geen split-screen.

Stap-voor-stap:
1. Foto naar Higgsfield: media_import_url of media_upload
2. generate_video kling3_0, mode=pro, 9:16, dur=5 of 10, sound=off, declined_preset_id=24bae836-...
3. Download clip
4. Audio strippen (ffmpeg -map 0:v:0)
5. Video is klaar — model vult volledig frame

Valkuil (3-8-2026): NOOIT meteen een compositie/split-screen bouwen. Eerst de standalone bewegende video, dan pas de before/info eromheen.


6. CATWALK 16:9

Recept: ~/Downloads/Claude-Werk/catwalk-16x9/RECEPT.md
Assets: neonwand_scene.png — Haarvisie neonwand achtergrond

Wat het doet: Modellen lopen van rechts naar links voor de Haarvisie-neonwand. 16:9 formaat.

Vaste loopregel: Model komt RECHTS het beeld IN (startframe: half in beeld aan rechterrand, mid-stride, kijkrichting links) → loopt de HELE clip rechts→links. Nooit stilstaan of naar camera draaien.

Root cause schaduw/waas (definitief 8-7): Motion blur zit AL in de bronvideo (AI-gegenereerd). RIFE-vertraging rekt die waas uit. Fix: anti-blur in generatieprompt ("matte non-reflective floor", "clothing moves only softly", "no fast swishing"). RIFE toepassen VOORDAT je composite.

Valkuilen: Anti-blur clausule ALTIJD in prompt. RIFE voor composite, niet erna.


7. CATWALK-INFOKAARTEN

Recept: ~/Downloads/Claude-Werk/catwalk-kaarten/RECEPT.md
Scripts: card_lux.py, before_match.py, rerender_round.py

Wat het doet: 16:9 informatiekaart per model (before + after + behandeldata + 5 draaiende pastel-awards). Tussen catwalk-dames in de montage.

Awards (NOOIT opnieuw genereren): ~/Downloads/Claude-Werk/award-edits/award-*-PASTEL.png (5 stuks). Synchroon gerenderd: 120 frames, CFRAC 0.58, size 360, allemaal start rechtop.

Before genereren: GEMINI_API_KEY=... python3 scripts/before_match.py <after.png> <before.png> — Gemini genereerd passende before op basis van de after.


8. SALON-REEL (9:16 TIKTOK)

Recept: ~/Downloads/Claude-Werk/salon-reel/RECEPT.md
Script: track_reel.py (volg-crop), HAARVISIE_reel_v2.mp4
Gestart: 4-7-2026

Wat het doet: 9:16 TikTok-reel: neon-wand hook → salon-craft shots → catwalk-reveal. ~18 seconden, geen geluid.

Verhaal: hook (1.6s) → 5× salon-werk (1.4-1.5s elk) → 3× catwalk-reveal (2.0-2.6s) → logo-endcard (2.0s)

Volg-crop (GRATIS, lokaal): track_reel.py — mediaan-bg detectie → bewegend model volgen → gesmoothed 9:16-venster → 1080x1920. Gebruik voor 16:9 catwalk → 9:16 reel conversie.

v2 bron: Balayage Kling-clips VPS /var/www/balayage-tool/reels10/src/R_dXX.mp4 (kale clips zonder polaroid/ticker). Schalen: scale=-2:1920,crop=1080:1920.


9. SCHERM-VIDEO (16:9 SALONSCHERMEN)

Recept: ~/Downloads/Claude-Werk/scherm-video/RECEPT.md
Script: build_scherm_v7.py (kaart builder), _v9_bouw.py (montage)
Status: v9 concept bevroren 23-7-2026, nog niet eindgoedgekeurd
Preview: https://team.haartips.nl/varianten/scherm_v9.mp4

Wat het doet: 16:9 loop-video voor salonschermen. Wisselende kapsel-infokaarten: om en om kleur/krul. 9 sec per kaart, fadeblack overgangen, naadloze loop.

Kaart-layout: NA-foto groot links (afgerond frame), VOOR-polaroid linksonder (gekanteld), rechts: wit logo + gouden kicker + grote titel + behandelinfo + 5 draaiende awards. Donkere achtergrond.

19 bron-kaarten: card_KLEUR02..10.mp4 (9 kleur) + card_KRUL_K01..K10.mp4 (10 krul). Kleur01 = verboden model, ontbreekt bewust.

Kaarten nieuw maken: build_scherm_v7.py — kaart-HTML → headless Chrome 3 lagen → ffmpeg-composite.

Afgekeurde versies (niet herhalen): v3 filmstrip = "te basic"; v4/v5 overlay = "geen andere foto's op achtergrond"; v6 donker vlak = overtroffen door CW_KLEUR02-referentie; v7 nep-befores = Jamal wil ECHTE paren.


10. LUXE KLANTVIDEO

Recept: ~/Downloads/Claude-Werk/luxe-video/RECEPT.md
Status: test1 klaar, wacht op muziek van Conductor

Wat het doet: 9:16 luxe-video van klant met gezichtsbehoud, Suno-muziek (uitzondering op geen-geluid-regel), fadewhite eindkaart.

Pijplijn: Kling3.0 i2v (10s, job 14bc183e) → ogen-check (8 frames, crop-sheet) → montage (partA: logo-rond-goud 150px overlay + fadewhite; partB: luxe eindkaart zoompan) → muziek: Suno-instrumentaal -0.75 volume + fadein/fadeout.

Ogen-check verplicht: 8 frames (0.4-9.7s), gezichts-crop sheet. Alles controleren of ogen open zijn. Dit was Conductors afkeurgrond.

Eindkaart-assets: ~/Downloads/Claude-Werk/salon-reel/luxe_eindkaart.png. Logo-assets: verslag.haartips.nl/merk/.


11. HAARVISIE REIS SPANJE (2026)

Map: ~/Downloads/Claude-Werk/haarvisie-reis-spanje/
Scripts: 16 build-scripts

Pijplijnen in deze map:
- build_teaser.py / _v2.py / _v3.py — teaser-video van de reis
- build_team_reel.py / _v2.py — team-reel (medewerkers)
- build_recap.py / build_recap_lang.py — samenvatting-video
- build_reis_reel.py — hoofdreel van de reis
- build_selection_video.py / build_best_selection.py — foto-selectie video
- build_video_gallery.py — galerij-pagina
- build_chrono_gallery.py — chronologische galerij
- build_medewerkers.py — medewerkers-pagina
- build_totaallied.py — totaallied (Suno-song over de reis)
- build_review_gallery.py, build_video_tags.py, build_prefill_tags.py — hulptools


12. TEAMFOTO-PIJPLIJN (SOUL TRAINING)

Recept Asuman: ~/Downloads/Claude-Werk/asuman-set/RECEPT.md
Recept Jamal: ~/Downloads/Claude-Werk/jamal-set/RECEPT.md
Recept Jorah: ~/Downloads/Claude-Werk/team-haartips-generator/jorah-set/RECEPT.md

Wat het doet: Soul training op echte referentiefoto's → outfit-swaps → teamfoto-set.

Stap-voor-stap (Asuman-recept, basis voor alle):
1. Soul trainen op echte foto's (minimaal 5, liever 10): generate_image met soul_training
2. 1 testfoto → postuur-goedkeuring Jamal
3. Goedgekeurde test = lichaams-basisbeeld → outfit-swaps als 1-diepe edits
4. Bij drift: face-lock ronde (medias=[edit, officieel portret], "replace ONLY her face")

Soul IDs:
- Asuman: in asuman-set (multi-ref aanpak)
- Jamal: e9399482-7a60-4dfd-96bf-4607a4c9712c
- Jorah: 878b71c6-5c92-4565-9c75-4840678e4dcb (soul_2, 25-7-2026)

Jorah-valkuil (25-7): Soul trekt naar diepe decolleté door halterjurk in trainingsfoto's. FIX: genereer normaal, dan nano_banana_pro edit: "raise/close the neckline so it is fully closed."

NSFW-filter-valkuil (Jamal-set): nano_banana flagt na meerdere edits willekeurig "nsfw" op onschuldige herenkleding. Omweg: direct via soul_2 genereren (geen filterprobleem).


13. MAKEOVER TIKTOK FRAME

Script: ~/Downloads/Claude-Werk/makeover-tiktok/build_tiktok_frame.py
Gerelateerd: Makeover v3 (makeover-v3-haarvisie.netlify.app)

Wat het doet: TikTok-stijl frame compositie voor Virtual Makeover resultaten. Bronze hero-frame + before-inzet + Futura-logo + 4-hoeken-strip + CTA. 1080x1920.

Pijplijn (Fase 2-3): 4 Fase-1 hoeken → make_draaivideo.mjs (4 Kling 2.1-pro segmenten, front→left→back→right→front, concat, ~12.8s) → compose_tiktok.py (PIL + ffmpeg, draaivideo + hero-frame + before-inzet).


UNIVERSELE REGELS (voor ALLE pijplijnen)

  1. ALTIJD audio strippen (-map 0:v:0 -c:v copy) — NOOIT geluid, tenzij Jamal expliciet vraagt
  2. Higgsfield preset weigeren — altijd declined_preset_id=24bae836-2c4a-48e0-89b6-49fcc0b21612
  3. 1 test eerst → Jamals OK → dan batch
  4. Galerij append-only — NOOIT verwijderen, alleen toevoegen
  5. Blikrichting in showcases — balayage kijkt naar RECHTS, krullen kijkt naar LINKS (naar elkaar)
  6. Before = portret-crop (hoofd/haar), NOOIT full-body in de polaroid
  7. Reel-regels: vrolijk frame 1, mond beweegt, egale bg zonder deuren/plafond, einde = frontal + lach
  8. Check master-pijplijn EERST — nooit reinventen wat al bestaat
  9. Geen compositie voor je de standalone reel hebt — eerst model volledig in beeld, dan pas overlays/slides
🎙️ Bespreek met Jarvis