Creative Validator Docs

Upload one image, validate it against 50+ advertising platform specs, and generate correctly-sized derivatives for every channel with AI-powered generative fill. Convert still images to video with Veo 3.1. Runs in the browser — no install, no signup for validation.

Free to validate Validation is instant and requires no account. Resize uses Cloudinary (free tier available). Animate uses Google AI Studio (free Veo 3.1 access).

The Creative Asset Validator solves a specific pain point: you have one image and need it sized correctly for Google Ads, Meta, TikTok, DV360, The Trade Desk, CTV, LinkedIn, Pinterest, Snapchat, and dozens more. Manually checking specs and resizing in Photoshop takes hours. This tool does it in seconds.

What makes it different from a simple crop-and-resize tool:

Getting Started

Three steps from upload to production-ready assets:

1

Upload an Image

Drag and drop or click to upload any image (JPG, PNG, WebP, GIF) or video (MP4, MOV). The tool reads dimensions, aspect ratio, and file size instantly in the browser.

2

See Validation Results

Every supported channel is checked and color-coded: green = compatible as-is, amber = close but needs resize, red = incompatible aspect ratio. No account needed — validation runs entirely client-side.

3

AI Resize All

Click "Fix All" or select individual channels. The tool sends your image to Cloudinary with the correct transformation parameters and returns production-ready derivatives. Requires a Cloudinary account (free tier works).

BYOK — Bring Your Own Keys Cloudinary credentials (cloud name, API key) are entered in the app and stored in your browser's sessionStorage. They are never sent to any server other than Cloudinary's API. Closing the tab destroys them.

How Validation Works

When you upload an image, the validator checks it against every supported channel's requirements:

Aspect Ratio Matching

Each channel has an expected aspect ratio. The validator computes your image's ratio and compares it with a tolerance of ±0.05. For example, a 1080×1080 image (ratio 1.0) matches any channel requiring a ratio between 0.95 and 1.05.

Exact Size Matching (Display)

For display ad sizes (GDN, DV360, TTD), exact pixel dimensions are required. A 300×250 Medium Rectangle must be exactly 300×250 — aspect ratio matching alone isn't sufficient.

Video Duration

For video placements, the validator also checks duration. A TikTok In-Feed video must be 5–60 seconds. YouTube bumper ads must be ≤6 seconds.

Platform Categories

Channels are grouped into categories for easier navigation:

AI Resize

Resize uses Cloudinary URL-based transformations. The tool constructs the correct transform chain based on how different the target size is from your source image.

Strategy Selection

ScenarioTransformWhat Happens
Close aspect ratio (within ±0.2) c_fill,g_auto Smart crop with AI gravity detection. Keeps the subject centered, trims edges minimally.
Different aspect ratio (beyond ±0.2) c_pad,b_gen_fill AI generative fill extends the background. No content is cropped — new background is generated to fill the required canvas.
Why generative fill matters Traditional resize either crops (you lose content) or stretches (the image distorts). Generative fill understands the image context and creates new, seamless background that matches the original. A product shot on a white table extends naturally to a wider canvas.

Resize Packages

Pre-built packages let you generate all sizes for a platform in one click:

GDN Essential

8 sizes

300×250, 336×280, 728×90, 300×600, 320×50, 160×600, 250×250, 200×200. Covers ~95% of available GDN impression volume.

Meta Complete

6 placements

Feed (1080×1080), Story/Reel (1080×1920), Landscape (1200×628), Carousel (1080×1080), Right Column (1200×628), Marketplace (1200×628). Every Meta placement covered.

TTD Complete

11 sizes

All standard Trade Desk display sizes including native, banner, and interstitial formats.

DV360 Complete

12 sizes

Full DV360 display size coverage including custom high-impact formats.

Display All (Universal)

15 sizes

All IAB standard display sizes. One click generates every standard banner, skyscraper, rectangle, and leaderboard.

Animate

Convert any still image into a short video ad using Google Veo 3.1 (image-to-video).

How It Works

  1. Upload or select an already-validated image.
  2. Choose a duration: 4s, 6s, 8s, or 10s.
  3. Select a style: zoom, pan, parallax, cinematic, or let AI decide.
  4. Click "Animate" — the image is sent to Google's Veo 3.1 model, which generates a video from the still frame.

Requirements

