- unwind ai
- Posts
- Build an AI Home Renovation Planner Agent using Nano Banana
Build an AI Home Renovation Planner Agent using Nano Banana
Fully local multi-agent app using Google ADK and Nano Banana (100% opensource)
Imagine uploading a photo of your outdated kitchen and instantly getting a photorealistic rendering of what it could look like after renovation, complete with budget breakdowns, timelines, and contractor recommendations. That's exactly what we're building today.
In this tutorial, you'll create a sophisticated multi-agent home renovation planner using Google's Agent Development Kit (ADK) and Gemini 2.5 Flash Image (aka Nano Banana). The system analyzes photos of your current space, understands your style preferences from inspiration images, and generates stunning visualizations of your renovated room, while keeping your budget in mind.
We're using Google ADK, an open-source framework for building production-ready AI agents. Combined with Gemini 2.5 Flash Image (the viral Nano Banana model), our agents can not only understand images but also generate photorealistic renderings of your dream space. Nano Banana brings state-of-the-art image generation and editing capabilities that maintain character consistency.
What We’re Building
This application implements a multi-agent system that transforms home renovation planning from concept to visualization. It uses the Coordinator/Dispatcher pattern to route requests to specialized agents that work together seamlessly.
Features:
Smart Image Analysis: Upload room photos and inspiration images—agents automatically detect and analyze them using Gemini's vision capabilities
Photorealistic Rendering: Generate professional-quality images of your renovated space using Nano Banana (Gemini 2.5 Flash Image)
Budget-Aware Planning: Tailored recommendations that respect your financial constraints
Complete Renovation Roadmap: Timeline estimation, budget breakdown, contractor lists, and actionable checklists
Iterative Refinement: Edit generated renderings with simple natural language ("make cabinets cream instead of white")
Multi-Agent Orchestration: Demonstrates production-ready Coordinator/Dispatcher + Sequential Pipeline patterns
Versioned Artifacts: Automatic version tracking for all generated renderings
How The App Works
User Interaction: User uploads photos or describes their renovation needs
Coordinator Routes Request: Root agent analyzes the request and routes to appropriate specialist
Visual Assessment: VisualAssessor analyzes images (current room + inspiration) and provides detailed assessment
Design Planning: DesignPlanner creates specific material, color, and layout recommendations
Project Coordination: ProjectCoordinator generates photorealistic rendering using Nano Banana, provides budget breakdown and timeline
Iterative Refinement: User can request edits ("make cabinets darker"), RenderingEditor refines the image
Multi-Agent Pattern:
Coordinator/Dispatcher: Root agent routes to InfoAgent, RenderingEditor, or PlanningPipeline
Sequential Pipeline: Planning agents run in order, each building on previous work
State Management: ADK maintains conversation context and artifact versions
Prerequisites
Before we begin, make sure you have the following:
Python installed on your machine (version 3.10 or higher is recommended)
Google Gemini API key
A code editor of your choice (we recommend VS Code or PyCharm for their excellent Python support)
Basic familiarity with Python programming
Code Walkthrough
Setting Up the Environment
First, let's get our development environment ready:
Clone the GitHub repository:
git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
Go to the ai_home_renovation_agent folder:
cd advanced_ai_agents/multi_agent_apps/ai_home_renovation_agent
Install the required dependencies:
pip install -r requirements.txt
Creating the Streamlit App
Let's create our app. We'll create three files: agent.py
(main orchestration), tools.py
(image generation tools), and __init__.py
(package setup).:
File: agent.py
Import necessary libraries:
from google.adk.agents import LlmAgent, SequentialAgent
from google.adk.tools import google_search
from google.adk.tools.agent_tool import AgentTool
from .tools import (
generate_renovation_rendering,
edit_renovation_rendering,
list_renovation_renderings,
)
Create Utility Tools for Cost and Timeline Estimation:
def estimate_renovation_cost(
room_type: str,
scope: str,
square_footage: int,
) -> str:
"""Estimate renovation costs based on room type and scope."""
rates = {
"kitchen": {"cosmetic": (50, 100), "moderate": (150, 250),
"full": (300, 500), "luxury": (600, 1200)},
"bathroom": {"cosmetic": (75, 125), "moderate": (200, 350),
"full": (400, 600), "luxury": (800, 1500)},
# ... more room types
}
low, high = rates[room_type][scope]
total_low = low * square_footage
total_high = high * square_footage
return f"💰 Estimated Cost: ${total_low:,} - ${total_high:,}"
Build the Visual Assessor Agent:
visual_assessor = LlmAgent(
name="VisualAssessor",
model="gemini-2.5-flash",
description="Analyzes room photos and inspiration images using visual AI",
instruction="""
You are a visual AI specialist. Analyze ANY uploaded images automatically.
DETECT:
1. CURRENT ROOM images (existing space needing renovation)
2. INSPIRATION/STYLE references (desired aesthetic)
3. Budget constraints from user messages
For CURRENT ROOM:
- Room type, size estimate, condition
- Current style, key problems
- Improvement opportunities
For INSPIRATION:
- Style name, color palette, key materials
- Notable features, design elements
Output structured summary with room details, style preferences, and budget.
""",
tools=[AgentTool(search_agent), estimate_renovation_cost],
)
Create the Design Planner Agent:
design_planner = LlmAgent(
name="DesignPlanner",
model="gemini-2.5-flash",
description="Creates detailed renovation design plan",
instruction="""
Create SPECIFIC, ACTIONABLE design plan.
Design Specifications:
- Layout: [specific changes]
- Colors: [exact colors with names - "Benjamin Moore Simply White OC-117"]
- Materials: [specific products - "Shaker white cabinets"]
- Flooring: [type, color, installation]
- Lighting: [fixture types, placement]
- Storage solutions
- Key features
Match inspiration aesthetic if provided, prioritize budget-conscious choices.
""",
tools=[calculate_timeline],
)
Build the Project Coordinator with Image Generation:
project_coordinator = LlmAgent(
name="ProjectCoordinator",
model="gemini-2.5-flash",
description="Coordinates timeline, budget, and generates photorealistic renderings",
instruction="""
Create final renovation plan with:
- Budget breakdown (materials, labor, permits, contingency)
- Timeline with phases
- Contractors needed
- Action checklist
Generate rendering using generate_renovation_rendering tool:
Build EXTREMELY DETAILED prompt incorporating:
- Room type and layout
- Exact colors with codes
- Specific materials and fixtures
- Lighting details
- All design elements
Example prompt structure:
"Professional interior photography of renovated [room_type].
Style: [exact style]
Colors: [Benjamin Moore Simply White OC-117 on walls]
Cabinets: [white shaker style with brushed nickel hardware]
Countertops: [Carrara marble-look quartz]
Flooring: [light oak luxury vinyl plank]
Backsplash: [white subway tile in running bond]
Camera: Wide-angle, eye-level, photorealistic, 8K quality"
""",
tools=[generate_renovation_rendering, edit_renovation_rendering],
)
Create the Planning Pipeline (Sequential Agent):
planning_pipeline = SequentialAgent(
name="PlanningPipeline",
description="Full renovation planning: Assessment → Design → Coordination",
sub_agents=[
visual_assessor,
design_planner,
project_coordinator,
],
)
Build the Rendering Editor for Iterative Refinement:
rendering_editor = LlmAgent(
name="RenderingEditor",
model="gemini-2.5-flash",
description="Edits existing renovation renderings based on feedback",
instruction="""
Refine existing renderings based on user feedback.
Find most recent rendering filename from conversation history.
Use edit_renovation_rendering tool with:
- artifact_filename: [exact filename of latest rendering]
- prompt: [very specific edit instruction]
- asset_name: [base name without version]
Be SPECIFIC in prompts - vague instructions = poor results!
""",
tools=[edit_renovation_rendering, list_renovation_renderings],
)
Create the Coordinator (Root Agent):
root_agent = LlmAgent(
name="HomeRenovationPlanner",
model="gemini-2.5-flash",
description="Intelligent coordinator that routes requests to specialists",
instruction="""
Analyze requests and route to the right specialist:
1. General questions → InfoAgent
2. Edit existing renderings → RenderingEditor
3. New renovation planning → PlanningPipeline
CRITICAL: Use transfer_to_agent - don't answer directly!
""",
sub_agents=[
info_agent,
rendering_editor,
planning_pipeline,
],
)
File: tools.py
Image Generation Tool Implementation:
from google import genai
from google.genai import types
from google.adk.tools import ToolContext
async def generate_renovation_rendering(
tool_context: ToolContext,
inputs: GenerateRenovationRenderingInput
) -> str:
"""Generate photorealistic rendering using Gemini 2.5 Flash Image."""
client = genai.Client()
# Create versioned filename
version = get_next_version_number(tool_context, inputs.asset_name)
artifact_filename = create_versioned_filename(inputs.asset_name, version)
# Build content for generation
contents = [
types.Content(
role="user",
parts=[types.Part.from_text(text=inputs.prompt)],
),
]
# Configure for image generation
config = types.GenerateContentConfig(
response_modalities=["IMAGE", "TEXT"],
)
# Generate image using Nano Banana
for chunk in client.models.generate_content_stream(
model="gemini-2.5-flash-image",
contents=contents,
config=config,
):
if chunk.candidates[0].content.parts[0].inline_data:
image_part = types.Part(
inline_data=chunk.candidates[0].content.parts[0].inline_data
)
# Save as artifact with version tracking
await tool_context.save_artifact(
filename=artifact_filename,
artifact=image_part
)
return f"✅ Rendering saved as: {artifact_filename}"
File: __init__.py
Package Setup:
"""AI Home Renovation Planner - Multi-Agent Pattern Demo"""
from .agent import root_agent
__all__ = ["root_agent"]
Running the App
With our code in place, it's time to launch the app.
Start ADK Web:
cd awesome-llm-apps/advanced_ai_agents/multi_agent_apps/ai_home_renovation_agent
adk web
Open your browser to the URL provided (typically
http://localhost:7788
)Select "ai_home_renovation_agent" from the app list
Try these example prompts:
Example 1: Upload current room photo
[Upload photo of your kitchen] "What can I improve here with a $15k budget?"
Example 2: Upload current room + inspiration
[Upload photo 1: your kitchen] [Upload photo 2: Pinterest inspiration] "Transform my kitchen to look like this modern farmhouse style"
Example 3: Text description only
"Renovate my 10x12 kitchen with oak cabinets. Want modern farmhouse style with white shaker cabinets and quartz countertops. Budget: $30k"
Example 4: Iterative refinement
[After initial rendering is generated] "Make the cabinets cream instead of white" "Add pendant lights over the island" "Change the backsplash to subway tile"
Working Application Demo
Conclusion
You've built a production-ready AI Home Renovation Planner using Google ADK and Gemini 2.5 Flash Image (Nano Banana). This multi-agent system demonstrates real-world agentic patterns: intelligent routing, specialized agents, and sophisticated image generation capabilities.
This setup can now be expanded further:
3D Visualization: Extend to generate multiple angles of the same room for comprehensive visualization
Before/After Comparisons: Automatically create side-by-side comparisons of current vs. renovated space
Contractor Matching: Integrate with contractor databases to provide personalized recommendations based on location
Export Capabilities: Generate PDF reports with all renderings, budgets, and timelines for sharing with contractors
Style Transfer from Multiple Inspirations: Blend elements from multiple inspiration images into a cohesive design
Keep experimenting with different configurations and features to build more sophisticated AI applications.
We share hands-on tutorials like this 2-3 times a week, to help you stay ahead in the world of AI. If you're serious about leveling up your AI skills and staying ahead of the curve, subscribe now and be the first to access our latest tutorials.
Reply