Writing

Hyper-personalized software: Optimizing deep learning models on a Nothing Phone (2a)

Building a personal, on-device video workflow with Codex, PASE, VibeVoice and MMS-FA on a Nothing Phone (2a).

A conceptual phone running PASE, VibeVoice and MMS-FA beside the words One phone. My workflow.

I do social media management for my friend. I record videos of them giving lectures and use InShot and TikTok to clean up and upload the videos. However, it takes 10–15 minutes of my time to sit down and carry out the same sequence of steps myself. I thought to myself, what if I use AI to automate this?

I used Codex on my MacBook to write Python scripts to automate much of that workflow. Instead of a generic noise cleaner, I used Cisco PASE for speech enhancement, which sounded much better to me on these recordings. Then I used Whisper to create a transcript and Codex to review and clean it up. I also created various filters and frames and added a background nasheed. The result is a more customized pipeline to create the final video. All I have to do is ask Codex to process the next video and, some time later, I get a video that I can review and upload to TikTok.

Unfortunately, I cracked my MacBook screen, making it harder to use directly. I used screen sharing over Tailscale to access it from my work machine for the time being. So I wanted a cleaner solution. What if I create an app for that instead?

I had Codex port PASE to Android and later asked it to explore custom GPU kernels. An initially slow FP32 GPU implementation took about 25 seconds per 12-second model input. Custom matrix and convolution kernels brought warmed inference down to roughly 7.3 seconds—about 3.5× faster. The existing CPU implementation already took around 12 seconds, so the improvement over that practical baseline was closer to 1.6×. These figures exclude model loading, audio reconstruction and overlapping-window overhead. The GPU candidate passed our numerical fidelity checks on the tested recordings, but remained experimental; the app retained the validated CPU implementation. Traditionally, it would have been hard to justify custom deep learning kernels for one person’s midrange phone. With Codex, I could test assumptions, investigate technical documentation and iterate on custom kernels over several rounds of experimentation. Along the way, we also got Whisper running on Android for subtitle generation.

PASE inference times: initial GPU 25 seconds, validated CPU 12 seconds, experimental custom GPU 7.3 seconds. Warmed inference only.

Another challenge was that TikTok generated subtitles I was happy with, and on the MacBook, Codex could fix Whisper output. On the phone, I didn’t have a frontier model available locally to do that. I could have used a transcription service such as ElevenLabs, but I challenged myself to keep the app’s video processing entirely on-device, without paid inference APIs. Development still used Codex and external research, and we used ElevenLabs through Chrome as an evaluation reference. That is different from running the finished app offline.

So I added a small LLM, Qwen3-1.7B Q8, for guarded transcript-cleanup suggestions that I could review rather than automatically accept. Additional models supplied word timestamps and alignment. As we experimented with multiple recognizers, English and Arabic aligners, and caches, the storage footprint grew substantially. Could I simplify the pipeline?

Later I switched to Microsoft VibeVoice-ASR in Q4_K GGUF format: roughly 9B total parameters, including a 7B language backbone, in a 4.81GB checkpoint. On one full recording, its raw word agreement with ElevenLabs was about 86%, rising to roughly 90% with disclosed transliteration and spelling normalization. That is provider agreement, not human-verified accuracy, and some Arabic passages still needed listening review. We added MMS-FA separately for word timestamps. In matched repeated 12-second tests, the selected CPU optimizations reduced ASR elapsed time by 5.1%. A separate memory-lifecycle optimization reduced peak native RSS by about 10% on a 30-second clip. The integrated ASR run recorded approximately 5.23GB of app and child RSS plus child swap, within our 6GB soft target. Core model storage for PASE, VibeVoice and MMS-FA totals about 7.60GB, excluding the optional cleanup LLM; the models run sequentially, so their RAM requirements do not add together. A 4-minute-34-second recording still took about 24 minutes 26 seconds to transcribe and another 5 minutes 56 seconds to align. The main benefit is less of my attention spent editing, rather than instant processing.

Sequential on-device pipeline: recorded lecture, PASE, VibeVoice-ASR, MMS-FA, then review and render with optional Qwen cleanup suggestions.

I already own this midrange device. Traditionally, it would have been hard to justify hiring someone to optimize deep learning kernels and build an app for one user, but the economics are changing. Technical expertise still matters: it helps you form useful hypotheses, check results and reject misleading improvements. I don’t know much about Android or hardware, so an Android systems or mobile inference engineer could probably take this further.

This journey makes me think software could become more integrated and more personal. A small agency of two or three engineers may be able to ship custom software for a single business within weeks, depending on its scope. AI may lower the minimum economically viable audience for custom software—even to one user. Economies of scale will still matter for testing, maintenance, distribution and shared infrastructure, and open-source work remains essential to those foundations. But fewer layers may be needed between a user’s specific workflow and software built to serve it.