Build a Realtime Video Restyling Agent with Gemini 3 + Decart AI

Google's Gemini 3, released November 18, 2025, gives developers multimodal reasoning and tool-use for building AI applications. Let's combine it with Decart and other AI services to turn casual voice commands into artistic live video styles.

You can also watch this step-by-step YouTube tutorial to create the demo in under 9 minutes.

Realtime Video-Styling Assistant: Overview

Diagram showing the build of a realtime restyling agent with Gemini 3 and Decart AI

In just a few minutes, let's create a real-time video restyling assistant in Vision Agents that transforms your camera feed into artistic styles via voice prompts.

  • It is powered by Gemini 3 Pro (via Google API) for prompt understanding and agentic control.
  • Video processing: Decart AI (Mirage LSD for zero-latency restyling).
  • Speech-to-Text Component: DeepGram.
  • Text-to-Speech Component: ElevenLabs.

Grab These API Credentials

Build the Realtime Video-Styler in Python

Start with a new uv-based project, activate the Python environment, and install all dependencies.

#  Initialize  a  Python  project
uv  init  realtime-video-restyling
cd  realtime-video-restyling

#  Activate  your  environment 
uv  venv  &&  source  .venv/bin/activate

#  Install  Vision  Agents  and  required  plugins
uv  add  vision-agents
uv  add  "vision-agents[getstream,  gemini,  elevenlabs,  deepgram]"

#  Install  Decart  AI  with  uv  and  pip
uv  pip  install  vision-agents-plugins-decart

In the root of your generated uv project, substitute the content of main.py with the following sample code listing.

import  logging

from  dotenv  import  load_dotenv

from  vision_agents.core  import  User,  Agent,  cli
from  vision_agents.core.agents  import  AgentLauncher
from  vision_agents.plugins  import  decart,  getstream,  gemini,  elevenlabs,  deepgram

logger  =  logging.getLogger(__name__)

load_dotenv()

async  def  create_agent(**kwargs)  ->  Agent:
    processor  =  decart.RestylingProcessor(
        initial_prompt="Change the video style to a cute animated movie with vibrant colours",  model="mirage_v2"
    )
    llm  =  gemini.LLM(model="gemini-3-pro-preview")
    agent  =  Agent(
        edge=getstream.Edge(),
        agent_user=User(name="Story teller",  id="agent"),
        instructions="You will use the Decart processor to change the style of the video and the user's background. ",
        llm=llm,
        tts=elevenlabs.TTS(voice_id="N2lVS1w4EtoT3dr4eOWO"),
        stt=deepgram.STT(),
        processors=[processor],
    )

    @llm.register_function(
        description="This function changes the prompt of the Decart processor which in turn changes the style of the video and user's background"
    )
    async  def  change_prompt(prompt:  str)  ->  str:
        await  processor.update_prompt(prompt)
        return  f"Prompt changed to {prompt}"

    return  agent

async  def  join_call(agent:  Agent,  call_type:  str,  call_id:  str,  **kwargs)  ->  None:
    """Join the call and start the agent."""
    # Ensure the agent user is created
    await  agent.create_user()
    # Create a call
    call  =  await  agent.create_call(call_type,  call_id)

    logger.info("🤖 Starting Agent...")

    # Have the agent join the call/room
    with  await  agent.join(call):
        logger.info("Joining call")
        logger.info("LLM ready")

        await  agent.finish() # Run till the call ends

if  __name__  ==  "__main__":
    cli(AgentLauncher(create_agent=create_agent,  join_call=join_call))

The script will display a Stream Video call interface that automatically joins you. You can now go ahead and allow camera/mic access, and say something like, "Make my video Studio Ghibli" and watch your camera feed transforms.