Why on-device inference wins for real-time face aging preview
Rendering face aging or rejuvenation effects with sub-100ms latency on a mobile device is a tough technical challenge. Server-side models like SAM2 and StyleGAN deliver photorealistic results but take 2–20 seconds per image — unacceptable for interactive sliders. Our projects leverage specialized on-device models such as FRAN (Face Re-Aging Network), which are distilled into compact versions that run directly on the smartphone. FaceApp historically pioneered this on-device approach. We combine FRAN with CoreML on iOS and TensorFlow Lite on Android, ensuring instantaneous UI feedback. Our team has 10+ years in mobile AI development and has delivered 40+ projects with on-device neural networks.
Problems we solve
Latency vs. quality trade-off
The most common pain point is choosing between instant preview and high fidelity. On-device inference on an iPhone 13+ Neural Engine takes 60–90 ms for a 256×256 input. This enables live preview as the user drags the age slider. On older devices like iPhone X (A11 Bionic), we still achieve ~200 ms, acceptable with a 150 ms debounce. The alternative — server-only processing — forces a 2–20 second wait, breaking the interactive experience.
Alignment artifacts
Without precise face alignment, FRAN produces artifacts at head rotations beyond 15°. Standard pipelines using VNDetectFaceLandmarksRequest (76 points on iOS) or MediaPipe Face Mesh (468 points on Android) compute an affine transform from five key landmarks (eyes, nose, mouth corners). Warp via vImage on iOS or OpenCV on Android, then after inference reverse-transform and blend with Poisson blending.
Privacy concerns
Users hesitate to upload personal photos to the cloud. On-device processing guarantees 100% privacy — no data leaves the device. When server processing is required (for full-resolution exports), we delete original photos immediately after inference and clearly disclose this in the Privacy Nutrition Label.
How we do it: FRAN on CoreML
FRAN is an open-source model by Netflix Research trained on synthetic data. It takes a face image and a target age (normalized 0–1) and returns a stylized face. The CoreML version weighs ~45 MB in FLOAT16.
import CoreML
import Vision
class FaceAgingProcessor {
private let model: FRAN
func process(faceImage: CGImage, targetAge: Int) async throws -> CGImage {
// FRAN accepts normalized 256x256 image
let resized = try resize(image: faceImage, to: CGSize(width: 256, height: 256))
let input = FRANInput(
face_image: try MLMultiArray(from: resized),
target_age: MLMultiArray([Float(targetAge) / 100.0]) // normalize to 0..1
)
let output = try await model.prediction(input: input)
return try cgImage(from: output.output_face)
}
}
On recent projects, we have consistently achieved inference times between 60–90 ms on iPhone 13 and newer. The alignment pipeline adds ~10 ms, and Poisson blending (using Accelerate Framework on iOS or a Metal shader) adds another 20 ms. Total pipeline latency stays under 120 ms — ideal for real-time sliders.
Poisson blending for seamless transitions
Standard CIBlendWithMask leaves a hard mask edge. We implement Poisson Image Editing to blend the transformed face region smoothly. On iOS, this is done via Accelerate Framework by solving a system of linear equations, or via a custom Metal compute shader for better performance.
Process: from audit to launch
-
Data collection — we analyze your target devices and performance requirements.
-
Audit — evaluate model candidates (FRAN, SAM, or custom) against your quality bar.
-
Design — choose on-device, hybrid, or server-only architecture.
-
Estimation — provide a detailed effort and cost breakdown.
-
Development — model conversion, pipeline implementation (detection, alignment, inference, blending), UI components (slider, animation), server endpoints (if hybrid).
-
Testing — performance benchmarks on device farm, visual quality validation.
-
Launch — assist with App Store and Google Play submission, including privacy labels.
What's included in the integration
- Model selection and optimization (FRAN, SAM, or custom)
- Conversion to CoreML / TensorFlow Lite with quantization
- Full pipeline: detection → alignment → inference → blending
- UI element: age slider with animated transition
- Server part: endpoint for upload/download (if hybrid)
- Integration with Photo Library and sharing system
- API and configuration documentation
- Store submission support (App Store Review, Google Play)
Timeline and cost
On-device integration with FRAN takes 5–8 days. The hybrid mode (on-device preview + server export) requires 2–3 weeks. Cost is determined after requirements clarification. Contact us for a project assessment — we will propose the optimal solution.
Common mistakes to avoid
-
Skipping alignment — always apply affine warp for robust results.
-
Using server-only for preview — users expect instant feedback; on-device is mandatory for sliders.
-
Ignoring privacy labels — if photos leave the device, you must disclose data handling in the App Store.
-
Missing fallback — on older devices, fallback to lower resolution or server when Neural Engine is unavailable.
The winning combination: on-device preview + server export
The best user experience is an instant on-device preview at 256×256 while dragging the slider, and a "Save" button that triggers server-side processing at original resolution. During server processing, show an animation. On completion, save the result to Camera Roll via PHPhotoLibrary. On Android, use WorkManager so the request persists even if the app is backgrounded, and notify the user when done.
Contact us to evaluate your project and choose the optimal path.
Machine Learning in Mobile Apps: CoreML, TFLite, and On-Device Models
We distinguish two fundamentally different approaches: an app with on-device AI and an app that simply calls a cloud API. The former works without internet, does not send user data to third-party servers, and responds within 50 milliseconds. The latter depends on network latency and pricing plans. Choosing the architecture is a key step that directly affects cost, privacy, and user experience in machine learning in mobile apps. Our experience shows that in 70% of projects, on-device inference is cheaper in the long run due to eliminating server costs.
How to Choose Between CoreML and TFLite for On-Device Inference?
CoreML — Apple's native framework for running ML models on device. Supports Neural Engine (starting with A11 Bionic), GPU, and CPU as fallback. Models are converted to .mlmodel format via coremltools from PyTorch, ONNX, or TensorFlow. Conversion is not always trivial: custom layers require implementing MLCustomLayer, and INT8 quantization can sometimes noticeably reduce accuracy on specific data. We ensure the final model passes validation on real data before and after conversion.
TensorFlow Lite — cross-platform alternative for Android and Flutter. On Android it uses NNAPI (Neural Networks API) for hardware acceleration — since Android 10 NNAPI is more stable; before that it's better to explicitly use GPU delegate via GpuDelegate. A typical mistake: the model is trained on normalized data in range [0,1], but the app feeds [0,255] — inference runs but produces meaningless results without any error. We include an automatic input data validation module in the SDK.
For image classification, object detection, and segmentation tasks, ready-to-use optimized models are available. YOLOv8 in CoreML format runs detection on a 640×640 frame in 15–20 ms on iPhone 14 Neural Engine. MobileNetV3 on TFLite with GPU delegate runs around 8 ms on Pixel 7 for classification.
| Parameter |
CoreML |
TFLite |
| Platforms |
iOS, macOS, watchOS |
Android, iOS, Linux, embedded |
| Hardware acceleration |
Neural Engine, GPU, CPU |
NNAPI, GPU (OpenCL/OpenGL), CPU |
| Quantization support |
FP16, INT8 (with coremltools) |
FP16, INT8, dynamic range |
| Custom operations |
Via MLCustomLayer (Swift) |
Via delegates (Java/Kotlin) |
| Model bundle size |
~3–5 MB (MobileNetV2 quantized) |
~2–4 MB |
What If You Need Text Generation On-Device?
Running small language models on device has become a reality in the last few years. Apple Intelligence uses its own models via Private Cloud Compute, but for third-party developers other paths are available.
llama.cpp with Metal backend on iOS is a working approach for phi-3-mini (3.8B parameters, 4-bit quantization, ~2.3 GB). Inference: 15–25 tokens/second on iPhone 15 Pro. For integration in Swift, use the Swift Package llama.swift or a wrapper via C interface llama.h. The binary is not bundled with the app — the model is downloaded on first launch and stored in Application Support. Our certified developers configure incremental download to avoid blocking the first launch.
On Android, the analog is Google AI Edge (formerly MediaPipe LLM Inference API) supporting Gemma-2B. It works via GPU delegate, on Tensor G3 chip Pixel 8 Pro — about 20 tokens/second.
Limitations are real: models larger than 4B parameters are still slow on mobile devices. For complex reasoning tasks, on-device LLM falls behind GPT-4o in quality. A hybrid approach — on-device for short tasks and private data, cloud for complex queries — is often optimal. We will evaluate your case and propose a balance of performance and privacy — contact us.
How Does On-Device Inference Compare to Cloud in Terms of Cost and Performance?
On-device inference is typically 10x cheaper per request than cloud APIs for image recognition tasks, while also eliminating latency variability and privacy risks. The table below summarizes the trade-offs.
| Criteria |
On-Device Inference |
Cloud API |
| Latency |
<50ms |
200–500ms (including network) |
| Cost per 1M requests |
$0 (no server) |
$10–50 (AWS Rekognition, Google Vision) |
| Privacy |
Data stays on device |
Data sent to server |
| Offline |
Yes |
No |
| Scalability |
No server scaling issues |
Need to provision API capacity |
For an app with 100k MAU running 10 image recognitions per user per month, on-device inference can save up to $5,000 monthly compared to cloud API. Get a free consultation on your ML architecture today.
Integrating OpenAI API and Other Cloud Models
For scenarios where cloud inference is acceptable, integrating OpenAI, Anthropic, or Google Gemini is an HTTP client + streaming SSE. In Swift, AsyncThrowingStream is convenient for streaming responses. In Kotlin, use Flow.
Critically: API keys must never be stored in the app bundle. Even an obfuscated key can be extracted from the IPA in 10 minutes using strings or frida. Correct architecture: mobile app → your own backend → OpenAI API. The backend controls rate limiting, logs requests, and protects the key.
What Is Included in the Work (Deliverables)
- Trained and quantized model for the target device (documentation with metrics)
- SDK for integration (Swift/Kotlin/Flutter) with call examples
- Performance tests on 3–5 real devices
- Instructions for OTA model updates
- Support during App Store / Google Play moderation (compliance with Guidelines 4.2, 5.1)
- 2 weeks of technical support after release
Typical Project Pipeline
-
Task analysis — measure latency, privacy, size, supported devices.
-
Model prototyping — in Python, evaluate accuracy on target data.
-
Conversion and quantization — for CoreML/TFLite with validation.
-
Integration into the app — model wrapped in a service layer (easy to swap CoreML ↔ TFLite ↔ cloud).
-
Testing — on real devices, measure FPS, RAM, battery.
-
Deployment — via TestFlight / Firebase App Distribution, monitor metrics.
Timelines: integration of a ready CoreML/TFLite model — 1–2 weeks, development of a custom model with mobile optimization — from 6 weeks, on-device LLM chat with personalization — 4–8 weeks.
Why We Take on Complex Cases?
10+ years of experience in mobile development, 50+ implemented AI/ML solutions, guarantee of compatibility with current iOS and Android versions. All projects undergo code review and load testing. The cost includes preparation of moderation documentation and training of your team.
Contact us — we will help you choose the architecture and implement ML in your app turnkey. Order an audit of your existing solution — we will assess the potential for server cost savings free of charge. In some projects, savings can reach significant amounts per month.