Version: 1.9. Last updated: 16 October 2026.
Adagio processes video entirely on your device. So that this promise can be checked rather than taken on trust, this page publishes the complete list of the anonymous statistics the app sends — every measurement, every label on it, and every value that label can take. The list is finite: the app cannot send a measurement that is not on this page, and a new one cannot be added without being described here — that is verified automatically on every build.
Crash reports are not part of these statistics. After a crash the app sends a crash report the next time it starts, and failures inside the app are reported as short notices; both go to a separate service, and what they contain is described in the Crash reports section of the Privacy Policy.
This is a companion to the Privacy Policy, not a replacement.
What this data does not contain
None of the measurements below contains, or can contain:
- video, frames or thumbnails;
- file names, paths or photo-library object identifiers;
- device, install, user, account or advertising identifiers;
- the exact resolution, duration or frame rate of your video;
- EXIF, geotags or capture time;
- error text, logs, stack traces, screenshots or screen recordings;
- the people you sent a result to;
- transaction identifiers, receipts or payment details.
The records carry no device or user identifier. One upload holds the records of one device and is stored with one shared timestamp, so the records of one upload are linked to each other. Nothing in them links different uploads to each other or to you, and we do not attempt such matching.
The measurements
Fourteen in total. A “counter” is a whole number of events; a “histogram” is a distribution of durations across fixed buckets, never an individual value.
| Measurement | Kind | What it counts | Labels |
|---|---|---|---|
adagio_ | counter | how a render ended | outcome, reason, model_, platform, os_, release |
adagio_ | histogram | how long the whole render took | quality_, model_, platform, release |
adagio_ | histogram | how long the selected processing range was — in seconds of the source video, not seconds of work | quality_, model_, platform, release |
adagio_ | counter | how many frames were produced | quality_, factor, model_, thermal_, platform, release |
adagio_ | counter | how many seconds of work those frames took | quality_, factor, model_, thermal_, platform, release |
adagio_ | counter | which class the source clip falls into | source_, fps_, aspect_, platform, release |
adagio_ | counter | how far the frame had to be shrunk for the model | downscale_, model_, quality_, platform, release |
adagio_ | counter | what you did with the finished result | action, outcome, platform, release |
adagio_ | counter | which steps of the app were reached, including the steps toward buying Pro | transition, platform, release |
adagio_ | counter | what the video was set up for — smoother motion or slow motion, the whole clip or chosen moments — and how processing ended | goal, scope, outcome, platform, release |
adagio_ | counter | the processing-setup step left from, or that processing was started | step, platform, release |
adagio_ | counter | the system's own frame engine handed a video to our model — and why | handover_, platform, os_, release |
adagio_ | counter | the steps of the first run after installing — each one once per install | first_, platform, release |
adagio_ | counter | how often the app is opened: the first opening in a day, week, month; a new install; a return on day 1, 7, 30; for the last month — on how many days the app was opened and how many videos were made, in buckets | activity, platform, release |
Both histograms use these bucket bounds, in seconds: 1, 2, 5, 10, 30, 60, 180, 600, 1800, 7200 and “above”. A histogram record carries three numbers: how many observations were folded into it, their sum, and the per-bucket counts. Which has a consequence better said than left out: when a record has folded exactly one observation, its sum is that render's duration, to a fraction of a second. It is still a number with no name, file or identifier attached — but it is not “only a bucket”, and calling it only a bucket would be untrue.
The labels and all of their values
| Label | Meaning | Possible values |
|---|---|---|
outcome | how it ended | success, failure, cancelled |
reason | why it failed; none on success | none, unknown, timeout, permission_, file_, disk_, writer_, probe_, memory_, backgrounded_, slow_, audio_, mux_, enhance_, model_, model_, model_, quality_, source_ |
model_ | the frame-size class the model was chosen for. Not your clip's resolution — the bucket it fell into. none means the platform's own engine did the work and none of our models was used | 360p, 480p, 720p, 1080p, 1440p, 4k, none |
platform | platform | ios, android, macos |
os_ | the major OS version only — no minor version, no build number | ios_, ios_, ios_, android_, android_, android_, macos_, macos_, macos_ |
release | app version | 1.4.0+1, 1.3.0+1, 1.2.0+1, 1.1.0+1, 1.0.0+1 |
quality_ | the quality mode you chose | faster, best |
factor | how much smoother the result was made | 2, 4, 8 |
thermal_ | the device's thermal band during the work; not a temperature | nominal, fair, serious, critical |
source_ | resolution class of the source clip, by the long edge of the frame | sd_, hd_, fhd_, qhd_, uhd_ |
fps_ | frame-rate class of the source clip | <=30, 31_, >60 |
aspect_ | frame orientation | portrait, landscape, square_ |
downscale_ | how far the frame's long edge had to be shrunk | <=1, >1_, >1.5_, >2_, >3 |
action | what happened to the result (played also when it started by itself) | played, saved, shared |
transition | the app step reached; values starting with free_, offer_, status_, buy_, restore_ are steps toward buying, see below | import_, analysis_, render_, render_, result_, result_, result_, free_, free_, free_, free_, offer_, offer_, offer_, status_, buy_, buy_, buy_, buy_, restore_ |
goal | what was asked for: smoother motion or slow motion | smooth, slow_ |
scope | the whole clip or chosen moments | whole, moments |
step | the processing-setup step left from; confirm — left the last step without starting; started — processing was started | goal, scope, moments, whole_, fps, confirm, started |
handover_ | why the system's own engine handed the video to our model: raster — it does not take this frame size; memory — not enough memory before the start; memory_ — free memory could not be measured; teardown_ — the previous processing had not closed yet; restart — processing began again on our model mid-way: memory ran out, or the system engine failed | raster, memory, memory_, teardown_, restart |
first_ | a step of the first run: the introduction was shown, finished, or skipped on its first, second or third slide; the answer to the system's photo-access question (the whole library, part of it, refused — including a block set by the device's restrictions) or “Later” — iPhone and iPad only; the first import; the first finished video; the first save | intro_, intro_, intro_, intro_, intro_, photo_, photo_, photo_, photo_, import, render_, saved |
activity | active_ / active_ / active_ — the first opening of the app in a calendar day, week, month (by the device's clock); installed — a new install; return_ / return_ / return_ — an opening on exactly the 1st, 7th, 30th calendar day after installing; month_ — on how many days of the last calendar month the app was opened (1, 2–4, 5–10, 11 or more); month_ — how many videos were made that month (0, 1, 2–3, 4 or more) | active_, active_, active_, installed, return_, return_, return_, month_, month_, month_, month_, month_, month_, month_, month_ |
The steps toward buying Pro
These values of the transition label describe the way from the free videos to a purchase. They carry no amounts, prices, currency, receipts or transaction identifiers.
free_,video_ spent_ 1 free_,video_ spent_ 2 free_— a finished video took the first, second or third free video;video_ spent_ 3 free_— the free videos had run out: the result can be watched only with the Adagio mark;limit_ reached offer_— the Pro offer was opened from such a result;opened_ result offer_— the Pro offer was opened with the Pro button in the list of videos;opened_ sidebar offer_— the purchase screen was opened from Settings;opened_ settings status_— the "Purchase status" link was opened from the offer;opened_ from_ offer buy_,completed buy_,pending buy_,cancelled buy_— how the store's payment sheet ended after "Buy": purchase, awaiting approval, declined, error;failed restore_— "Restore purchase", or "Try again" after a failed check, was tapped and the app asked the store.tapped
The first run
The counter adagio_ shows how many new installs get from the app's introduction to their first saved video. So that each step is counted once, the app keeps a mark of its own — “this step has happened”. The marks are kept only in the app's data on your device, are never sent, contain no number of any kind, and are deleted with the app. With statistics switched off, a step is marked but not sent. The counter's records carry only the name of the step, the platform and the app version.
How often the app is used
The counter adagio_ shows how many devices open the app in a day, a week and a month, and whether they come back after installing — without any user, device or install number. For this the app keeps one record of its own: the last counted day, week and month, the install date (only for installs made from this version on), which returns after installing have already been counted, the current month's day and video counts, and whether statistics stayed on for that whole month. The record is kept only in the app's data on your device, is never sent, contains no identifier — no user, device or install number — and is deleted with the app. Only the labels in the table above are sent; the marks of one opening go together, in one delivery. With statistics switched off nothing is counted or sent — the app only notes for itself that the month is incomplete, and such a month is never sent later. We look at returns only as a share across all installs of a period and do not try to follow any single install.
Two labels worth explaining
model_ is not your video's resolution. The app keeps several processing models for different frame sizes and picks a suitable one; this label names the bucket that was picked. It cannot be used to recover the clip's resolution, let alone its content.
The value none means none of our models took part at all: the frames were computed by the system's own engine, built into recent versions of iOS and macOS. No bucket describes that work, so we say so plainly instead of substituting the bucket that would have been picked. none reveals no more than the rest: not the clip's resolution and not its content, only that the device runs a recent enough system — which os_ already says.
os_ is the major version number only (18, not 18.4.1). That is enough to see “renders fail on this OS version” and far too little to single out a device: hundreds of millions of devices share the same number.
Where it goes, and how long it is kept
A gateway and monitoring system in the European Union (Frankfurt, Germany) receive the data. The statistics are not transferred outside the EU.
| What | Retention |
|---|---|
| Technical detail of how a job ended | 14 days |
| Anonymous daily performance and usage aggregates, including the steps toward buying | 90 days |
| Daily purchase, refund, proceeds and first-download aggregates from the store's reports (not from the app) | 12 months |
How to turn it off
Settings → “What is sent” (or Settings → Privacy Center → “What is sent”) → “Work statistics” (a switch). Turning it off stops sending immediately and erases anything not yet sent from the device. Nothing about video processing changes.
Why this list can be trusted
It is not transcribed from the code by hand. The build compares this page against the measurement schema the app itself uses: if a measurement, a label or a new label value is added to the app without being described here, the check fails and that build is not shipped.