Skip to content

How Files Are Organized

When you drop files into Producer Dashboard’s inbox folders, the app automatically figures out which song each file belongs to and organizes everything into a clean folder structure. This page explains why the inbox folders are designed the way they are, what happens step-by-step during import, and what you can configure in Settings.


Producer Dashboard uses three distinct inbox folders:

  • Bounces/ — for exported audio mixes
  • Stems/ — for individual instrument or vocal tracks
  • Projects/ — for DAW session files

The reason for separate folders, not one: bounces and stems use exactly the same file extensions (.wav, .mp3, .aiff, etc.). There is no way to tell them apart by looking at the file itself — a stem and a bounce are both just audio files. The folder you put them in is the only signal the app has to classify them correctly.

If both types went into a single folder, every stem would end up categorized as a bounce (or vice versa), which would break how tracks are tagged, how the waveform panel separates them, and how they’re displayed in the activity panel.

Projects have distinct extensions (.als, .logicx, .flp, etc.) so they could technically share a folder — but keeping them separate makes your inbox easier to manage and keeps the pipeline logic clean.


As soon as files land in the inbox folders and you trigger an import (from the Files page), the app runs them through a four-stage pipeline automatically.

The app scans all three inbox folders and classifies every file by extension and location:

Inbox FolderWhat goes here
Bounces/WAV, MP3, AIFF, FLAC, M4A
Stems/WAV, MP3, AIFF, FLAC, M4A
Projects/.als, .logicx, .flp, .ptx, .cpr, .rpp, .reason, .song

Hidden files (names starting with .) are skipped. Files already linked to an existing track group are also skipped so they aren’t processed again.

Ableton Live projects: when the scanner encounters a .als file, it treats the entire parent folder as the unit to move — not just the file — because Ableton projects depend on a Samples/ subfolder and other assets alongside the .als.

This is where the app decides which files belong to the same song. It runs a two-phase matching algorithm (detailed below).

Matched files are moved from the inbox into a structured tracks/ hierarchy:

tracks/
├── Ancient Dusk/
│ ├── bounces/
│ │ └── Ancient Dusk - Clean.wav
│ ├── stems/
│ │ ├── Ancient Dusk Drums.wav
│ │ └── Ancient Dusk Bass.wav
│ └── projects/
│ └── Ancient Dusk Project.als
└── Midnight City/
├── bounces/
└── stems/

For project files that already exist in the organized hierarchy, the inbox copy is replaced with a symbolic link rather than duplicated. This keeps your projects folder clean and saves disk space.

Inbox files that were already in the tracks/ folder are cleaned up automatically — you won’t end up with duplicates.

Stems that don’t match any song stay in the Stems/ inbox rather than being moved. Only bounces and projects create new track groups; unmatched stems wait until a matching group exists.

Organized track groups and their files are synced to the cloud database, making them available across devices and visible in your dashboard grid.


Getting files into the right song group is the hardest part of import. The app uses a two-phase approach.

Before anything is compared, every filename is stripped down to just the core song name. The normalizer removes:

  • File extension
  • Underscores (replaced with spaces)
  • Version numbers: v1, V3, version 2
  • Timestamps: 2.06.22 am, [2025-10-09], 6-digit dates
  • Content in parentheses or square brackets: (final), [127 D#m]
  • Mix identifiers: clean, full mix, radio edit, demo, wip, master, mastered, rough, final (planned — not yet implemented, see note below)
  • Technical specs: 320kbps, 44.1hz, 128bpm
  • Trailing punctuation and special characters

Examples:

FilenameNormalized to
ATL - Ancient Dusk [127 D#m] v11 - CLEAN.wavatl ancient dusk
Ancient Dusk - Full Mix.wavancient dusk
Ancient Dusk Radio Edit.mp3ancient dusk
My Song Beat_Idea_v3_WIP.wavmy song beat idea
Clean Slate.wavclean slate (“clean” only stripped as a trailing suffix, not mid-name)

When implemented, the normalizer will be careful not to strip words that are part of the actual song title — Clean Slate would stay clean slate because clean isn’t in trailing position.

Phase 1 — Match against existing library

Section titled “Phase 1 — Match against existing library”

Every file is checked against your existing track groups in the database. The app looks for your existing song names as a substring within each normalized filename, checking longest names first so the most specific match wins.

Existing groups: "Atl Alex Ancient Dusk", "Atl Alex"
Incoming files:
"atl alex ancient dusk clean" → "atl alex ancient dusk" found → matched ✓
"atl alex ancient dusk full mix" → "atl alex ancient dusk" found → matched ✓
"midnight bloom v3" → no match → goes to Phase 2
"midnight bloom final mix" → no match → goes to Phase 2

Matched files are assigned to the existing group immediately. They never create duplicates.

Files that didn’t match anything in your library are clustered against each other using Jaro-Winkler string similarity. Any two files whose normalized names score 0.85 or higher get grouped together.

The app is also noise-aware: if a large portion of the unmatched filenames share a common leading word (an artist prefix like “Atl Alex” or “Es” that appears in 40%+ of files), that token is stripped for comparison purposes only, so it doesn’t inflate similarity scores between unrelated songs.

Unmatched files:
"midnight bloom v3"
"midnight bloom final mix"
"midnight bloom bass stem"
"random idea"
Similarity check:
"midnight bloom" ↔ "midnight bloom" → score ≥ 0.85 → same cluster
"midnight bloom" ↔ "random idea" → score < 0.85 → different cluster
Result:
Cluster 1 → group name: "Midnight Bloom" (shortest name in cluster)
Cluster 2 → group name: "Random Idea"

The group name is taken from the shortest normalized name in each cluster, then title-cased. This tends to produce the cleanest result since shorter names have had more suffixes stripped.


You can view and manage your storage folder from Settings → Storage.

If your account is connected to Dropbox, the storage folder path is managed by Dropbox and is read-only. The inbox folders (Bounces/, Stems/, Projects/) live inside your PRODUCER-DASHBOARD folder on Dropbox.

If you’re not using Dropbox, the default storage folder is ~/Music/ProducerDashboard. You can change this to any folder on your computer:

  1. Go to Settings → Storage
  2. Click Change next to the current path
  3. Choose a folder using the system directory picker

The app validates that the chosen path exists, creates the Bounces/, Stems/, Projects/, and Reports/ subfolders if they’re missing, and saves the path so it persists across app restarts.

You can also click Open Folder to reveal the storage directory in Finder (or File Explorer on Windows) at any time.


  • Drop stems in Stems/ only — there’s no other way for the app to know a file is a stem. Any audio file in Bounces/ is treated as a bounce regardless of its name.

  • Name files with the song name first — the normalizer strips suffixes from the end. Ancient Dusk - Clean.wav groups correctly; CLEAN_AncientDusk_v3.wav may not.

  • Import regularly rather than in bulk — the more songs already in your library, the better Phase 1 matching works. Importing incrementally reduces the chance of files clustering incorrectly in Phase 2.

  • Unmatched stems stay in the inbox — if you see stem files still in Stems/ after an import, it means no matching song group was found. Import the corresponding bounce or project first, then import the stems again.