4
7 Comments

Show IH: From 10ms to 2ms: How I rebuilt my camera's render engine to create a "breathing" vintage timestamp.

Hey Indie Hackers,

I’m the solo developer behind Muxixi Studios, and I’ve been building TimerCamera+, a retro-vibe camera app designed for people who love the authentic analog film aesthetic.
Recently, I hit a massive bottleneck while developing the v1.5.8 update, and I wanted to share how I solved it.

The Vision: A Timestamp That "Breathes"

Standard camera apps just slap white text on a photo. I wanted something different for our classic "Daily" style: a warm, orange glow that mimics a real vintage Nixie tube. I wanted the timestamp to feel dynamic—flickering slightly and blending with the real-time light and shadow of the viewfinder.

The Problem: The Battery Drain

To achieve this dynamic glow in real-time while recording video, I initially used multiple layered Canvas shadows and alpha blending. The result? It looked gorgeous, but it took 10ms to render a single frame. On older devices, the 60fps viewfinder started dropping frames, and the device heated up quickly.

As an indie dev, pushing a feature that compromises the core camera experience was not an option.

The Solution: 500% Performance Boost

I spent the next three days diving deep into the rendering pipeline. Instead of brute-forcing the glow through Canvas shadow layers on every frame, I re-engineered the texture drawing process. I switched to a pre-rendered alpha mask approach combined with a more efficient shader logic for the dynamic flicker.

The Result: Render time dropped from 10ms down to 2ms (a 5x improvement).

  • Zero frame drops on the live viewfinder.
  • The front-camera video mirroring bug? Fixed it along the way.

Sometimes, chasing a purely aesthetic feature (like a glowing retro font) forces you to become a better engineer under the hood. The new "breathing" timestamp is now live in TimerCamera+ v1.5.8.

If you're building camera apps or dealing with real-time Android rendering, I’d love to connect and talk about Canvas/OpenGL optimizations.

Also, if you're into photography or just want to see the dynamic glow in action, you can check out the app here: https://play.google.com/store/apps/details?id=com.muxixisoft.android.timercamera

How much time do you usually spend optimizing purely "aesthetic" features? Let me know in the comments! 👇

posted to Icon for group Show IH
Show IH
on May 19, 2026
  1. 1

    Really impressive optimization work — going from 10ms to 2ms is a 5x improvement which is huge for real-time rendering. The "breathing" effect is a nice touch, makes it feel alive rather than just a static overlay. Curious what was the biggest bottleneck you found when profiling — was it the rendering pipeline itself or memory allocation?

    1. 1

      Thanks so much! To answer your question: it was 100% the rendering pipeline, specifically the shadow calculation.
      Initially, I was using Android Canvas' native setShadowLayer to generate the glow. Because the "breathing" effect meant the alpha/radius was constantly changing, the system had to recalculate that heavy blur matrix on every single frame. Memory allocation was actually fairly stable, but the GPU overhead from the dynamic shadow pass was just eating up the frame time.
      Once I ditched the real-time shadow generation and switched to scaling/blending a pre-rendered alpha mask texture, the render time instantly dropped to 2ms. A classic case of doing too much math on the UI thread! 😂

  2. 1

    Wow, dropping from 10ms to 2ms is insane! Love how you didn’t just settle for the glow but actually dug into the engine to make it smooth.

    1. 1

      Haha, thank you! To be completely honest, I was very tempted to just ship the 10ms version and hope modern flagship phones would brute-force it. 😅
      But seeing the viewfinder drop frames and the battery heat up on my older test device was a huge reality check. It’s painful to go down that rabbit hole, but seeing that buttery smooth 60fps with the glow made it totally worth it. Appreciate the support!

    1. 1

      Haha, thank you! That 'Wow' makes the 3 days of staring at custom shaders totally worth it. Cheers! 🍻

  3. 1

    Fun fact: the biggest headache wasn't just the 10ms render time, but how the alpha blending looked completely different on various Android devices (the classic fragmentation struggle 😅).
    If anyone is currently wrestling with Android Canvas, custom shaders, or texture optimizations and wants to see the actual code snippet I used for the pre-rendered alpha mask, just let me know! Happy to share that part of the logic here.

Trending on Indie Hackers
6 weeks solo, 2 rejections, finally live but nobody told me marketing would be this hard User Avatar 133 comments Building ExpenseSpy solo, no funding — launching June 17 on iOS & Android User Avatar 55 comments I spent more time setting up cold email than actually selling. Here is what fixed it. User Avatar 22 comments I just wanted to taste AI coding tools. A week passed. User Avatar 17 comments Building LinkCover – Day 3: Payment is live. No more building, time to sell. User Avatar 15 comments I Was Bypassing Every App Blocker, So I Built One That Fights Back User Avatar 11 comments