NinA AI Agency

Freebies · Claude Resources

Bouw je eigen Omzetter-wiel met Claude Code

Sleep een bestand en er verschijnt een draaiwiel naast je cursor. Laat los op JPG, PDF, MP4 of een ander formaat en het bestand is omgezet. Met de stappen en de prompts om hem zelf te bouwen.

Bouw je eigen Omzetter-wiel met Claude Code

Sleep een bestand en er verschijnt een draaiwiel naast je cursor. Laat los op JPG, PDF, MP4 of een ander formaat en het bestand is omgezet, naast het origineel. Ik zag het idee op LinkedIn en liet Claude Code mijn eigen versie bouwen, zonder zelf code te schrijven. Hieronder staan de stappen en de prompts waarmee je hem zelf bouwt.

Wat je bouwt

Een menubalk-app voor je Mac. Het wiel toont alleen formaten die passen bij het bestand dat je sleept. Laat je het bestand even op het midden rusten, dan wisselt het wiel naar acties.

Je sleeptFormatenActies
Foto of afbeelding (HEIC, JPG, PNG, WebP)JPG, PNG, HEIC, WebP, PDFKleiner, Achtergrond weg, Tekst eruit, Metadata weg
PDFDOCX, JPG, PNG, TXTKleiner, Metadata weg
Video (MOV, MP4)MP4, MOV, GIF, M4A, WAVKleiner, Metadata weg
Audio (MP3, M4A, WAV)M4A, WAV, AIFF
Document (Word, RTF, Markdown)PDF, DOCX, RTF, TXT, HTML

Alles draait lokaal met de bouwstenen van macOS zelf. Er gaat geen bestand naar een server en er zit geen abonnement op de app. Het resultaat sleep je zo uit het wiel naar je bureaublad of een mail.

Wat je nodig hebt

  • Een Mac met macOS 14 (Sonoma) of nieuwer.
  • Een Claude-abonnement met Claude Code: Pro, Max, Team of Enterprise. Het gratis abonnement werkt niet.
  • De ontwikkeltools van Apple. Die zijn gratis en installeer je in stap 1.
  • Ongeveer een uur. Claude Code doet het meeste werk, jij keurt goed en test.

Stap voor stap

  1. 1

    Ontwikkeltools installeren

    Open Terminal, plak dit commando en klik in het venster dat verschijnt op Installeer.

    xcode-select --install
  2. 2

    Claude Code installeren

    Open daarna een nieuw Terminal-venster. Liever zonder Terminal? De Claude-app voor Mac heeft Claude Code ingebouwd.

    curl -fsSL https://claude.ai/install.sh | bash
  3. 3

    Projectmap maken en Claude Code starten

    De eerste keer log je in via je browser.

    mkdir ~/omzetter && cd ~/omzetter && claude
  4. 4

    Prompt 1 plakken

    Claude Code vraagt toestemming om bestanden te maken en commando's te draaien. Geef die voor deze map.

  5. 5

    Prompt 2 plakken zodra Claude Code klaar is

    Hij bouwt de app, test elke omzetting en zet hem in je map Apps.

  6. 6

    Uitproberen

    Kijk rechtsboven in je menubalk, sleep een foto van je bureaublad en laat hem los op PNG.

  7. 7

    Bijschaven met prompt 3 of 4

Tip: plak commando's zonder iets erachter. De Terminal op je Mac leest een # niet als commentaar.

Prompt 1: de bouwprompt

Plak deze prompt in Claude Code. Hij beschrijft wat je ziet, welke formaten erin zitten en hoe het technisch moet. Vooral dat laatste deel scheelt je een avond zoeken naar fouten.

Prompt 1
Bouw een native macOS-app in Swift met de naam "Omzetter": een menubalk-app die een draaiwiel op mijn bureaublad toont zodra ik een bestand sleep. Ik laat het bestand los op een segment van het wiel en de app zet het om.

