The search screen
The download screen
As a DJ, I receive a lot of requests. The problem is, I might not own the song or know it well enough to play it in my set. To solve this today, I have to either load the song from Spotify and play it through an external aux cord, which messes up the mix, or go and buy the song and import it into my software, which is a time consuming and expensive process. I was inspired to create a software solution which is minimally invasive in my DJ workflow and allows me to download tracks that I don't have on hand for use in my sets.
What it does
Serato YouTube Importer provides an on-screen transparent overlay that allows the DJ to quickly search YouTube by keyword, select a track to download, and import it into his or her software without interrupting the mix.
How I built it
I used Electron, the desktop app framework from Github, to create a frameless, transparent window that features a minimal interface consisting of a search bar, and search results, when fetched. The application uses a combination of the YouTube Data API, ffmpeg, and AutoHotkey to stream the audio data to an mp3 on my filesystem, and drag and drop it into my software.
Challenges I ran into
Drag and drop on Windows is a real pain in the ass. I spent five hours trying to use the native drag and drop functionality provided by Windows DLLs, first in node.js and then in AutoHotkey. Finally, I discovered that Serato, the DJ software I use, overrides Window's native mouse events and handles everything internally, rendering all of that work useless.
Accomplishments that I'm proud of
This is by far the most beautiful (aesthetic) piece of software I've ever written and I look forward to using this in my DJ gigs.
What I learned
A little bit about COM and OLE on Windows. Black magic.
Node.js can do anything, literally anything. Also black magic but in a good way.
What's next for Serato YouTube Importer
I really like the "spotlight search" UI that I developed as part of this project. I think there are many more applications for that specific interaction, and not just for downloading YouTube.