Skip to content
Harshith Pramod
All work

Episode 02 · One Frame, Many Faces 一枚の顔 · Personal project, 2026

AdForge.ai

AdForge turns a single product photo and one line of copy into two finished ad formats. A structured tool-calling pipeline over Gemini's vision models does the creative work, and the narrated video is put together entirely in the browser.

Built with
React, TypeScript, Vite, Tailwind, Gemini Vision, Tool calling, Web Speech API
Links

3 creative variants per run, with automatic retries so one failed model call never sinks the batch.

The problem

Small sellers have a product photo and a sentence about it, and not much else: no designer, no voice-over artist, no budget for either.

The goal was a whole ad from the least possible input, without a media server in the stack.

From one photo to two ad formatsPhoto and tagline to Gemini Vision; Gemini Vision to Retry guard; Retry guard to Gemini Vision (a failed call is retried); Retry guard to Image ad; Retry guard to Web Speech API; Web Speech API to Narrated videoa failed call is retriedPhoto and taglineGemini Visionstructured tool callsRetry guardper variantImage adWeb Speech APIin the browserNarrated video
From one photo to two ad formats
  • Model call
  • A person decides
  • Data or tool

Decisions that mattered

Tool calls, not free text
The model answers through structured tool calls, so every creative comes back in a shape the app can render without parsing prose.
Narration happens in the browser
The Web Speech API voices the script on the visitor's own machine, which took server-side media processing out of the stack entirely.
Three variants, each on its own
Every run asks for three creatives. Each is retried on its own, so one failed call costs one variant a retry instead of costing the whole batch.

What I'd do next

  • Publish the source and a live demo.
  • Let the seller pick the narration voice and the video's pacing.