Install & set up

Everything runs on your own machine — no hosted service, no client secret. This takes about five minutes.

Requirements

Node.js 18+No npm dependencies to install — the tool runs directly with node.
ffmpeg + ffprobeOnly needed for the optional rendered MP4 path. A normal distro build works (apt install ffmpeg). Ideally built with drawtext (libfreetype) so clip titles can be burned in — without it, rendering still works, just without titles.
A free Twitch accountTo register a Public application (below) and to log in as the channel whose clips you want to reel.
  1. Get the code

    git clone https://github.com/daydream-software/project-elm.git
    cd project-elm
  2. Register a Twitch application (Public)

    Project Elm needs its own Twitch Client ID to talk to the Helix API on your behalf.

    1. Go to dev.twitch.tv/console/apps and sign in.
    2. Click Register Your Application.
    3. Fill in:
      • Name — anything unique, e.g. yourname-project-elm.
      • OAuth Redirect URLshttp://localhost:3000. The form requires one, but this tool never uses it — the Device Code Flow it uses has no redirect step.
      • CategoryApplication Integration (or Other).
      • Client TypePublic. This is the important one: a Public app has no client secret, which is exactly what a local tool needs.
    4. Click Create, open the app, and copy its Client ID.
    ℹ️

    The Client ID is public by design — on its own it can't access anyone's account. Every real action still requires you to log in and explicitly consent (step 4). That's why it lives in a local, gitignored .env rather than being hardcoded: each user brings their own.

  3. Configure

    cp .env.example .env
    # edit .env and set:
    # TWITCH_CLIENT_ID=<your Client ID>
  4. Run it

    node render/server.mjs

    Open http://localhost:8080/. On first run you'll see the login screen:

    Project Elm's first-run screen, showing a single “Log in with Twitch” button.

    Click Log in with Twitch — a device code and URL appear on the page. Open the URL, enter the code, sign in with your channel account, and approve the manage clips permission (scope channel:manage:clips — required to download your own clips). The token is cached locally in render/.token.json (gitignored) and refreshes itself; you won't need to log in again.

⚠️

Downloaded clips, your Twitch token, and saved reel configurations are all stored locally and gitignored — nothing here is uploaded anywhere except the download itself, which comes straight from Twitch's official endpoint.

Next: how to use it →