Veo 3.1 availability Veo 3.1 is available through the Google AI Studio free tier. No billing required. Rate limits apply (varies by region).

Platform Specs

Social Platforms

PlatformPlacementSize (px)RatioMax File
FacebookFeed1080×10801:130 MB
FacebookStory1080×19209:1630 MB
FacebookRight Column1200×6281.91:130 MB
InstagramFeed Square1080×10801:130 MB
InstagramFeed Portrait1080×13504:530 MB
InstagramStory / Reel1080×19209:1630 MB
YouTubeDisplay Companion300×2501.2:1150 KB
YouTubeOverlay480×706.86:1150 KB
TikTokIn-Feed1080×19209:16500 MB
TikTokTopView1080×19209:16500 MB
LinkedInSingle Image1200×6271.91:15 MB
LinkedInStory1080×19209:165 MB
X / TwitterIn-Stream1200×67516:95 MB
X / TwitterCard800×4181.91:15 MB
PinterestStandard Pin1000×15002:320 MB
PinterestMax-Width Pin1000×21001:2.120 MB
SnapchatFull Screen1080×19209:165 MB

Google Display Network (GDN)

NameSize (px)RatioUsage
Medium Rectangle300×2501.2:1Most common — text pages, forums
Large Rectangle336×2801.2:1Larger in-content placement
Leaderboard728×908.09:1Top of page, below navigation
Half Page300×6001:2High-impact sidebar placement
Mobile Leaderboard320×506.4:1Mobile header/footer
Wide Skyscraper160×6001:3.75Sidebar tower
Square250×2501:1Versatile square format
Small Square200×2001:1Compact square
Banner468×607.8:1Classic banner
Large Leaderboard970×9010.78:1Premium desktop header
Billboard970×2503.88:1High-impact desktop top
Large Mobile Banner320×1003.2:1Mobile interscroller

The Trade Desk (TTD)

NameSize (px)Max File
Medium Rectangle300×250200 KB
Leaderboard728×90200 KB
Wide Skyscraper160×600200 KB
Half Page300×600200 KB
Billboard970×250200 KB
Mobile Leaderboard320×50200 KB
Large Rectangle336×280200 KB
Large Leaderboard970×90200 KB
Mobile Banner300×50200 KB
Native1200×6271 MB
Native Square1200×12001 MB

DV360

DV360 supports all standard GDN sizes plus additional high-impact formats. The validator checks against DV360-specific file size limits (typically 200 KB for standard display, 1 MB for native and rich media).

CTV / Connected TV

FormatResolutionRatioDuration
Standard CTV1920×108016:915s, 30s, 60s
4K CTV3840×216016:915s, 30s, 60s
Companion Banner300×2501.2:1

MCP Server

The Ad Creative MCP server exposes validate, resize, and specs tools to any MCP-compatible AI client. Install it to validate and resize assets through natural language in Claude, Cursor, or any MCP host.

Installation

bash npm install -g ad-creative-mcp

Cursor Configuration

Add to your .cursor/mcp.json:

json { "mcpServers": { "ad-creative": { "command": "npx", "args": ["-y", "ad-creative-mcp"], "env": { "CLOUDINARY_CLOUD_NAME": "your-cloud-name", "CLOUDINARY_API_KEY": "your-api-key" } } } }

Claude Desktop Configuration

Add to your claude_desktop_config.json:

json { "mcpServers": { "ad-creative": { "command": "npx", "args": ["-y", "ad-creative-mcp"], "env": { "CLOUDINARY_CLOUD_NAME": "your-cloud-name", "CLOUDINARY_API_KEY": "your-api-key" } } } }

Claude Code

Add the MCP server via the CLI:

bash claude mcp add ad-creative -- npx -y ad-creative-mcp

Available MCP Tools

ToolDescription
validate_creativeCheck an image/video against all platform specs. Returns compatibility matrix.
resize_creativeGenerate a resized derivative using AI fill. Returns Cloudinary URL.
batch_resizeResize to multiple sizes at once (e.g., entire GDN package).
get_platform_specsReturn specs for a specific platform or all platforms.
Example prompt "Validate my hero image at /images/hero.jpg against all GDN sizes and resize any that don't match."

Gemini Setup

Use the Creative Validator through Gemini CLI, Google AI Studio, or the Gemini REST API.

