{"protocol":{"name":"A2A (Agent-to-Agent)","version":"0.3","transport":"jsonrpc","specification":"https://a2a-protocol.org/dev/specification/"},"agent":{"name":"Whatever-ify AI Image Transformer","description":"A conversational AI agent that transforms images using vision and generation models. Chat with me to learn what I can do, or provide an image URL and transformation prompt to create amazing AI-generated variations! By default, I return image URLs to minimize response size (images cached for 15 minutes). Add \"base64\" to your request if you need the full image data.","version":"2.0.0","url":"https://a2a.danlemire.com","agentCard":"/.well-known/agent-card.json"},"capabilities":{"streaming":{"enabled":true,"type":"Server-Sent Events (SSE)","method":"message/stream","description":"Real-time streaming responses with progress updates during image transformation"},"pushNotifications":{"enabled":false,"description":"Async webhook notifications are not supported"},"stateTransitionHistory":{"enabled":false,"description":"Task state history tracking is not supported"},"conversational":{"enabled":true,"description":"Natural language understanding for extracting image URLs and transformation styles"},"multimodal":{"enabled":true,"inputFormats":["text","data","fileUri"],"outputFormats":["text (image URLs)","data (base64 images - optional with \"base64\" keyword)"]}},"methods":{"message/send":{"description":"Send a message and receive a complete response. Returns image URL by default; include \"base64\" keyword for full image data.","streaming":false,"inputSchema":{"message":{"role":"user","parts":["TextPart | DataPart | FileUriPart"]}},"outputSchema":{"task":{"id":"string","state":"completed | failed","artifact":{"parts":["TextPart (always includes image URL)","DataPart (image/png - only if \"base64\" requested)"]}}}},"message/stream":{"description":"Send a message and receive streaming updates via Server-Sent Events. Returns image URL by default; include \"base64\" keyword for full image data.","streaming":true,"responseType":"text/event-stream","events":["message","error"],"inputSchema":{"message":{"role":"user","parts":["TextPart | DataPart | FileUriPart"]}},"outputSchema":{"task":{"id":"string","state":"working | completed | failed","artifact":{"parts":["TextPart (always includes image URL)","DataPart (image/png - only if \"base64\" requested)"]}}}}},"skills":[{"id":"conversational-help","name":"Conversational Assistant","description":"Chat with the agent to learn about its capabilities, get guidance, and understand how to use the image transformation service","inputModes":["text"],"outputModes":["text"]},{"id":"image-transformation","name":"AI Image Transformation","description":"Transform images using AI vision (LLaVA) and generation (Stable Diffusion XL) models. Supports multiple artistic styles including superhero, anime, cyberpunk, oil painting, pixel art, and more. Returns image URLs by default (cached for 15 min). Include \"base64\" keyword in your request to also receive the full base64-encoded image data.","inputModes":["text","data"],"outputModes":["text","data"]}],"authentication":{"required":false,"schemes":[],"description":"No authentication required - open access"},"endpoints":{"GET /.well-known/agent-card.json":"Agent Card (A2A v0.3 compliant)","GET /":"Discovery and capabilities (this endpoint)","POST /":"JSON-RPC 2.0 endpoint (message/send, message/stream)","GET /images/:imageId":"Retrieve cached image (PNG format, 15-minute expiration)"},"imageCaching":{"storage":"Cloudflare KV","ttl":"15 minutes (900 seconds)","format":"PNG","headers":{"Content-Type":"image/png","Cache-Control":"public, max-age=900"},"behavior":"Images are automatically cached when generated and expire after 15 minutes. Returns 404 for expired or missing images."},"examples":{"naturalLanguage":["Transform https://example.com/photo.jpg as a superhero (returns URL only)","Make this image cyberpunk: https://example.com/me.png","Can you turn https://example.com/selfie.jpg into anime with base64? (returns URL + base64 data)"],"structuredData":{"method":"message/send","request":{"jsonrpc":"2.0","method":"message/send","params":{"message":{"role":"user","parts":[{"kind":"data","data":{"imageUrl":"https://example.com/photo.jpg","prompt":"as a cyberpunk character"}}]}},"id":"example-001"}},"streaming":{"method":"message/stream","request":{"jsonrpc":"2.0","method":"message/stream","params":{"message":{"role":"user","parts":[{"kind":"text","text":"Transform https://example.com/photo.jpg as anime"}]}},"id":"stream-001"},"responseType":"text/event-stream"},"urlOnlyResponse":{"description":"Default response mode - returns image URL only","request":"Transform https://example.com/photo.jpg as superhero","response":{"status":{"state":"completed","message":{"role":"agent","kind":"message","parts":[{"kind":"text","text":"✅ Image transformed successfully!\n\n🎨 Style applied: \"as a superhero\"\n📦 Image size: 1824.1 KB\n\n🔗 View image: https://a2a.danlemire.com/images/img-xxx"}]}}}},"base64Response":{"description":"With \"base64\" keyword - returns both URL and base64 data","request":"Transform https://example.com/photo.jpg as superhero with base64","response":{"status":{"state":"completed","message":{"role":"agent","kind":"message","parts":[{"kind":"text","text":"✅ Image transformed successfully!\n\n🎨 Style applied: \"as a superhero\"\n📦 Image size: 1824.1 KB\n\n🔗 View image: https://a2a.danlemire.com/images/img-xxx"},{"kind":"data","contentType":"image/png","data":"iVBORw0KGgoAAAANSUhEUgAA...(base64 encoded PNG)"}]}}}}}}