WAT IK WIL ZIEN
- Begin ik ergens een bestand te slepen (Finder, bureaublad, Mail), dan verschijnt een rond wiel van ongeveer 420 punten naast mijn cursor: rechts ervan, of links als het scherm daar ophoudt.
- De segmenten tonen de doelformaten voor dat soort bestand. Het segment onder mijn cursor licht op.
- Laat ik het bestand een halve seconde op het midden rusten, dan wisselt het wiel tussen formaten en acties.
- Na het loslaten: een voortgangsring in het midden, daarna het resultaat (icoon en naam). Dat resultaat kan ik uit het wiel slepen naar mijn bureaublad of een app. Klikken toont het in de Finder.
- Laat ik los naast het wiel, dan verdwijnt het. Na een omzetting verdwijnt het na 8 seconden, behalve als mijn muis erop staat.
- Het resultaat komt naast het origineel met een unieke naam (foto.png, foto 2.png). Overschrijf nooit een bestand.

FORMATEN EN ACTIES
- Afbeelding (jpg, png, heic, webp, tiff, gif, bmp): JPG, PNG, HEIC, WebP (alleen tonen als ImageIO WebP kan schrijven) en PDF (A4). Acties: Kleiner (JPG van maximaal 2560 px), Achtergrond weg (Vision, VNGenerateForegroundInstanceMaskRequest, als transparante PNG), Tekst eruit (Vision-tekstherkenning naar .txt), Metadata weg (EXIF en GPS eruit, rotatie behouden).
- PDF: DOCX, JPG en PNG (een afbeelding per pagina, bij meerdere pagina's in een nieuwe map) en TXT (tekstherkenning als de PDF een scan is). Acties: Kleiner, Metadata weg.
- Video (mov, mp4, m4v): MP4 en MOV (zonder hercoderen als dat kan), GIF (12 beelden per seconde, 480 px breed), M4A en WAV. Acties: Kleiner (HEVC tot 1080p), Metadata weg.
- Audio (mp3, m4a, wav, aiff, flac, caf): M4A, WAV, AIFF.
- Document (docx, doc, rtf, odt, html, txt, md): PDF (A4, 2 cm marge), DOCX, RTF, TXT, HTML.
- Meerdere afbeeldingen en PDF's tegelijk op PDF loslaten maakt een samengevoegde PDF.
- Bied nooit het formaat aan waarin het bestand al staat.

TECHNIEK (BELANGRIJK)
- Gebruik alleen frameworks van Apple: AppKit, SwiftUI, ImageIO, PDFKit, AVFoundation, Vision en het tekstsysteem van Cocoa. Geen externe packages.
- Sleepdetectie zonder Toegankelijkheid-rechten: een globale en een lokale NSEvent-monitor op leftMouseDown starten een timer van 60 Hz. Zolang de muisknop is ingedrukt leest die NSEvent.pressedMouseButtons, NSEvent.mouseLocation en NSPasteboard(name: .drag).changeCount. Verandert de changeCount, lees dan de bestands-URL's van dat pasteboard.
- Het wiel staat in een randloze, transparante NSPanel met .nonactivatingPanel, level .popUpMenu en de collectionBehavior canJoinAllSpaces en fullScreenAuxiliary. Het venster mag nooit de focus stelen.
- Teken het wiel in SwiftUI in een NSHostingView. Leg daarboven een eigen NSView die de drop ontvangt (registerForDraggedTypes met .fileURL) en met dezelfde geometrie als de tekening bepaalt welk segment onder de cursor ligt. Verberg die view zodra het resultaat in beeld staat, zodat ik het resultaat (een NSView die NSDraggingSource is) eruit kan slepen.
- Menubalk-menu: Wiel tonen (altijd, alleen met Option, of bij schudden), Resultaat bewaren (naast het origineel of in Downloads), Open bij inloggen (SMAppService), Open het wiel, Stop.
- Uiterlijk: donker glas (NSVisualEffectView met .hudWindow), licht transparante segmenten, het actieve segment in een paars verloop (#bf80ff naar #9952e0), witte tekst, een SF Symbol per actie.
- Maak er een Swift Package van (swift-tools-version 5.9, macOS 14) met een build.sh die swift build -c release draait, er Omzetter.app van maakt (Info.plist met LSUIElement), hem ad-hoc ondertekent en hem met --install in /Applications zet en start.
- Voeg een commando --selftest <voorbeeldmap> <uitvoermap> toe dat elke omzetting op voorbeeldbestanden draait en controleert of elk resultaat weer te openen is.

WERKWIJZE
Bouw het in stappen. Draai na elke stap swift build en los alle fouten op voordat je verdergaat. Maak voorbeeldbestanden voor de selftest met tools die op elke Mac staan (sips, textutil, say, afconvert, avconvert). Vertel me aan het eind kort hoe ik de app gebruik.

Prompt 2 tot 4: bouwen, verbeteren en hem van jou maken

Prompt 2: bouwen, testen en installeren. Plak deze als prompt 1 klaar is.
Draai ./build.sh. Lukt het bouwen niet, los dan de fouten op en probeer opnieuw tot de app bouwt. Draai daarna de selftest en herstel wat mislukt tot alles slaagt. Installeer hem tot slot met ./build.sh --install.
Prompt 3: verbeteren na je eigen test. Vul tussen de haken in wat je ziet.
Ik heb het wiel getest met echte bestanden. Dit klopt nog niet: [beschrijf wat je ziet, bijvoorbeeld: het wiel komt te ver van mijn cursor, of de GIF wordt te groot]. Los het op, draai de selftest en installeer opnieuw.
Prompt 4: een eigen actie toevoegen. Zo maak je hem van jou.
Voeg een actie toe aan het wiel voor afbeeldingen: [bijvoorbeeld "Instagram", die de foto bijsnijdt naar 4:5 en verkleint naar 1080 px breed]. Volg dezelfde opbouw als de andere acties, voeg hem toe aan de selftest, bouw en installeer opnieuw.

Dezelfde aanpak werkt voor je eigen merkkleur: vraag Claude Code om het actieve segment in jouw kleur te zetten.

Geen Mac? Bouw de webversie

Deze variant werkt in elke browser, ook op Windows. In plaats van het wiel krijg je een sleepvlak met grote knoppen per formaat. Ook hier blijft alles op je eigen computer.

Webversie
Bouw een webapp die bestanden volledig in de browser omzet, zonder upload naar een server. Gebruik alleen HTML, CSS en JavaScript, zonder build-stap.
- Ik sleep bestanden of een hele map in het venster. Per soort bestand kies ik een doelformaat met grote knoppen. Per bestand zie ik een preview, de voortgang en hoeveel kleiner het resultaat is.
- Afbeeldingen via canvas: JPG, PNG, WebP, GIF, ICO en PDF, met kwaliteit en maximale grootte. HEIC en TIFF met een fallback-decoder voor browsers die ze niet lezen.
- Video en audio met Mediabunny (WebCodecs): MP4, WebM, GIF, MP3, M4A, WAV, OGG en FLAC.
- PDF met pdf.js en pdf-lib: per pagina naar JPG of PNG, tekst eruit, samenvoegen.
- Word met mammoth, Markdown met marked, en Excel, Numbers, CSV en JSON met SheetJS. CSV met puntkomma en decimale komma voor Nederlandse Excel.
- Downloaden los of als ZIP.
- Zet alle bibliotheken lokaal in een map vendor en maak er een PWA van die offline werkt en in het Dock kan.
Test elke omzetting met Playwright en echte voorbeeldbestanden, en los op wat faalt.

Als het niet werkt

Wat je zietWat je doet
xcode-select: error: invalid argument '#'Plak het commando zonder iets erachter. De Terminal leest # niet als commentaar.
command not found: claudeOpen een nieuw Terminal-venster na de installatie.
xcrun: error of swift: command not foundDe ontwikkeltools ontbreken nog: draai xcode-select --install.
Rode error:-regels bij het bouwenPlak ze terug in Claude Code en zeg: los deze fouten op.
Het wiel verschijnt niet als je sleeptKlik op het icoon in je menubalk en zet Wiel tonen op Altijd.
Het wiel zit in de weg bij gewoon slepenZet Wiel tonen op Option of Schudden.
macOS vraagt toegang tot Bureaublad of DocumentenKlik op Sta toe. De app bewaart het resultaat naast het origineel.

Gemaakt met Claude Code door Olaf Lemmens, NinA AI Agency. Vragen, of zulke tools voor je eigen team? Stuur me een bericht op LinkedIn.