Privacy

Every field we keep

This is the full list of what the Mortiflix reports server accepts, made straight from its code. Anything not listed here is dropped when it arrives.

Everything here is off until the person turns it on, separately for crash reports, usage data and each shared project. The server drops any field not listed here, scrubs every text field again (user folders become ~, emails <email>, long hex/base64 runs <removed>, URL query strings are cut; a text field holding something shaped like a key is not stored at all), and never stores IP addresses.

Built-in preset names: Explainer video. Export presets: YouTube, Social vertical, Master, Audio stems. Any other preset name becomes own.

POST /v1/installs and PATCH /v1/installs/me: opt-in, consents and versions

FieldTypeWhat it is
schemawhole number 1 to 1Schema version (1)
app_versioncode, up to 32 charactersApp version, e.g. 0.9.2
buildcode, up to 64 charactersBuild ID baked into official builds (tells official from Self-built)
osone of: windows, mac, linuxOperating system
os_versioncode, up to 32 charactersOS version, e.g. 11 or 14.5
archone of: x64, arm64, otherCPU architecture
ram_gbwhole number 0 to 4096RAM in GB, stored as a bucket (4, 8, 16, 32, 64, 128)
gpu_vendorone of: nvidia, amd, intel, apple, other, noneGraphics card maker
consentsgroup of fieldsWhat the person turned on
consents.crashestrue / falseCrash reports turned on
consents.usagetrue / falseUsage data turned on

POST /v1/crashes: one crash report

FieldTypeWhat it is
schemawhole number 1 to 1Schema version (1)
reportcode, up to 16 charactersReport ID made on the PC (e.g. R-7K3M-Q2), so a person can quote it
kindone of: app_crash, app_abort, app_error, service_crash, render_failed, setup_failed, install_failedWhat happened
partone of: app, service, render, setup, claudeWhich part crashed (app, service, render, setup); worked out from kind when missing
countwhole number 1 to 10000Times it happened (repeats within 24 hours fold into one report)
caughttrue / falsetrue when the app caught it and kept running
whendate-time, rounded to the minuteWhen it happened (UTC, to the minute)
appgroup of fieldsThe app build
app.versioncode, up to 32 charactersApp version, e.g. 0.9.2
app.commitcode, up to 40 charactersGit commit the build was made from
app.buildcode, up to 64 charactersBuild ID baked into official builds (tells official from Self-built)
app.editorcode, up to 32 charactersEditor base version
app.servicecode, up to 32 charactersMortiflix service version
app.protocolwhole number 0 to 100000Service protocol number
app.channelone of: stable, beta, devBuild channel
systemgroup of fieldsThe computer (no names, no serial numbers)
system.osone of: windows, mac, linuxOperating system
system.os_versioncode, up to 32 charactersOS version, e.g. 11 or 14.5
system.archone of: x64, arm64, otherCPU architecture
system.coreswhole number 1 to 1024CPU core count
system.ram_gbwhole number 0 to 4096RAM in GB, stored as a bucket (4, 8, 16, 32, 64, 128)
system.gpu_vendorone of: nvidia, amd, intel, apple, other, noneGraphics card maker
system.gpu_drivercode, up to 32 charactersGraphics driver version
doinggroup of fieldsWhat the person was doing (ids and counts only)
doing.stagestage 0-6Stage open at the crash (1 Script ... 6 Render)
doing.panelcode, up to 32 charactersPanel open (its id)
doing.commandslist, up to 10Last 10 command ids (never their arguments)
doing.commands[]code, up to 48 charactersCommand id
doing.shotswhole number 0 to 100000Number of shots in the project
doing.length_swhole number 0 to 1000000Project length in seconds
error_namecode, up to 64 charactersError type name (Node services)
errortext, scrubbed, up to 1000 charactersThe error message, scrubbed
attext, scrubbed, up to 200 charactersWhere it panicked (file:line in our code)
threadtext, scrubbed, up to 64 charactersThread name
stacklist, up to 64Stack frames, top first
stack[].functiontext, scrubbed, up to 200 charactersFunction name
stack[].filetext, scrubbed, up to 200 charactersSource file (only for frames in our own code; repo-relative)
stack[].linewhole number 0 to 10000000Line number (shown, never used for grouping)
stack[].ourstrue / falsetrue when the frame is in Mortiflix code
loglist, up to 450A log excerpt the person attached to this one report (kept 30 days)
log[]text, scrubbed, up to 300 charactersOne log line, scrubbed
rendergroup of fieldsRender failures only
render.toolone of: remotion, blender, ffmpeg, otherRender tool
render.tool_versioncode, up to 32 charactersRender tool version
render.formatcode, up to 12 charactersContainer format
render.codeccode, up to 24 charactersCodec
render.sizecode, up to 11 charactersFrame size, e.g. 1920x1080
render.fpswhole number 1 to 1000Frames per second
render.length_swhole number 0 to 1000000Video length in seconds
render.exit_codewhole number -100000 to 100000Tool exit code
render.signalcode, up to 12 charactersSignal that ended the tool
setupgroup of fieldsSetup and install failures only
setup.componentcode, up to 48 charactersComponent id
setup.stepcode, up to 48 charactersSetup step id
setup.exit_codewhole number -100000 to 100000Exit code
servicegroup of fieldsService crashes only
service.exit_codewhole number -100000 to 100000Service exit code
service.signalcode, up to 12 charactersSignal
service.restartswhole number 0 to 100000Restarts in the last 10 minutes
notetext, scrubbed, up to 2000 charactersThe person's own note, only if they typed one (shown as plain text)

