Generate leads with Google Maps
This workflow leverages n8n to perform automated Google Maps API queries and manage data efficiently in Google Sheets. It's designed to extract specific location data based on a given list of ZIP codes and categories. --- Features Queries the Google Maps API for location data using predefined ZIP codes and subcategories. Filters, de-duplicates, and organizes data into structured rows in Google Sheets. Implements exponential backoff retries to handle API rate limits. Logs and updates statuses directly in Google Sheets for easy tracking. --- Prerequisites Google OAuth Credentials: A configured Google Cloud project for Google Maps API and Sheets API access. Google Sheets: A sheet with ZIP codes and categories defined (e.g., "AZ Zips"). n8n Setup: A running instance of n8n with credentials configured for Google OAuth. --- Setup Instructions Prepare Google Sheets Add the ZIP codes to the "AZ Zips" sheet. Define subcategories in another sheet (e.g., "Google Maps Categories"). Provide the sheet's URL in the Settings node of the workflow. Configure API Access Set up Google OAuth credentials for Maps and Sheets APIs in n8n. Ensure your API key has access to the places.searchText endpoint. Workflow Customization Modify textQuery parameters in the GMaps API node to match your query needs. Adjust trigger intervals as required (e.g., manual or scheduled execution). Run the Workflow Execute the workflow manually or schedule periodic runs to keep your data updated. --- Notes This workflow includes robust error handling to retry failed API calls with exponential backoff. All data is organized and logged directly in Google Sheets for easy reference and updates. For more information or issues, feel free to reach out!
Gmail AI Auto-Responder: Create Draft Replies to incoming emails
This workflow automatically generates draft replies in Gmail. It's designed for anyone who manages a high volume of emails or often face writer's block when crafting responses. Since it doesn't send the generated message directly, you're still in charge of editing and approving emails before they go out. How It Works: Email Trigger: activates when new emails reach the Gmail inbox Assessment: uses OpenAI gpt-4o and a JSON parser to determine if a response is necessary. Reply Generation: crafts a reply with OpenAI GPT-4 Turbo Draft Integration: after converting the text to html, it places the draft into the Gmail thread as a reply to the first message Set Up Overview (~10 minutes): OAuth Configuration (follow n8n instructions here): Setup Google OAuth in Google Cloud console. Make sure to add Gmail API with the modify scope. Add Google OAuth credentials in n8n. Make sure to add the n8n redirect URI to the Google Cloud Console consent screen settings. OpenAI Configuration: add OpenAI API Key in the credentials Tweaking the prompt: edit the system prompt in the "Generate email reply" node to suit your needs Detailed Walkthrough Check out this blog post where I go into more details on how I built this workflow. Reach out to me here if you need help building automations for your business.
Generate Text-to-Speech Using Elevenlabs via API
🎉 Do you want to master AI automation, so you can save time and build cool stuff? I’ve created a welcoming Skool community for non-technical yet resourceful learners. 👉🏻 Join the AI Atelier 👈🏻 --- This workflow provides an API endpoint to generate speech from text using Elevenlabs.io, a popular text-to-speech service. Step 1: Configure Custom Credentials in n8n To set up your credentials in n8n, create a new custom authentication entry with the following JSON structure: json { "headers": { "xi-api-key": "your-elevenlabs-api-key" } } Replace "your-elevenlabs-api-key" with your actual Elevenlabs API key. Step 2: Send a POST Request to the Webhook Send a POST request to the workflow's webhook endpoint with these two parameters: voice_id: The ID of the voice from Elevenlabs that you want to use. text: The text you want to convert to speech. This workflow has been a significant time-saver in my video production tasks. I hope it proves just as useful to you! Happy automating! The n8Ninja
AI orchestrator: dynamically selects models based on input type
This workflow is designed to intelligently route user queries to the most suitable large language model (LLM) based on the type of request received in a chat environment. It uses structured classification and model selection to optimize both performance and cost-efficiency in AI-driven conversations. It dynamically routes requests to specialized AI models based on content type, optimizing response quality and efficiency. --- Benefits Smart Model Routing: Reduces costs by using lighter models for general tasks and reserving heavier models for complex needs. Scalability: Easily expandable by adding more request types or LLMs. Maintainability: Clear logic separation between classification, model routing, and execution. Personalization: Can be integrated with session IDs for per-user memory, enabling personalized conversations. Speed Optimization: Fast models like GPT-4.1 mini or Gemini Flash are chosen for tasks where speed is a priority. --- How It Works Input Handling: The workflow starts with the "When chat message received" node, which triggers the process when a chat message is received. The input includes the chat message (chatInput) and a session ID (sessionId). Request Classification: The "Request Type" node uses an OpenAI model (gpt-4.1-mini) to classify the incoming request into one of four categories: general: For general queries. reasoning: For reasoning-based questions. coding: For code-related requests. search: For queries requiring search tools. The classification is structured using the "Structured Output Parser" node, which enforces a consistent output format. Model Selection: The "Model Selector" node routes the request to one of four AI models based on the classification: Opus 4 (Claude 4 Sonnet): Used for coding requests. Gemini Thinking Pro: Used for reasoning requests. GPT 4.1 mini: Used for general requests. Perplexity: Used for search (Google-related) requests. AI Processing: The selected model processes the request via the "AI Agent" node, which includes intermediate steps for complex tasks. The "Simple Memory" node retains session context using the provided sessionId, enabling multi-turn conversations. Output: The final response is generated by the chosen model and returned to the user. --- Set Up Steps Configure Trigger: Ensure the "When chat message received" node is set up with the correct webhook ID to receive chat inputs. Define Classification Logic: Adjust the prompt in the "Request Type" node to refine classification accuracy. Verify the output schema in the "Structured Output Parser" node matches expected categories (general, reasoning, coding, search). Connect AI Models: Link each model node (Opus 4, Gemini Thinking Pro, GPT 4.1 mini, Perplexity) to the "Model Selector" node. Ensure credentials (API keys) for each model are correctly configured in their respective nodes. Set Up Memory: Configure the "Simple Memory" node to use the sessionId from the input for context retention. Test Workflow: Send test inputs to verify classification and model routing. Check intermediate outputs (e.g., request_type) to ensure correct model selection. Activate Workflow: Toggle the workflow to "Active" in n8n after testing. --- Need help customizing? Contact me for consulting and support or add me on Linkedin.
Smart email assistant: automate customer support with AI & Supabase
Intelligent Email Support System with Vector Database Overview This n8n workflow automates email support using AI and vector database technology to provide smart, context-aware responses. It seamlessly integrates email automation and document management, ensuring efficient customer support. 📌 System Components ✉️ Email Support System Email Monitoring & Classification Gmail trigger node monitoring inbox AI-powered email classification Intelligent routing (support vs non-support inquiries) AI Response Generation LangChain agent for response automation OpenAI integration for NLP-driven replies Vector-based knowledge retrieval Automated draft creation in Gmail Vector Database System Supabase vector store for document management OpenAI embeddings for vector conversion Fast and efficient similarity search 📂 Document Management System Google Drive Integration Monitors specific folders for new/updated files Automatic document processing Supports various file formats Document Processing Pipeline Auto file download & text extraction Smart text chunking for better indexing Embedding generation via OpenAI Storage in Supabase vector database 🔄 Workflow Processes 📧 Email Support Flow Monitor Gmail inbox for new emails AI classification of incoming messages Route support emails to AI response generator Perform vector similarity search for knowledge retrieval Generate personalized AI-driven response Create email drafts in Gmail 📁 Document Management Flow Monitor Google Drive for new/updated files Auto-download and process documents Clean up outdated vector entries for updated files Extract and split document text efficiently Generate OpenAI embeddings Store processed data in Supabase vector DB ⚙️ Setup Instructions 1️⃣ Prerequisites Supabase account & project OpenAI API key Gmail account with OAuth2 setup Google Drive API access n8n installation 2️⃣ Supabase Database Setup sql -- Create the vector extension create extension if not exists vector; -- Create the documents table create table documents ( id bigserial primary key, content text, metadata jsonb, embedding vector(1536) ); -- Create an index for similarity search create index on documents using ivfflat (embedding vectorcosineops) with (lists = 100); 3️⃣ Google Drive Setup Create & configure two monitored folders: RAG folder for new documents documents Assign correct folder permissions Add folder IDs to the workflow 4️⃣ Document Processing Configuration Set up triggers for file creation and file updates Configure text extraction: Define chunk size & overlap settings Set document metadata processing 🔍 Maintenance & Optimization 📌 Regular Tasks Monitor system performance Update the knowledge base regularly Review AI response quality Optimize vector search parameters Clean up outdated document embeddings ✅ Best Practices Document Organization Maintain structured folders & naming conventions Keep knowledge base content updated System Optimization Track AI classification accuracy Tune response times & chunk sizes Perform regular database maintenance 🛠️ Troubleshooting Email Issues Verify Gmail API credentials Check AI service uptime Monitor classification performance Document Processing Issues Ensure correct file permissions Validate extraction & embedding processes Debug vector database insertions
Create a REST API for PDF digital signatures with webhooks
Overview An automation workflow that creates a complete REST API for digitally signing PDF documents using n8n webhooks. This service demonstrates how to implement secure document signing functionality through standardized API endpoints with file upload and download capabilities. Use Case This workflow is designed for developers and automation specialists who need to implement digital document signing. It's particularly useful for: Integrating PDF signing capabilities into existing document workflows API-based automation of signature processes Creating proof-of-concept implementations for document verification systems Learning n8n's webhook capabilities and file handling techniques Testing PDF signing in development environments before production implementation What This Workflow Does API-Based Document Management Exposes RESTful webhook endpoints for all document operations Handles multipart/form-data uploads for PDF documents Processes JSON payloads for signing configuration Provides download functionality for completed documents Digital Certificate Handling Uploads existing PFX/PKCS12 digital certificates Generates new certificates with customizable attributes Securely manages certificate storage and access Associates certificates with signing operations Cryptographic PDF Signing Applies digital signatures using industry-standard cryptographic methods Embeds signature information within PDF document structure Validates document integrity through cryptographic verification Preserves original document while adding signature elements Webhook Integration System Routes different API methods to appropriate handlers Validates request payloads and file content Manages authentication through webhook paths Returns structured responses for integration with other systems Technical Architecture Components API Gateway: n8n webhook nodes that receive external requests Request Router: Switch nodes that direct operations based on method parameters Document Processor: Function nodes for PDF manipulation and verification Certificate Manager: Specialized nodes for cryptographic key operations Storage Interface: File operation nodes for document persistence Response Formatter: Nodes that structure API responses Integration Flow Client Request → Webhook Endpoint → Method Router → Processing Engine → Digital Signing → Storage → Response Generation → Client Response Setup Instructions Prerequisites n8n installation (minimum version 0.214.0) Node.js 14 or higher Required environment variable: NODEFUNCTIONALLOW_EXTERNAL: "node-forge,@signpdf/signpdf,@signpdf/signer-p12,@signpdf/placeholder-plain" Configuration Steps Import Workflow Import the workflow JSON into your n8n instance Activate the workflow to enable the webhooks Configure Storage Set the storage path variables in the workflow Ensure proper permissions on the storage directories Test API Endpoints Use the included test scripts to verify functionality Test PDF upload, certificate generation, and signing Integration Document the webhook URLs for integration with other systems Configure error handling according to your requirements Testing Methods Test the workflow functionality using various HTTP requests and JSON data: Upload PDF documents to the document processing endpoint Upload or generate digital certificates Execute PDF signing operations Download signed documents from the download endpoint Webhook Endpoints The workflow exposes two primary webhook endpoints that form a complete API for PDF digital signing operations: Document Processing Endpoint (/webhook/docu-digi-sign) This endpoint handles all document and certificate operations: Method: Upload PDF HTTP: POST Content-Type: multipart/form-data Parameters: method, uploadType, fileName, fileData Method: Upload Certificate HTTP: POST Content-Type: multipart/form-data Parameters: method, uploadType, fileName, fileData Method: Generate Certificate HTTP: POST Content-Type: application/json Parameters: method, subjectCN, issuerCN, serialNumber, validFrom, validTo, password Method: Sign PDF HTTP: POST Content-Type: application/json Parameters: method, inputPdf, pfxFile, pfxPassword Document Download Endpoint (/webhook/docu-download) This endpoint handles the retrieval of processed documents: Method: Download Signed PDF HTTP: GET Content-Type: application/json Parameters: method, fileType, fileName Key Workflow Sections The workflow is organized into logical sections with clear responsibilities: Request Processing: Parses incoming webhook data Method Routing: Directs requests to appropriate handlers Document Management: Handles file operations and storage Cryptographic Operations: Manages signing and certificate functions Response Formatting: Structures and returns results
🗲 Creating a Secure Webhook - MUST HAVE
How it works This workflow demonstrates a fundamental pattern for securing a webhook by requiring an API key. It acts as a gatekeeper, checking for a valid key in the request header before allowing the request to proceed. Incoming Request: The Secured Webhook node receives an incoming POST request. It expects an API key to be sent in the x-api-key header. API Key Verification: The Check API Key node takes the key from the incoming request's header. It then makes an internal HTTP request to a second* webhook (Get API Key) which acts as a mock database. This second webhook retrieves a list of registered API keys (from the Registered API Keys node) and filters it to find a match for the key that was provided. Conditional Response: If a match is found, the API Key Identified node routes the execution to the "success" path, returning a 200 OK response with the identified user's ID. If no match is found, it routes to the "unauthorized" path, returning a 401 Unauthorized error. This pattern separates the public-facing endpoint from the data source, which is a good security practice. Set up steps Setup time: ~2 minutes This workflow is designed to be a self-contained example. Set up Credentials: This workflow uses "Header Auth" for its internal communication. Go to Credentials and create a new Header Auth credential. You can use any name and value (e.g., Name: X-N8N-Auth, Value: my-secret-password). Select this credential in all four webhook/HTTP Request nodes. Add Your API Keys: Open the Registered API Keys node. This is your mock database. Edit the array to include the userid and apikey pairs you want to authorize. Activate the workflow. Test it: Use the Test Secure Webhook node to send a request. Try it with a valid key from your list to see the success response. Change the x-api-key header to an invalid key to see the 401 Unauthorized error. For Production: Replace the mock database part of this workflow (the Get API Key webhook and Registered API Keys node) with a real database node like Supabase, Postgres, or Baserow to look up keys.
Automated end-to-end fine-tuning of OpenAI models with Google Drive integration
How it Works This n8n workflow automates fine-tuning OpenAI models through these key steps: Manual Trigger: Starts with the "When clicking ‘Test workflow’" event to initiate the process. Downloads a .jsonl file from Google Drive Upload to OpenAI: Uploads the .jsonl file to OpenAI via the "Upload File" node (with purpose "fine-tune"). Create Fine-tuning Job: Sends a POST request to the endpoint https://api.openai.com/v1/fine_tuning/jobs with: json { "training_file": "{{ $json.id }}", "model": "gpt-4o-mini-2024-07-18" } OpenAI automatically starts training the model based on the provided file. Interaction with the Trained Model: An "AI Agent" uses the custom model (e.g., ft:gpt-4o-mini-2024-07-18:n3w-italia::XXXX7B) to respond to chat messages. --- Set up Steps To configure the workflow: Prepare the Training File: Create a .jsonl file following the specified syntax (e.g., travel assistant Q/A examples). Upload it to Google Drive and update the ID in the "Google Drive" node. Configure Credentials: Google Drive: Connect an account via OAuth2 (googleDriveOAuth2Api). OpenAI: Add your API key in the "OpenAI Chat Model" and "Upload File" nodes. Customize the Model: In the "OpenAI Chat Model" node, specify the name of your fine-tuned model (e.g., ft:gpt-4o-mini-...). Update the HTTP request body (Create Fine-tuning Job) if needed (e.g., a different base model). Start the Workflow: Use the manual trigger ("Test workflow") to begin the upload and training process. Test the model via the "Chat Trigger" (chat messages). Integrated Documentation: Follow the instructions in the Sticky Notes to: Properly format the .jsonl (Step 1). Monitor progress on OpenAI (Step 2, link: https://platform.openai.com/finetune/). --- Note: Ensure the .jsonl file adheres to OpenAI’s required structure and that credentials are valid.
Send WhatsApp bulk messages from Google Sheets
WhatsApp Bulk Message Broadcast via Google Sheets (n8n Workflow) Use Case This workflow enables automated bulk WhatsApp message broadcasting using the WhatsApp Business Cloud API. It pulls recipient and message data from a Google Sheet, sends templated messages (optionally with image headers), and updates the sheet with the message status. It is ideal for marketing teams, support agents, and businesses handling high-volume outreach. --- Who Is This For? Businesses conducting WhatsApp marketing or outreach campaigns Customer support or notification teams Administrators seeking an automated, no-code message distribution system using Google Sheets --- What This Workflow Does Triggers automatically every minute to scan for pending messages Fetches unsent entries from a Google Sheet Limits the number of messages processed per execution to comply with API usage guidelines Sanitizes WhatsApp numbers for proper formatting Sends messages using a pre-approved WhatsApp template (text and optional image) Marks the row as "Sent" in the sheet upon successful delivery --- Workflow Breakdown (Node by Node) Trigger Every 5 Minutes Initiates the workflow every minute using a scheduled trigger to continuously monitor pending rows. Fetch All Pending Queries for Messaging Reads rows from a Google Sheet where the Status column is empty, indicating they haven’t been processed yet. Limit Restricts processing to 2 rows per execution to manage API throughput. Loop Over Items Uses SplitInBatches to iterate through each row individually. Clean WhatsApp Number A code node that strips non-numeric characters from the WhatsApp No field, ensuring the format is valid for the API. Send Message to 300 Phone No Sends a WhatsApp message using the WhatsApp Cloud API and a pre-approved template. Template includes: An image from the Image URL column (as header, optional) Dynamic variables for the recipient's Name and Message fields Template variables must be pre-defined and approved in the Meta Developer Portal, such as {{1}}, {{2}}. Change State of Rows in Sent1 Updates the Status column to Sent for each successfully processed row using the row number as a reference. --- Google Sheet Format Structure your Google Sheet as shown below: | WhatsApp No | Name | Message | Image URL | Status | |--------------|------------|---------------------------|---------------------|--------| | +8801XXXXXXX | John Doe | Hello, your order shipped | https://.../img.jpg | | Leave the Status column empty for rows that need to be processed. --- Requirements WhatsApp Business Cloud API access via Meta for Developers A properly structured Google Sheet as described above Active OAuth2 credentials configured in n8n for: googleSheetsOAuth2Api whatsAppApi --- Customization Options Update the Limit node to control how many rows are processed in each run Adjust the trigger schedule (e.g., change to every 5 minutes) Replace the message template ID with your own custom-approved one from Meta Add error-handling logic (e.g., IF or Try/Catch nodes) to log failures or set Status = Failed --- Sample Sheet Template View Sample Google Sheet --- Workflow Highlights Automated execution every 1 minute Reads and processes only pending records Verifies WhatsApp numbers and delivers templated messages Updates Google Sheet after each attempt --- Support & Community Need help setting up or customizing the workflow? WhatsApp: Contact Support Discord: Join SpaGreen Server Facebook Group: SpaGreen Community Website: Visit SpaGreen Creative
Generate images with GPT-image-1 and store in Google Drive with cost tracking
How it works Receive a chat input as an image prompt. Call OpenAI's gpt-image-1 API to generate an image. Split the returned images and process them one by one. Upload each generated image to Google Drive. Save image links and thumbnails to a Google Sheets document. Record token usage and estimated cost into a separate sheet. Set up steps Connect your OpenAI API credentials for image generation. Connect your Google Drive and Google Sheets accounts. Set the destination folder in Google Drive. Set the target Google Sheet and specify the correct sheet tabs. The setup usually takes around 5-10 minutes. Detailed field mappings are already pre-configured inside the workflow. Additional tips and instructions are included as sticky notes inside the workflow. Google Sheet copy url Copy Sheet Link
Scrape books from URL with Dumpling AI, clean HTML, save to Sheets, email as CSV
👥 Who is this for? This workflow is ideal for virtual assistants, researchers, developers, automation specialists, and data analysts who need to regularly extract and organize structured product information (like books) from a website. It’s especially useful for those working with catalog-based websites who want to automate extraction and delivery of clean, sorted data. --- 🧩 What problem is this solving? Manually copying product listings like book titles and prices from a website into a spreadsheet is slow and repetitive. This automation solves that problem by scraping content using Dumpling AI, extracting the right data using CSS selectors, and formatting it into a clean CSV file that is sent to your email—all triggered automatically when a new URL is added to Google Sheets. --- ⚙️ What this workflow does This template automates an entire content scraping and delivery process: Watches a Google Sheet for new URLs Scrapes the HTML content of the given webpage using Dumpling AI Uses CSS selectors in the HTML node to extract each book from the page Splits the HTML array into individual items Extracts the book title and price from each HTML block Sorts the books in descending order based on price Converts the sorted data to a CSV file Sends the CSV via email using Gmail --- 🛠️ Setup Google Sheets Create a sheet titled something like URLs Add your product listing URLs (e.g., http://books.toscrape.com) Connect the Google Sheets trigger node to your sheet Ensure you have proper credentials connected Dumpling AI Create an account at Dumpling AI - Generate your API key Set the HTTP Method to POST and pass the URL dynamically from the Google Sheet Use Header Auth to include your API key in the request header Make sure "cleaned": "True" is included in the body for optimized HTML output HTML Node The first HTML node extracts the main book container blocks using: .row > li The second HTML node parses out the individual fields: title: h3 > a (via the title attribute) price: .price_color Sort Node Sorts books by price in descending order Note: price is extracted as a string, ensure it's parsable if you plan to use numeric filtering later Convert to CSV The JSON data is passed into a Convert node and transformed into a CSV file Gmail Sends the CSV as an attachment to a designated email --- 🔄 How to customize this workflow Extract more data: Add more CSS selectors in the second HTML node to pull fields like author, availability, or product links Switch destinations: Replace Gmail with Slack, Google Drive, Dropbox, or another platform Adjust sorting: Sort alphabetically or based on another extracted value Use a different source: As long as the site structure is consistent, this can scrape any listing-like page Trigger differently: Use a webhook, form submission, or schedule trigger instead of Google Sheets --- ⚠️ Dependencies and Notes This workflow uses Dumpling AI to perform the web scraping. This requires an API key and uses credits per request. The HTML node depends on valid CSS selectors. If the site layout changes, the selectors may need to be updated. Ensure you’re not scraping content from websites that prohibit automated scraping.
Product video creator with Nano Banana & Veo 3.1 via Telegram
Product Video Creator with Nano Banana & Veo 3.1 via Telegram Who's it for This workflow is perfect for: E-commerce sellers needing quick product videos Social media marketers creating content at scale Small business owners without video editing skills Product photographers enhancing their offerings Anyone selling on Instagram, TikTok, or mobile-first platforms What it does Transform basic product photos into professional marketing videos in under 2 minutes: Send a product photo to your Telegram bot Nano Banana analyzes and enhances your image with studio-quality lighting Veo 3.1 generates an 8-second vertical video with motion and audio Receive your scroll-stopping marketing video automatically Perfect for creating engaging vertical content without expensive tools or editing expertise. How it works Input → User sends product photo via Telegram with optional caption AI Analysis → Nano Banana analyzes product and generates detailed enhancement prompt Image Enhancement → Nano Banana creates commercial-grade photo (9:16, studio lighting) Video Generation → Veo 3.1 creates 8-second 1080p video with motion and audio Delivery → Auto-polls status every 30s, delivers final video to Telegram Requirements Google Cloud Platform Vertex AI API enabled for Veo 3.1 Generative Language API enabled for Nano Banana OAuth2 credentials Get credentials from Google Cloud Console Telegram Bot token from @BotFather n8n Self-hosted or cloud instance Setup Import workflow JSON into n8n Add credentials: Telegram API (bot token) Google OAuth2 API (client id and secret) Google PaLM API (API key) Update your Project ID in both Veo 3.1 nodes Activate workflow and test with a product photo How to customize Aspect Ratio: Choose 9:16 (vertical), 16:9 (horizontal) in "Generate Enhanced Image" and "Initiate veo 3.1" nodes Duration: Set 2 to 8 seconds by adjusting durationSeconds in "Initiate veo 3.1 Video Generation" Quality: Select 720p or 1080p by changing resolution in "Initiate veo 3.1 Video Generation" Audio: Enable or disable background music by toggling generateAudio in "Initiate veo 3.1 Video Generation" Enhancement Style: Match your brand aesthetic by editing the prompt in "AI Design Analysis" node Polling Time: Adjust retry interval by changing wait time in "Processing Delay (30s)" node Key Features 🔐 Direct Google APIs – No third-party services. Uses Nano Banana and Veo 3.1 directly via Google Cloud for maximum reliability and privacy ⚡ Fully Automated – Send photo, receive video. Zero manual work required 🎨 Studio Quality – Nano Banana delivers professional lighting, composition, and AI-powered color grading 📱 Mobile-First – Default 9:16 vertical format optimized for Instagram Reels, TikTok, and Stories 🔄 Smart Retry Logic – Automatically polls Veo 3.1 status every 30 seconds until video generation completes 🎵 Audio Included – Veo 3.1 generates background music automatically (can be disabled)