Flame Pro DJ Studio is a desktop application developed and supported by Flame Productions LLC ("we", "us"). Contact: privacy@moflamepro.com.
This policy describes what data Flame Pro DJ Studio collects, where it goes, and what we do with it. It applies to:
license.moflamepro.com for activation, updates, and optional usage statistics.It does not apply to Paddle's checkout. Paddle is the merchant of record for purchases and has its own privacy policy at paddle.com/legal/privacy.
~/.music_manager/.The app writes the following to ~/.music_manager/ on your machine:
library.db — SQLite database with track metadata, BPM/key analysis, and play counts.library_cache.json — debug-only mirror of the database for inspection.settings.json — your preferences, including any API keys you entered.playlists.json, cuepoints.json, session_history.json — DJ data.*_user_tokens.json — OAuth tokens for streaming services you connected. Encrypted at rest with AES-256-GCM, using a 32-byte key derived from the macOS Keychain via Electron's safeStorage. On older macOS without Keychain support, the app degrades to 0600 plaintext so it still boots. Side effect: copying ~/.music_manager/ to another Mac will not preserve OAuth tokens; the key blob is Keychain-bound to the original machine, so after a migration you'll re-connect each streaming service.recycle/ — files the app moved to its recycle bin instead of deleting permanently.activity.log — application log, capped at ~5 MB then rotated.None of this data leaves your machine unless you trigger a feature that calls an external service. The list of external calls follows.
The Gig Wizard, smart-fix, and translate features call the AI provider you configured in Settings → AI:
What we send: track titles, artists, BPMs, keys, and the genre / mood / energy fields you generated locally. We do not send audio files to these providers.
If you connect a streaming service in Settings → Streaming, the app stores an OAuth token locally and queries that service's API on your behalf:
Tokens are stored locally only. We do not see them.
When you run Library → Identify, the app generates an audio fingerprint locally (using chromaprint/fpcalc) and submits it to AcoustID to look up the recording. The fingerprint is a numeric hash, not the audio. This is governed by the AcoustID privacy policy.
When you run the Spotify Sync tool, the app stores Spotify's canonical danceability / energy / valence / tempo / key for each matched track in your local library.db (table spotify_features). Per Spotify Developer Policy IV, these rows expire after 30 days and are swept on the next app launch; the next sync re-fetches them on demand.
The Track Details tool can optionally query lyrics.ovh for full lyric text. This integration is disabled by default; lyrics.ovh is an independent third-party service whose licensing arrangements and availability are determined by that provider, not by us. To enable it, go to Settings → External APIs, find the lyrics.ovh card, and toggle "Enable lyrics.ovh". When enabled, the app sends the artist + title pair to lyrics.ovh on demand. Nothing is cached on disk.
When you enable the profanity blur on a deck in the DJ panel, the app runs Whisper (or falls back to LRCLIB synced lyrics) to identify the timestamp windows where flagged words appear. That list of timestamps may be cached on the track record so we don't have to re-transcribe next time; the transcript text itself is held in memory only and is never written to disk. The blur is applied at playback time as an audio-routing decision (the vocals-stem gain ramps to zero in those windows). No modified audio file is created.
The Auto-Clean panel in Tools is a library-cleanup tool. It scans for missing files, duplicates, and tag corrections. It does not transcribe or modify audio.
If "Check for updates" is enabled in Settings → General, the app makes a single HTTPS request to the update server on launch to check for a new version. The request includes the current version string and platform (macOS / Windows / Linux). It does not include identifying information.
If you turn on Settings → General → "Send anonymous crash reports", the app sends stack traces, the app version, your operating system, and breadcrumbs (a short trail of UI actions leading up to the crash) to Sentry (sentry.io) when something fails. The default is OFF; no crash reports leave your machine unless you explicitly enable this.
We do not include: filenames or paths from your library; audio content; track metadata (titles / artists / tags / lyrics); API keys, OAuth tokens, or license keys; or anything you've typed into search / settings fields. You can turn crash reports off at any time in Settings → General; the change takes effect on the next launch.
Nothing is sent unless you open Settings → About → Report a Bug, write a description, and click Send. When you do, the app uploads to our server (license.moflamepro.com, or the beta server) and forwards to our support inbox:
activity.log (roughly the last 400 lines) so we can diagnose the problem.Unlike crash reports, this log slice may contain file paths from your library (e.g. folder names and track filenames), because that's often what's needed to reproduce a bug. Before it leaves your machine we automatically redact obvious credentials (API-key / token / "Bearer" patterns). We do not include audio content or your API keys / OAuth tokens / license key. If you'd rather review exactly what's sent, use the "Email instead" option in that dialog; it opens your mail client with the same information so you can edit or remove anything before sending. Bug reports are used only to fix the issue you reported.
When you purchase a license, activate the app, or check for updates, the app communicates with our license server at license.moflamepro.com (production) or license-staging.moflamepro.com (beta). The server logs and retains the following:
These records persist for the lifetime of the license so the server can validate activation and serve update files. You can request deletion of this record by emailing support@moflamepro.com; note that deleting your license record also deactivates the license on all your machines.
The server uses these to enforce the seat limit on each tier and to revoke activation if a license is reported compromised. Records are retained for the lifetime of the license.
/updates/* requests.Flame Pro DJ Studio's usage-statistics channel works differently depending on your license tier. This section describes the actual current behavior for both.
Pro: off by default, your choice. Nothing sends until you explicitly turn on Settings → General → "Help improve Flame Pro DJ Studio by sharing anonymous usage statistics." Turn it off at any time and the next app launch stops sending.
Free: a small always-on anonymous floor, plus a detailed layer you can turn off. A bounded set of coarse events (app launches, which tools you open, whether they finished, and error categories, the "Anonymous floor events" rows in the table below) always sends on the free version, identified only by an anonymous ID that changes every day (see "How you appear to us," below), never a stable identifier and never anything that could tie one day's activity to the next. On top of that floor, the free version also sends a richer detailed layer by default: the same coarse events plus the smart-feature-feedback events (the "Detailed-layer-only events" rows below), identified by a stable per-install ID (a pseudonymous identifier that does not directly identify you as an individual). You can turn the detailed layer off in Settings → General → "Share detailed usage data," which drops you back to the anonymous floor only. Raw events are retained for a bounded window and then pruned/aggregated (see "Retention," below); you can also have your telemetry deleted on request. The anonymous floor itself has no off switch while you're on the free version; see "Why the anonymous floor can't be turned off," below.
You're notified before anything sends, and your choice takes effect going forward. On first launch (or the first launch after this feature shipped, for existing installs), a notice lays out what's shared, that it never includes your tracks or anything that directly identifies you, and that you can change your mind anytime in Settings (changes apply prospectively). On the free version the detailed layer is on by default outside the EU/UK (you can turn it off right there on the notice or later in Settings) and off by default for EU/UK users, who turn it on to share (affirmative opt-in). The always-on operational floor stays either way. No usage data of any kind sends before you've seen that notice and continued past it; the app enforces this consent gate regardless of what this document says.
When enabled, the app sends events to our analytics endpoint at license.moflamepro.com/api/events (production) or license-staging.moflamepro.com/api/events (beta).
~/.music_manager/install_id. Not linked to your email, license key, or machine fingerprint. Stable across app upgrades, so events from the same install can be grouped together.Anonymous floor events — always send on the free version; send under the Pro opt-in when you've turned Pro's toggle on:
| Event | When | Fields |
|---|---|---|
app_session_start | App boot | library_size_bucket, tool_install_status |
tool_open | User opens a tool | tool_id (from a fixed enum) |
tool_complete | Tool finishes (or cancels) | tool_id, outcome, duration_bucket |
error_category | A recoverable error occurred | category (enum), feature (enum) |
perf_percentiles (weekly) | Once per 7-day window | p50/p95/p99 for boot, library load, scan, analyze durations |
Detailed-layer-only events — free version only while the detailed layer is on, or Pro once opted in; never sent under the anonymous floor alone:
| Event | When | Fields (never which track) |
|---|---|---|
library_composition (weekly) | Once per 7-day window | Top-20 genre counts, BPM-bucket distribution, distinct-genre count, total-tracks count |
bulk_apply | You apply bulk Smart Fix / Metadata / Genre proposals | rule_id, count_bucket, accept_pct_bucket |
smartfix_decision | A SmartFix suggestion is accepted or overridden | rule id (hash prefix), field, stage, source, confidence bucket, accept/override |
genre_override | You correct the AI's genre guess | the corrected genre (bounded category), which field |
mood_relabel | You change a track's mood label | old → new label, arousal/valence (audio characteristics) |
event_plan_edit | You change a generated Event Planner / Gig Wizard plan | event type, feel, segment count, whether segments were swapped |
playlist_composition | You build a playlist | source (AI / imported / manual), track count |
search_result_action | You open or preview a Natural Search result | bucketed result rank, how many results were shown |
automix_transition | An Auto-Mix transition happens | whether it was kept or skipped/overridden |
dj_play_transition | You cross to the next track on the decks | mix style, bucketed fade length, whether beatmatching was active |
assistant_query | You ask Ask Flame something | classified intent category, router vs AI provider, success |
fix_review_decision | You act on a Fix Review Queue item | stage, decision, source |
ollama_recommend_chosen | You accept a local-model size recommendation | a size bucket, whether you accepted it |
onboarding_started, onboarding_wow_shown | First-launch onboarding funnel | scan timing and bucketed library-health counts |
request_list_checked, crate_exported | You check or export your wishlist/request list | bucketed counts, import source, export target |
cap_hit | You hit a free-tier cap or trial limit | which cap, and the surface it happened on |
clap_query_structure | A natural-search query, only if the separate toggle below is on | boolean shape flags, never the words you typed |
moflamepro.com/transparency (e.g., "60% of operators use Fix My Library at least once a month").This coarse, non-identifying signal helps support the free version's continued development. It's also built, by design, to sit outside what most privacy regimes consider "personal data" in the first place: it carries no stable identifier (see "How you appear to us," above), no track or file information, and no text you've typed anywhere in the app. If you'd rather not send even that: use the Pro tier, where usage statistics are off by default, or turn off the detailed layer in Settings, which is already the minimum the free version sends.
Settings → General also has a SEPARATE checkbox: "Help improve natural search (share anonymous query structure)." Default OFF on both tiers. It has no effect unless you've made the initial consent choice AND enabled the layer above it (Pro's opt-in toggle, or the free tier's detailed-sharing toggle). When enabled, every time you run a natural-search query the app sends a clap_query_structure event with boolean shape flags (did the query contain a genre word, a vibe word, a tempo word), a word-count bucket, and a result-count bucket. We never send the query text itself, the specific words, or any information about which tracks came back. If you turn off the layer above it, this sub-toggle stops sending too.
The analytics channel described above is the only behavioural telemetry Flame Pro DJ Studio has. It's bounded by an explicit allow-list of event names and bucketed counters only (no raw values). Beyond that channel, we still don't collect:
The single exception, called out for honesty: if you opt in to "Send anonymous crash reports" (off by default), stack traces of crashes are sent to Sentry. That is a crash signal, not a behaviour signal; see the "Crash reports" section above.
This website serves static HTML and CSS only. We do not run analytics on these pages and do not set any cookies. We do not log IP addresses beyond standard transient web-server logs (which we don't retain). The email you enter on the free-download page is sent to our license server solely to email you a download link.
~/.music_manager/.Our license and analytics servers are hosted in the United States. If you are accessing the app from the European Economic Area, the United Kingdom, or any other jurisdiction with cross-border data-transfer rules, by activating your license you consent to the limited transfer of your license key and machine-ID hash to our US-based infrastructure. On the free version, the detailed usage-statistics layer is off by default for EU/UK users and only sends if you affirmatively turn it on (see "Optional usage statistics," above).
The app is not directed at children under 13.
We may update this policy. Material changes will be announced in release notes and on this website. The "Last updated" date at the top reflects the most recent change.
Privacy questions: privacy@moflamepro.com. Security issues (vulnerabilities, suspected key compromise): security@moflamepro.com.