USB

USB

2026

Översikt

USB är en egenbyggd musiknedladdare som håller mitt DJ-bibliotek fyllt åt mig. Att kontinuerligt hitta ny DJ-musik är tidskrävande i sig — och varje låt skulle förr igenom samma sega ritual: leta upp den på SoundCloud, mata in länken på någon MP3-konverterarsajt, ladda ner en komprimerad fil, tagga för hand och sortera in den i rätt mapp. Gånger hundratals låtar blev det en deltidssyssla.

Huvudappen gör hela den kedjan supersmidig: den hämtar låtar i högsta tillgängliga kvalitet direkt från källan via open source-verktyg som yt-dlp och spotdl, taggar dem med metadata och omslag och lägger dem färdigsorterade i rätt genremapp (“back”) i biblioteket — spelklara i rekordbox.

MusikKö är en extension av huvudprojektet: en iOS-del som låter mig köa nedladdningar direkt från telefonen. Hör jag en låt ute delar jag den från Spotify, väljer vilken back den hör hemma i, och när jag kommer hem ligger filen redan i biblioteket — nedladdad, taggad med omslag och synlig i rekordbox.

Namnet kommer från dagens DJ-verklighet: biblioteket bärs till spelningen på ett USB-minne. Det här är samma skivback — fast den fyller på sig själv, trådlöst.

Problemet

Mitt musikbibliotek bor i iCloud Drive, sorterat i genremappar (“backar”). Huvudappen på Macen hade redan löst nedladdningen vid skrivbordet — högsta kvalitet från SoundCloud, Spotify och YouTube via yt-dlp och spotdl.

Men låtar upptäcks sällan vid skrivbordet. De dyker upp på förfester, i bilen, i någon annans set. Kravet för MusikKö var enkelt att formulera: fånga låten i stunden, från telefonen, med två tryck.

Den raka vägen — att bygga samma nedladdare på iPhone — visade sig vara tre återvändsgränder i rad:

  • iOS tillåter inte externa processer. Verktygskedjan som mac-appen bygger på kan aldrig köras på telefonen.

  • YouTube-nedladdning kräver att man löser deras JavaScript-utmaningar. Möjligt på en dator med en JS-runtime, orealistiskt att underhålla nativt i Swift.

  • SoundCloud går att prata med direkt från Swift — men kommersiella släpp finns antingen inte där eller ligger bakom deras paywall.

Varje väg som såg ut som en lösning dog vid närmare granskning. Det är den intressanta sortens problem.

Idén: vänd på problemet

Genombrottet var att sluta försöka få telefonen att ladda ner — telefonen behöver inte ladda ner någonting, den behöver bara beställa. Macen har redan verktygen, kvaliteten och biblioteket. Det som saknades var en budkanal mellan fickan och skrivbordet.

Och en sådan fanns redan, gratis och färdigbyggd: iCloud Drive som meddelandekö. Ingen server, ingen backend, inga konton, ingen egen infrastruktur — bara små JSON-filer i en delad iCloud-container som Apple synkroniserar åt mig:

  • Telefonen skriver en jobbfil: låtlänk + vald genremapp.
  • Macen bevakar kön, laddar ner med exakt samma pipeline som alltid, och kvitterar med en resultatfil.
  • Macen publicerar dessutom mapplistan åt andra hållet, så att telefonens dela-meny alltid visar aktuella genremappar — skapar jag en ny back på Macen dyker den upp i telefonens dropdown av sig själv.

Enheterna behöver aldrig vara online samtidigt. Delar jag tre låtar på stan ligger beställningarna och väntar tills Macen vaknar.

Så funkar det

  1. Dela en låt i Spotify (eller SoundCloud/YouTube) → Mer → MusikKö.
  2. Ett mörkt ark glider upp med låtens titel och en lista över genremapparna — ett tryck på rätt back, klart.
  3. Macen plockar upp jobbet, laddar ner i full kvalitet, taggar med metadata och omslag och lägger filen direkt i Musik/<back> i iCloud.
  4. Telefonappen visar kön och kvittona: klar, dubblett eller fel. Dubblettskyddet känner igen låtar som redan finns i biblioteket och laddar aldrig ner samma fil två gånger.

Teknik

  • MusikKö (iOS): SwiftUI-app + share extension. Delningsarket läser mapplistan ur containern (med lokal cache som fallback) och skriver jobbfiler med atomära writes. Byggt med xcodegen för reproducerbar projektstruktur.

  • macOS (huvudappen): SwiftUI-app med kö-bevakare — filsystemsbevakning på iCloud-mappen plus polling som skyddsnät, nedladdning via spotdl/yt-dlp, historik i SwiftData. Hanterar iCloud:s “dataless files” (platshållare som måste materialiseras innan de kan läsas).

  • Protokollet: tre filtyper — queue/, results/, folders.json. En filbaserad meddelandekö utan en enda rad serverkod, med iCloud som transportlager och full spårbarhet: varje jobb går att inspektera som en läsbar JSON-fil i Files-appen.

Resultat

Från impuls till bibliotek på två tryck. Låten jag hörde på förfesten ligger i rätt genremapp, i full kvalitet, taggad och spelklar i rekordbox — innan jag ens är hemma. Systemet kräver noll underhåll, kostar noll kronor i drift och har ingen server som kan gå ner.

Projektet är ett bra exempel på min favoritsorts problemlösning: när den uppenbara vägen är stängd åt tre håll är lösningen sällan att trycka hårdare — det är att rita om kartan. Telefonen slutade vara en nedladdare och blev en fjärrkontroll.