POST /v1/errors: a batch of non-crash error counts

FieldTypeWhat it is
schemawhole number 1 to 1Schema version (1)
app_versioncode, up to 32 charactersApp version for the whole batch (else the install's)
buildcode, up to 64 charactersBuild ID baked into official builds (tells official from Self-built)
errorslist, up to 200Up to 200 error counts
errors[].kindone of: claude_session, render_failed, setup_failed, install_failed, service_restart, app_error, otherWhat went wrong
errors[].causecode, up to 64 charactersCause code, e.g. login_expired, rate_limited, exit_1
errors[].signaturecode, up to 64 charactersThe app's own group id
errors[].titletext, scrubbed, up to 1000 charactersFirst error line, scrubbed
errors[].toolone of: remotion, blender, ffmpeg, claude, otherTool involved
errors[].exit_codewhole number -100000 to 100000Exit code
errors[].stagestage 0-6Stage open
errors[].countwhole number 1 to 1000000How many times
errors[].first_atdate-time, rounded to the minuteFirst time it happened in this batch
errors[].stacklist, up to 64Stack frames, only if Part A sent them
errors[].stack[].functiontext, scrubbed, up to 200 charactersFunction name
errors[].stack[].filetext, scrubbed, up to 200 charactersSource file (only for frames in our own code; repo-relative)
errors[].stack[].linewhole number 0 to 10000000Line number (shown, never used for grouping)
errors[].stack[].ourstrue / falsetrue when the frame is in Mortiflix code

POST /v1/events: a batch of usage events

FieldTypeWhat it is
schemawhole number 1 to 1Schema version (1)
eventslist, up to 200Up to 200 events
events[].vwhole number 1 to 1Event schema version (1)
events[].idcode, up to 64 charactersRandom per item, so duplicates are dropped
events[].sessioncode, up to 32 charactersRandom per app start
events[].tdate-time, rounded to the minuteWhen (UTC, to the minute)
events[].appcode, up to 32 charactersApp version, e.g. 0.9.2
events[].projcode, up to 34 charactersRandom per-project ID (never the project name)
events[].eevent nameEvent name, from the fixed list below
events[].dfields of that eventThe event's fields, from the fixed list below (no free text anywhere)

POST /v1/projects: one successful-project summary (a project that reached Rendered)

FieldTypeWhat it is
schemawhole number 1 to 1Schema version (1)
projcode, up to 34 charactersRandom per-project ID (never the project name)
app_versioncode, up to 32 charactersApp version, e.g. 0.9.2
presetbuilt-in name (Explainer video) or ownPreset: a built-in name, or "own" for people's own presets
based_onbuilt-in name (Explainer video) or ownThe built-in preset an own preset was based on
shapeone of: 16:9, 9:16, 1:1, 4:5, customVideo shape
stages_runlist, up to 6Stages run
stages_run[]whole number 1 to 6Stage number
minutesgroup of fieldsMinutes per stage
minutes.1whole number 0 to 100000Minutes in stage 1
minutes.2whole number 0 to 100000Minutes in stage 2
minutes.3whole number 0 to 100000Minutes in stage 3
minutes.4whole number 0 to 100000Minutes in stage 4
minutes.5whole number 0 to 100000Minutes in stage 5
minutes.6whole number 0 to 100000Minutes in stage 6
video_length_swhole number 0 to 86400Video length in seconds
export_presetbuilt-in name (YouTube, Social vertical, Master, Audio stems) or ownExport preset (built-in name, or "own")
regenerate_countwhole number 0 to 100000Regenerate clicks
handoverone of: get, editThe ending: Get the video or Edit the video

POST /v1/shares: a project the person ticked "Share this with Mortiflix" for

FieldTypeWhat it is
schemawhole number 1 to 1Schema version (1)
projcode, up to 34 charactersRandom per-project ID (never the project name)
presetbuilt-in name (Explainer video) or ownPreset (built-in name or "own")
length_swhole number 0 to 86400Video length in seconds
useslist, up to 2What the team may do with it
uses[]one of: learn, showlearn = the team may learn from it; show = may show it
notetext, scrubbed, up to 2000 charactersThe person's note (shown as plain text)
fileslist, up to 2The files that will be uploaded (video and/or project file)
files[].partone of: video, projectWhich file
files[].byteswhole number 1 to 524288000File size in bytes

Usage events (the e and d fields of POST /v1/events)

Fields are numbers, true/false, or values from a fixed list. No field takes typed text.

app.start: App opened

FieldTypeWhat it is
featureslist, up to 4Features built in
features[]one of: whisper, neural-voicesBuilt-in feature
screenone of: <1440, 1440-1919, 1920-2559, 2560+Screen width bucket

app.quit: App closed

FieldTypeWhat it is
minuteswhole number 0 to 1000000Minutes open
stagestage 0-6Stage open (0 = none)
ai_busytrue / falseAI still working
needs_youwhole number 0 to 1000000Things waiting for the person

setup.step: A Setup step ended

FieldTypeWhat it is
stepone of: claude, keys, tools, sharingSetup step
resultone of: done, skipped, failedResult
keysgroup of fieldsKeys step: yes/no per service
keys.elevenlabstrue / falseHas a elevenlabs key (yes/no only, never the key)
keys.geminitrue / falseHas a gemini key (yes/no only, never the key)
keys.upload_posttrue / falseHas a upload_post key (yes/no only, never the key)
keys.postiztrue / falseHas a postiz key (yes/no only, never the key)
keys.anthropictrue / falseHas a anthropic key (yes/no only, never the key)

newproject.closed: New project window closed without Create

FieldTypeWhat it is
had_ideatrue / falseAn idea was typed (true/false only)

project.new: Create pressed

FieldTypeWhat it is
presetbuilt-in name (Explainer video) or ownPreset (built-in name or "own")
based_onbuilt-in name (Explainer video) or ownBuilt-in the own preset was based on
shapeone of: 16:9, 9:16, 1:1, 4:5, customShape
lengthcode, up to 12 charactersLength bucket, e.g. 1-2
assetswhole number 0 to 1000000Assets attached
musicone of: preset, theme, noneMusic source
idea_wordsone of: 0, 1-20, 21-100, 100+Idea length bucket (never the words)

preset.saved: Own preset saved (never its name)

FieldTypeWhat it is
based_onbuilt-in name (Explainer video) or ownBuilt-in it was based on
pages_changedlist, up to 8Pages changed
pages_changed[]whole number 1 to 8Page number

stage.enter: A stage opened

FieldTypeWhat it is
stagestage 0-6Stage
fromstage 0-6Coming from
howone of: next, back, stage_bar, menuHow

stage.done: Leaving a stage forward

FieldTypeWhat it is
stagestage 0-6Stage
your_minwhole number 0 to 1000000Active minutes
wait_minwhole number 0 to 1000000Minutes waiting for the AI
okwhole number 0 to 1000000OK presses
fixwhole number 0 to 1000000Fix presses
cutwhole number 0 to 1000000Cut it presses
versionswhole number 0 to 1000000Versions made
failedwhole number 0 to 1000000Failed items
questions_answeredwhole number 0 to 1000000Questions answered
questions_defaultwhole number 0 to 1000000Questions left on default
chat_msgswhole number 0 to 1000000Chat messages sent (count only)

stage.back: Went back to an earlier stage

FieldTypeWhat it is
tostage 0-6Went back to
remadewhole number 0 to 1000000Items remade

handover: The ending of stage 4

FieldTypeWhat it is
howone of: get, editGet the video / Edit the video

feature.used: First use per session of a listed feature

FieldTypeWhat it is
fone of: node_maximise, node_moved, node_inspector_versions, use_this_version, click_regenerate, chat_message, chat_button, talking_about_bar, assets_attached, asset_replaced, music_theme_page, three_themes_from_chat, own_voice_booth, mini_daw, loose_preview_play, loop, preset_creator, preset_edit, export_advanced, post_opened, render_another_format, make_version_2, what_we_sendFeature id from the allowlist

edits.summary: Leaving 5 Edit: counts per command group

FieldTypeWhat it is
trimwhole number 0 to 1000000trim edits
splitwhole number 0 to 1000000split edits
movewhole number 0 to 1000000move edits
ripplewhole number 0 to 1000000ripple edits
colourwhole number 0 to 1000000colour edits
textwhole number 0 to 1000000text edits
volumewhole number 0 to 1000000volume edits
transitionwhole number 0 to 1000000transition edits
effectwhole number 0 to 1000000effect edits
undowhole number 0 to 1000000undo edits

render.start: Render pressed

FieldTypeWhat it is
presetbuilt-in name (YouTube, Social vertical, Master, Audio stems) or ownExport preset
sizeone of: 720p, 1080p, 4KSize
advanced_changedtrue / falseAdvanced settings changed

render.done: Render ended

FieldTypeWhat it is
oktrue / falseFinished without error
minuteswhole number 0 to 1000000Minutes
codecode, up to 48 charactersError code only, never the message
stoppedtrue / falseStopped by the person

export.done: Delivered

FieldTypeWhat it is
presetbuilt-in name (YouTube, Social vertical, Master, Audio stems) or ownExport preset
timeline_revtrue / falseTimeline changed since last render

post.done: Posted (never account names, titles or descriptions)

FieldTypeWhat it is
platformslist, up to 10Platforms
platforms[]one of: youtube, tiktok, instagram, linkedin, x, facebook, otherPlatform
scheduledtrue / falseScheduled

project.reopen: A project opened again

FieldTypeWhat it is
dayswhole number 0 to 1000000Days since last open
stagestage 0-6Stage

project.kept: 30 days after export

FieldTypeWhat it is
existstrue / falseProject still exists
file_existstrue / falseExported file still exists

share.done: Shared a project

FieldTypeWhat it is
useslist, up to 2Uses ticked
uses[]one of: learn, showUse

share.taken_back: Took a share back

FieldTypeWhat it is
useslist, up to 2Uses
uses[]one of: learn, showUse

Stored by the server itself

FieldWhat it is
install IDRandom UUID made at opt-in; resettable from the app
key hashHMAC-SHA-256 of the install's key (the key itself is never stored)
received timeWhen the server got it
last seenWhen the install last sent anything (an install silent for 12 months is deleted)