Privacy Policy
Effective date: September 28, 2026
Film Recipes: Color Cards (package app.filmode.recipes) is an Android app published by FightTech VN. In short: your photos are processed on your phone and never uploaded, and there is no account. The app sends anonymous usage counts and crash reports to Google's Firebase, which you can switch off in Settings, and talks to Google Play for purchases. There are no ads, no advertising ID, and we do not sell any data.
What the app does
Film Recipes keeps colour recipes (short lists of camera-style colour settings) as cards. It shows each recipe on a preview photo, applies a recipe to photos you choose, and lets you share a recipe as a card image with a QR code, as a link or as text. All image processing (previews, the before-and-after comparison, full-resolution photos, recipe cards and .cube files) runs on your phone's own processor and graphics chip. There is no cloud processing, no account and no sign-in. Nothing the app sends over the internet contains your photos or anything taken from them.
Permissions the app declares
This is every permission in the app's final (merged) manifest, including the ones Google's libraries add. On Android 10 and newer the app never shows a permission prompt. On Android 8 and 9 it asks once for storage access, the first time you save a photo or a card (see below).
- Internet (
INTERNET,ACCESS_NETWORK_STATE). Used by Google's libraries only: Firebase for the anonymous usage counts and crash reports described below, and Google Play Billing. The second lets them check whether the phone is online before trying. The app itself downloads nothing: its recipes, base tones and sample photos are all built in. - Google Play billing (
com.android.vending.BILLING). Added by Google's Play Billing library for the optional Film Recipes Pro purchase. It lets the app hand a purchase to the Google Play app on your phone. - Background upload and install source (
WAKE_LOCK,com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE). Added by the Firebase SDKs. The first lets a report that is already queued finish sending if the screen turns off. The second lets the analytics SDK read, once, which Google Play listing the app was installed from, used only for aggregate install counts and never for advertising. Both stop being used when you switch the reports off. - Storage, on Android 9 and earlier only (
WRITE_EXTERNAL_STORAGE, declared withmaxSdkVersion="28"). Needed on Android 8 and 9 to save your photos and recipe cards into the sharedPicturesfolder; the app asks for it the first time you tap Apply or Save, and uses it only to write those new files. On Android 10 and newer the app saves through the system MediaStore, and this permission does not apply and is never requested. - App-internal (
app.filmode.recipes.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION). Added automatically by Google's AndroidX library. Only Film Recipes holds it; it stops other apps from sending messages to the app's internal components. It gives access to no data.
No camera, no photo library. The app does not declare CAMERA, READ_MEDIA_IMAGES, READ_MEDIA_VIDEO or READ_EXTERNAL_STORAGE, and it cannot browse your gallery. Photos come in through Android's photo picker, which gives the app only the photos you choose. .cube files come in through the system file picker in the same way. Scanning a QR code uses Google's scanner, which runs in Google Play services, not in the app (see below).
The app declares no location, microphone, contacts, phone, calendar or SMS permission, and no "all files access". It also declares no advertising permission: AD_ID and the Android Ad Services permissions (ACCESS_ADSERVICES_AD_ID, ACCESS_ADSERVICES_ATTRIBUTION) are explicitly removed from the build, and advertising-ID collection is switched off in the analytics SDK, so the app cannot read your advertising identifier.
Your photos
The preview photo. Recipes are previewed on one photo. Until you choose your own, that is one of the eight sample photos built into the app (see sample photos). If you pick a photo of your own, the app keeps a reduced copy of it (about 1,600 pixels on the long edge) in its private storage on your phone, which other apps cannot read, so the previews still work next time. Choosing a sample photo again deletes that copy. Your original photo is not changed, moved or deleted.
Applying a recipe. When you apply a recipe, the app reads each photo you chose, makes a new picture from it at full resolution on your phone, and saves it as a new JPEG file in Pictures/Film Recipes on your phone's shared storage, where your gallery and other apps can see it. The original is never changed. From the original's EXIF metadata the new file keeps only the capture date and time (and its time-zone offset); it gets an orientation tag and the software name "Film Recipes". Nothing else is copied: no GPS location, no camera or lens serial numbers.
Recipe cards. A recipe card is an image made on your phone from the recipe and the current preview photo. Save writes it to Pictures/Film Recipes; Share card places it in the app's private cache and hands it to the app you choose in Android's share sheet. Where it goes after that is your choice; the app sends it nowhere by itself.
Sample photos. The eight sample photos are winners of Wiki Loves Earth, published on Wikimedia Commons under Creative Commons licences. They are stored inside the app, so showing them needs no download. Their authors and licences are listed in the app under Settings → About → Photo credits; tapping one there opens its Wikimedia Commons page in your browser.
Recipes, QR codes and links
Your own recipes, the sample photo you chose and your settings are stored in the app's private storage on your phone.
What a recipe code contains. A recipe's QR code, link and text are made on your phone and contain only the recipe's settings (base tone, grain, white balance, dynamic range and so on), its name and, if you typed one, the author name you chose. They contain no photo, no account or device identifier and no location. Anyone who can see a code or a link can read those settings; where you show or send them is your choice.
Recipe links. A link looks like https://filmode-recipes.web.app/r#1.…, with the recipe after the #. On a phone with Film Recipes installed, Android opens the link in the app directly. Opened in a web browser, it loads a page of this website that reads the recipe with a script in your browser: a browser never sends the part after the # to the server, so this website receives only an ordinary page request, and never the recipe, its name or its author. The page's Open in Film Recipes button hands the recipe to the app on the same phone, not to any server.
Scanning a QR code. Scanning uses Google's code scanner, which is part of Google Play services. It opens its own camera screen, processes the camera image on your phone, and returns only the decoded text to Film Recipes. The app never receives the camera image and needs no camera permission. Google Play services may download the scanner module ahead of your first scan, and Google may receive diagnostic information about the scanner itself, under the Google Privacy Policy.
Pasting and sharing to the app. Text you paste into the app, or share to it from another app, is read on your phone to find a recipe in it. It is not stored unless you save the recipe, and it is never sent anywhere.
.cube files
.cube files you import are converted on your phone and kept in the app's private storage, where you can delete them. With Pro you can export a recipe as a .cube file, which the app writes to its private cache and hands to the app you choose in Android's share sheet.
Applied photos and recent recipes
So you can come back to a photo, compare it with the original and apply the same recipe again, the app keeps a history on your phone. You find it in the library's Recent tab, under Settings → History, and after a batch is applied. It stays on your phone: it is kept in the app's private storage, is left out of Android backup and device transfer, and is never uploaded.
- For each photo you apply a recipe to, it keeps the date and time; the recipe's settings, name and author as they were then (so the exact recipe comes back even if you later edit or delete it); whether it was a built-in recipe, one of yours or an added one; which batch it was part of and its place in it; the saved photo's size in pixels and its link in your gallery; a small copy of the result (at most 320 pixels on the long edge); and a small copy of your original photo (at most 480 pixels) for the before-and-after comparison. It does not keep the original's file name, location or other metadata.
- Recent recipes. It counts which recipes from your library you opened, applied and shared, and when, to show the ones you use most recently first. Deleting one of your recipes takes it off this list.
- It holds the last 500 photos; older entries drop off by themselves.
To clear it: use the clear button at the top of the applied photos list, or Clear history under Settings → History, or remove a single photo from its page. This deletes the list, both small copies of each photo and the recent recipes. Photos saved in Pictures/Film Recipes stay; if you delete one from your gallery, its history entry shows it as missing until you remove it. Uninstalling the app or clearing its storage also deletes the whole history.
Analytics and crash reporting
The app uses Google Analytics for Firebase and Firebase Crashlytics, both provided by Google, to learn which features get used and to fix crashes. Both are on by default. Both stop when you switch off Settings → Send usage and crash reports, and the choice is remembered across launches.
- Usage counts: the events listed below, plus what Google Analytics records by itself: that the app was opened, how long it was in use, the app version, the phone model, Android version, language and country, and a random app-instance ID that Firebase creates on install. Country is derived by Google from the connection; Google Analytics does not log or store IP addresses. Google Analytics also records a completed Google Play purchase automatically, with the product, price and currency.
- Crash reports: when the app crashes, or hits an error it recovers from, the error’s type, technical message and stack trace, the part of the app where it happened, the phone model, Android version, free memory and disk space, orientation, a random Crashlytics installation ID, and the list of the app's recent events (the same events as below) that led up to it.
What the app never sends: your photos or any part of one, thumbnails, file names, a recipe's name, author or text, what a QR code or link contains, anything you paste, the names or contents of .cube files, your location, your advertising identifier, your name, your email or any account identifier.
This data is processed by Google on our behalf, under the Firebase privacy and security terms. It is used only to improve the app: never for advertising, never combined with other data to identify you, and never sold.
Every event the app sends
Each event is a name and a few values. Built-in recipes are identified by their catalogue number (b01–b16); your own recipes are never identified.
| Event | When | Values sent with it |
|---|---|---|
screen_view | A screen opens | Screen name: library, detail, apply, card, add, settings, credits, paywall, history (the applied photos list) or history_photo (one applied photo) |
recipe_open | A recipe is opened | Built-in, your own or added (scanned, pasted or from a link); the catalogue number if built in; whether it is a Pro recipe |
recipe_save | A recipe is saved to Mine | Whether it started from a built-in, your own or an added recipe; new or updated; the name of its base tone (for example amber), or my_lut for your own .cube, or none |
recipe_delete | One of your recipes is deleted | None |
photo_pick | You pick a photo | Whether it could be read; for applying, how many photos |
photo_sample | You choose a sample photo | Which of the eight sample photos |
apply_start | Applying starts | Number of photos; built-in, your own or added recipe; whether Pro is active |
apply_done | Applying ends | Photos saved; photos that failed; seconds taken; whether you cancelled |
card_share | A recipe card or text is saved, shared or copied | Which (save, image, copy, text); for saving, whether it worked |
recipe_import | A recipe is added by QR code, link, pasting or sharing | How (qr, link, text for pasted text, shared from another app); the result (read, needs a base tone, not a recipe, made by a newer version, scan cancelled, scanner unavailable); how many settings were read |
cube_import | A .cube file is imported | The result (ok, wrong file type, failed) |
cube_export | A recipe is exported as .cube | The result (ok, failed) |
history_open | You open the applied photos list | Where from (recent for the library’s Recent tab, apply after applying, or settings) |
history_reuse | You apply or open a recipe again from the history | Kind (recipe); apply or open; the catalogue number if built in; where from (the list or a photo’s page) |
history_delete | You remove a photo from the history or clear it | One or all; how many entries; where from (a photo’s page, the list or Settings) |
settings_reports | You turn the reports switch on or off | On or off (switching off is the last event sent) |
paywall_view | The Pro screen opens | What led there (pro_recipe with that recipe’s catalogue number, own_limit, batch_limit, cube_export or settings) |
paywall_plan_select | You select a plan | Product ID; offer ID (the Google Play discount offer, such as a launch sale, or none) |
paywall_redeem | You tap Redeem code | What led to the Pro screen |
paywall_dismiss | The Pro screen closes | What led there; seconds it was open; the selected product ID and offer ID |
purchase_start | A purchase starts | Product ID; offer ID; what led to it |
purchase | A purchase completes | Product ID; offer ID; what led to it; price and currency as shown by Google Play; whether it began with a free trial |
purchase_cancel | You cancel in Google Play's purchase screen | Product ID; offer ID; what led to it |
purchase_fail | A purchase fails | Product ID; offer ID; the reason (Google Play unavailable, the purchase failed verification, or Google Play’s error code) |
purchase_restore | You tap Restore purchases | The result (restored, none found, error) |
pro_state | Each time the app checks your purchase with Google Play (when the app opens or comes back to the screen, and on restore) | Whether Pro is active; the product ID |
In addition, every usage report carries the user property app_variant = recipes, and every crash report carries the keys app = recipes and where, the part of the app where a recovered error happened: apply_photo, apply_batch, scanner, cube_export, preview or card.
Data we collect
Only the anonymous usage counts and crash reports described above, which we see as totals and individual crash reports in the Firebase console. We, FightTech VN, hold no database of users, and we never see your photos, your recipes or your settings. There is no account system and no newsletter. If you email us, we receive what you choose to write and use it only to answer you.
This website (filmode-recipes.web.app) is hosted on Google's Firebase Hosting. It sets no cookies, runs no analytics or tracking, and loads nothing from other websites. Like any web server, the hosting service processes your IP address and browser details to deliver the pages, and may keep them briefly in routine logs.
Purchases
Film Recipes Pro (all 16 recipes, unlimited recipes of your own, 100 photos per batch and .cube export) is sold as a monthly or yearly subscription, or a one-time lifetime purchase, through Google Play Billing. Google processes the payment under the Google Privacy Policy; your card details and billing address are never given to us or to the app. As the seller, Google Play Console shows us the order record for each purchase (order ID, product, date, price and country), which we use only for refunds, tax and support, not to identify or contact you. The app checks the purchase on your phone and remembers the result locally; it sends nothing about it to us apart from the anonymous purchase events listed above. Everything outside Pro is free.
Third parties
No data is sold or shared for advertising. The only other company involved is Google, as a service provider: it runs Firebase (the usage counts and crash reports, as our processor, and the hosting of this website), Google Play Billing (purchases) and the code scanner in Google Play services. Google never receives your photos from the app.
Android backup
If you use Android's own backup, or move to a new phone with Android's transfer tool, Android may include the app's private data (your recipes, imported .cube files, settings and the preview photo's reduced copy) in a backup stored in your Google account or copied to your new phone. That is done by Android and Google under your account and its settings; we have no access to it. The history of applied photos, with its small copies, and the recent recipes are left out of both.
Retention and deletion
Your recipes, settings, imported .cube files, preview photo and history live on your phone and are removed when you uninstall the app or clear its storage; you can also clear the history on its own (see Applied photos and recent recipes). Photos and cards you saved are yours and stay in Pictures/Film Recipes until you delete them.
Firebase Crashlytics keeps crash reports for 90 days. Google Analytics keeps event data for the retention period set in our project, at most 14 months, after which only aggregated totals remain. Switching off Send usage and crash reports stops any new data. Clearing the app's storage or reinstalling it creates a new random app-instance ID, so earlier data can no longer be linked to your phone.
To delete your Film Recipes data:
- In the app, open Settings and switch off Send usage and crash reports, so nothing new is sent.
- Uninstall Film Recipes, or clear its storage in Android's Settings → Apps → Film Recipes → Storage → Clear storage. This deletes your recipes, settings,
.cubefiles, preview photo and history from the phone and resets the random app-instance ID. Photos you saved inPictures/Film Recipesstay until you delete them. - To have usage counts and crash reports already sent deleted too, email trunghieu4121993@gmail.com with the subject "Film Recipes data deletion". We will delete them from Firebase within 30 days and reply to confirm. Otherwise they are removed automatically after the periods above.
You can cancel a subscription or ask for a refund in the Google Play app under Payments & subscriptions. Google Play keeps its own order records under the Google Privacy Policy. We keep nothing else about you.
Security
Your recipes, preview photo and history sit in the app's private storage, which Android keeps out of reach of other apps. Reports to Firebase and all Google Play traffic are encrypted in transit (HTTPS). Purchases are verified with Google Play on the phone. No system is perfectly secure, but because your photos never leave the phone, there is no copy of them on any server of ours to leak.
Children
Film Recipes is not directed at children under 13, and we do not knowingly collect personal information from children. If you believe a child has sent us personal information, for example by email, contact us and we will delete it.
Changes to this policy
If the app's data practices change, this page will be updated and the date above revised before the new version is released. If a future version adds a permission, an SDK or an event, it will be listed here first. Written on September 28, 2026 for the first release of Film Recipes: Color Cards (version 1.0.0).
Contact
FightTech VN, Vietnam. Questions about this policy, or a request about your data? Email trunghieu4121993@gmail.com.