Gemini CLI

Install the Gemini CLI and configure your tool settings in ~/.gemini/settings.json:

json { "mcpServers": { "ad-creative": { "command": "npx", "args": ["-y", "ad-creative-mcp"], "env": { "CLOUDINARY_CLOUD_NAME": "your-cloud-name", "CLOUDINARY_API_KEY": "your-api-key" } } } }

AI Studio Function Declarations

When using Gemini through AI Studio or the REST API, declare the validator as a function:

json { "name": "validate_creative", "description": "Validate an advertising creative asset against platform specs", "parameters": { "type": "object", "properties": { "image_url": { "type": "string", "description": "URL of the image to validate" }, "platforms": { "type": "array", "items": { "type": "string" }, "description": "Platforms to check (e.g., gdn, meta, tiktok). Omit for all." } }, "required": ["image_url"] } }

REST API Usage

Call the validator from Gemini's function-calling flow. The model will invoke the declared function when the user asks about creative sizing, and you handle the tool call by forwarding it to the validator API.

bash curl -X POST "https://generativelanguage.googleapis.com/v1/models/gemini-2.0-flash:generateContent" \ -H "Content-Type: application/json" \ -H "x-goog-api-key: YOUR_API_KEY" \ -d '{ "contents": [{"parts": [{"text": "Validate my banner image for GDN"}]}], "tools": [{"function_declarations": [{ ... }]}] }'

Claude Setup

Use the Creative Validator with Claude Desktop or Claude Code through the MCP server.

Claude Desktop

After adding the MCP config (see MCP Server above), restart Claude Desktop. The validator tools appear automatically. Try these prompts:

example prompts "Validate this image for all social media platforms" "Resize my banner to all GDN sizes using AI fill" "What are the specs for TikTok In-Feed ads?" "Generate all Meta placements from my 1080x1080 image" "Show me which platforms this 1200x628 image is compatible with"

Claude Code

After adding the MCP server with claude mcp add, use it directly in your terminal:

bash claude "Validate the hero image in /assets/hero.jpg against all ad platforms" claude "Batch resize /assets/product.png to all GDN Essential sizes" claude "What dimensions does LinkedIn require for sponsored content?"
Claude works best when specific Instead of "resize my image," try "resize /path/to/image.jpg to all GDN sizes using generative fill." Including the file path and target platform yields the best results.

Cloudinary Cowork

Cowork is a no-code way for non-technical team members to interact with the Creative Validator through a shared Cloudinary workspace.

How It Works

  1. Share the workspace — Invite team members to your Cloudinary account with upload-only permissions.
  2. Upload to a folder — Team members upload creative assets to a designated folder (e.g., /ad-creatives/incoming).
  3. Auto-validate — A Cloudinary notification webhook triggers validation on upload. Results are written as structured metadata on the asset.
  4. Auto-resize — If configured, derivatives are automatically generated using the correct transform chain and saved to platform-specific subfolders.
Requires Cloudinary Programmable Media plan Notification webhooks and auto-tagging require at least the Cloudinary Plus plan. The free tier supports manual validation and resize through the web app.

Folder Structure

folder layout /ad-creatives/ incoming/ ← upload originals here validated/ ← auto-moved after validation resized/ gdn/ ← 300x250, 728x90, etc. meta/ ← feed, story, carousel ttd/ ← TTD display sizes social/ ← LinkedIn, X, Pinterest

API Reference

POST /api/creative-tools

All operations go through a single endpoint. The action field determines what happens.

action: "validate"

request { "action": "validate", "image_url": "https://example.com/banner.jpg", "width": 1200, "height": 628 }
response { "source": { "width": 1200, "height": 628, "ratio": 1.91 }, "results": { "facebook_feed": { "status": "resize", "target": "1080x1080", "strategy": "gen_fill" }, "facebook_story": { "status": "resize", "target": "1080x1920", "strategy": "gen_fill" }, "linkedin_single": { "status": "compatible", "target": "1200x627" }, "gdn_leaderboard": { "status": "resize", "target": "728x90", "strategy": "fill" }, ... }, "summary": { "compatible": 12, "resize": 38, "incompatible": 3 } }

action: "transform"

