One API call. AI-powered script writing + image generation. From headline to comic strip in minutes.
Paste a URL or text. Our AI reads and understands the story.
Characters, dialogue, and satirical angles β all generated.
Panel-by-panel images assembled into a complete comic strip.
$0/mo
$49/mo
Custom
Enter your API key to try it out:
π Your comic will appear here
Tier
Used (1h)
Remaining
Limit
No jobs yet. Go generate a comic!
Full OpenAPI/Swagger documentation with try-it-out functionality.
Open Swagger UI βhttps://sketchyapi.snaf.foo/api/v1
All endpoints require an API key via header:
X-API-Key: sk-sketchy-your-key
/api/v1/comic
Submit a comic generation job.
{
"article_url": "https://example.com/article",
"panels": 18,
"tone": "sharp",
"style": "editorial cartoon style, vibrant colors",
"language": "en"
}
/api/v1/comic/{job_id}
Get job status and result. Poll until status is completed.
/api/v1/comic/{job_id}/combined
Download the combined comic image (PNG).
/api/v1/comic/{job_id}/panels/{n}
Download individual panel image.
/api/v1/balance
Check usage and quota for your API key.
# Submit a comic job
curl -X POST https://sketchyapi.snaf.foo/api/v1/comic \
-H "Content-Type: application/json" \
-H "X-API-Key: sk-sketchy-mvp-001" \
-d '{"article_url": "https://example.com/news", "panels": 9, "tone": "savage"}'
# Check status
curl https://sketchyapi.snaf.foo/api/v1/comic/JOB_ID \
-H "X-API-Key: sk-sketchy-mvp-001"
import requests, time
API = "https://sketchyapi.snaf.foo/api/v1"
HEADERS = {"X-API-Key": "sk-sketchy-mvp-001"}
# Submit
r = requests.post(f"{API}/comic", json={
"article_url": "https://example.com/news",
"panels": 9, "tone": "savage"
}, headers=HEADERS)
job = r.json()
# Poll until done
while job["status"] not in ("completed", "failed"):
time.sleep(5)
job = requests.get(f"{API}/comic/{job['job_id']}", headers=HEADERS).json()
print(f"Comic ready: {job['combined_image_url']}")
const API = 'https://sketchyapi.snaf.foo/api/v1';
const headers = { 'Content-Type': 'application/json', 'X-API-Key': 'sk-sketchy-mvp-001' };
// Submit
let job = await fetch(`${API}/comic`, {
method: 'POST', headers,
body: JSON.stringify({ article_url: 'https://example.com/news', panels: 9, tone: 'savage' })
}).then(r => r.json());
// Poll
while (!['completed', 'failed'].includes(job.status)) {
await new Promise(r => setTimeout(r, 5000));
job = await fetch(`${API}/comic/${job.job_id}`, { headers }).then(r => r.json());
}
console.log('Comic ready:', job.combined_image_url);