Privacy Policy

Effective date: 2026-07-18 · Last updated: 2026-07-18

Who we are

Flame Pro DJ Studio is a desktop application developed and supported by Flame Productions LLC ("we", "us"). Contact: privacy@moflamepro.com.

What this document covers

This policy describes what data Flame Pro DJ Studio collects, where it goes, and what we do with it. It applies to:

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.

TL;DR

Data stored locally

The app writes the following to ~/.music_manager/ on your machine:

None of this data leaves your machine unless you trigger a feature that calls an external service. The list of external calls follows.

External services (optional, user-triggered)

AI providers

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.

Streaming services (optional, OAuth)

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.

AcoustID fingerprinting (optional)

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.

Spotify audio-features cache (when Spotify is connected)

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.

Third-party lyrics (lyrics.ovh — disabled by default)

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.

DJ profanity blur (in-memory only)

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.

Update check (optional)

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.

Crash reports (opt-in, off by default)

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.

Bug reports (only when you submit one)

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:

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.

License server

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:

License purchase records

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.

Per-machine activation records

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.

Update-feed access logs

What the server does NOT collect

Optional usage statistics

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).

How you appear to us

What gets sent (per event)

Enumerated event list

Anonymous floor events — always send on the free version; send under the Pro opt-in when you've turned Pro's toggle on:

EventWhenFields
app_session_startApp bootlibrary_size_bucket, tool_install_status
tool_openUser opens a tooltool_id (from a fixed enum)
tool_completeTool finishes (or cancels)tool_id, outcome, duration_bucket
error_categoryA recoverable error occurredcategory (enum), feature (enum)
perf_percentiles (weekly)Once per 7-day windowp50/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:

EventWhenFields (never which track)
library_composition (weekly)Once per 7-day windowTop-20 genre counts, BPM-bucket distribution, distinct-genre count, total-tracks count
bulk_applyYou apply bulk Smart Fix / Metadata / Genre proposalsrule_id, count_bucket, accept_pct_bucket
smartfix_decisionA SmartFix suggestion is accepted or overriddenrule id (hash prefix), field, stage, source, confidence bucket, accept/override
genre_overrideYou correct the AI's genre guessthe corrected genre (bounded category), which field
mood_relabelYou change a track's mood labelold → new label, arousal/valence (audio characteristics)
event_plan_editYou change a generated Event Planner / Gig Wizard planevent type, feel, segment count, whether segments were swapped
playlist_compositionYou build a playlistsource (AI / imported / manual), track count
search_result_actionYou open or preview a Natural Search resultbucketed result rank, how many results were shown
automix_transitionAn Auto-Mix transition happenswhether it was kept or skipped/overridden
dj_play_transitionYou cross to the next track on the decksmix style, bucketed fade length, whether beatmatching was active
assistant_queryYou ask Ask Flame somethingclassified intent category, router vs AI provider, success
fix_review_decisionYou act on a Fix Review Queue itemstage, decision, source
ollama_recommend_chosenYou accept a local-model size recommendationa size bucket, whether you accepted it
onboarding_started, onboarding_wow_shownFirst-launch onboarding funnelscan timing and bucketed library-health counts
request_list_checked, crate_exportedYou check or export your wishlist/request listbucketed counts, import source, export target
cap_hitYou hit a free-tier cap or trial limitwhich cap, and the surface it happened on
clap_query_structureA natural-search query, only if the separate toggle below is onboolean shape flags, never the words you typed

Retention — where it lives, who has access

Why the anonymous floor can't be turned off (free version)

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.

Changing your choice later

What we never collect via this channel

Optional second toggle — natural-search query structure

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.

What we do not collect

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.

Marketing website (this site)

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.

Your data, your control

International users

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).

Children

The app is not directed at children under 13.

Changes

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.

Contact

Privacy questions: privacy@moflamepro.com. Security issues (vulnerabilities, suspected key compromise): security@moflamepro.com.