request { "action": "transform", "public_id": "ad-creatives/hero-banner", "cloud_name": "your-cloud", "target_width": 300, "target_height": 250, "strategy": "auto" }
response { "url": "https://res.cloudinary.com/your-cloud/image/upload/c_pad,w_300,h_250,b_gen_fill/ad-creatives/hero-banner.jpg", "transform": "c_pad,w_300,h_250,b_gen_fill", "width": 300, "height": 250 }

action: "batch"

request { "action": "batch", "public_id": "ad-creatives/hero-banner", "cloud_name": "your-cloud", "package": "gdn_essential" }
response { "package": "gdn_essential", "count": 8, "derivatives": [ { "name": "Medium Rectangle", "size": "300x250", "url": "https://res.cloudinary.com/..." }, { "name": "Large Rectangle", "size": "336x280", "url": "https://res.cloudinary.com/..." }, { "name": "Leaderboard", "size": "728x90", "url": "https://res.cloudinary.com/..." }, ... ] }

action: "specs"

request { "action": "specs", "platform": "meta" }
response { "platform": "meta", "placements": [ { "name": "Feed", "width": 1080, "height": 1080, "ratio": "1:1", "maxFileSize": "30MB" }, { "name": "Story", "width": 1080, "height": 1920, "ratio": "9:16", "maxFileSize": "30MB" }, { "name": "Right Column", "width": 1200, "height": 628, "ratio": "1.91:1", "maxFileSize": "30MB" }, ... ] }

Cloudinary Setup

Cloudinary provides the image transformation engine. You need a free account to use resize and animate features.

1

Create a Free Account

Sign up at cloudinary.com/users/register_free. The free plan includes 25 credits/month — enough for hundreds of resizes.

2

Find Your Cloud Name

After signup, your dashboard shows your Cloud Name (e.g., dxyz123abc). This is the account identifier used in all transformation URLs.

3

Get Your API Key

Go to Settings → Access Keys. Copy the API Key (numeric string). You do not need the API Secret for client-side unsigned uploads.

4

Enable Unsigned Uploads

Go to Settings → Upload. Scroll to Upload presets and create an unsigned preset or enable the default one. This allows the browser app to upload images directly.

5

Enter in the App

Open the Creative Validator, click the Cloudinary settings panel, and paste your Cloud Name and API Key. They're stored in sessionStorage — never sent anywhere except Cloudinary.

Free tier limits Cloudinary's free plan includes 25 credits/month. A single resize costs ~1 credit. A GDN Essential batch (8 sizes) costs ~8 credits. Generative fill transforms cost ~2 credits each. For heavy usage, the Plus plan starts at $89/month.

FAQ

Do I need an account to validate?

No. Validation runs entirely in your browser. Upload an image, see results instantly. No account, no API key, no signup.

Do I need a Cloudinary account to resize?

Yes. Resize uses Cloudinary's transformation API. A free account works for moderate usage (25 credits/month).

What image formats are supported?

JPG, PNG, WebP, GIF for images. MP4, MOV for video. The validator reads dimensions client-side for all formats.

Is my image uploaded anywhere during validation?

No. During validation, your image never leaves your browser. Dimensions are read locally using the browser's Image/Video API. Only during resize is the image sent to Cloudinary.

How accurate is generative fill?

Cloudinary's AI generative fill (powered by their ML pipeline) produces seamless extensions for most photographic content. It works best with images that have consistent backgrounds (product shots, landscapes, office scenes). Complex patterns or text near edges may produce artifacts.

Can I use this with the Cloudinary MCP server?

Yes. The Ad Creative MCP server works alongside the official Cloudinary MCP server. You can use either or both. The Ad Creative MCP adds platform-specific validation logic that the generic Cloudinary MCP doesn't have.

What's the difference between c_fill and c_pad?

c_fill,g_auto crops to fit (with smart gravity to keep the subject centered). c_pad,b_gen_fill adds AI-generated padding without cropping. The tool picks automatically based on how different the target ratio is from the source.

Can I animate a video?

Not currently. The animate feature is image-to-video only (using Veo 3.1). Video-to-video editing is on the roadmap.

Is there a batch upload option?

The web app handles one image at a time. For batch processing, use the MCP server or API endpoint with scripts.

Where are my Cloudinary credentials stored?

In your browser's sessionStorage. They are scoped to the tab, never persisted to disk, never sent to any server other than Cloudinary, and are destroyed when you close the tab.