> ## Documentation Index
> Fetch the complete documentation index at: https://developers.t2000.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Concept → demo asset

> From idea to image + pitch + voiceover in one prompt. Chains fal.ai + Anthropic + ElevenLabs over x402.

Your agent takes a concept, generates a hero image with fal.ai's Flux, writes a 60-second elevator pitch with Claude, and synthesizes the pitch as an MP3 via ElevenLabs — all in one chain, paid as you go in USDC. \~\$0.18, \~18 seconds.

***

## The prompt

```
Use t2 services. Generate a hero image via fal.ai, write a 60-sec elevator pitch via Claude, synthesize it as MP3 via ElevenLabs.
```

***

## What runs

1. `POST /fal/fal-ai/flux/dev` — Flux image generation (\~\$0.06)
2. `POST /anthropic/v1/messages` — Claude writes the pitch (\~\$0.02)
3. `POST /elevenlabs/v1/text-to-speech/:voiceId` — pitch becomes audio (\~\$0.10)

***

## Run it

### Claude Desktop (MCP)

Same install pattern as any recipe:

```bash theme={null}
npm install -g @t2000/cli && t2 init && t2 fund && t2 mcp install
```

Then paste the prompt above (or your own variant — "Pitch a sleep tracker for cats" works).

### SDK

```typescript theme={null}
import { T2000 } from '@t2000/sdk';
import { writeFileSync } from 'fs';

const agent = await T2000.create();

const concept = 'A weather-aware coffee subscription that ships beans matched to your forecast';

const image = await agent.pay({
  url: 'https://mpp.t2000.ai/fal/fal-ai/flux/dev',
  method: 'POST',
  body: JSON.stringify({
    prompt: `Hero brand image: ${concept}. Cinematic, soft morning light.`,
    image_size: 'landscape_16_9',
  }),
});

const pitch = await agent.pay({
  url: 'https://mpp.t2000.ai/anthropic/v1/messages',
  method: 'POST',
  headers: { 'anthropic-version': '2023-06-01' },
  body: JSON.stringify({
    model: 'claude-sonnet-4-5',
    max_tokens: 512,
    messages: [{
      role: 'user',
      content: `Write a 60-second elevator pitch for: ${concept}. First person, confident, no jargon.`,
    }],
  }),
});

const voiceId = 'EXAVITQu4vr4xnSDxMaL'; // any ElevenLabs voice
const audio = await agent.pay({
  url: `https://mpp.t2000.ai/elevenlabs/v1/text-to-speech/${voiceId}`,
  method: 'POST',
  body: JSON.stringify({
    text: (pitch.body as { content: { text: string }[] }).content[0].text,
    model_id: 'eleven_turbo_v2',
  }),
});

// Binary endpoints return JSON { url, contentType, sizeBytes } — fetch the URL
// for the bytes. (The gateway hosts the artifact so audio never has to survive
// a JSON/text transport.) See Agent Payments → Binary responses.
const { url } = audio.body as { url: string };
const mp3 = await fetch(url).then((res) => res.arrayBuffer());
writeFileSync('./pitch.mp3', Buffer.from(mp3));
```

***

## Expected output

```
3 calls · ~$0.18 · ~18s · 0 taps
hero image (hosted URL) · pitch text · ./pitch.mp3
```

<Note>
  The image comes back as a hosted fal URL and the pitch as text — only the voiceover is written to disk above. Add `writeFileSync` for the others if you want local copies. The ElevenLabs step draws on the gateway's pooled voice quota; if it's exhausted the call returns an error (you still pay the micro-charge, surfaced truthfully).
</Note>

***

## Extend it

* Swap Flux Dev for **Flux Pro** (`/fal/fal-ai/flux-pro`, \$0.10) for higher-fidelity output
* Add **DeepL** (`/deepl/v1/translate`) to ship the pitch in 5 languages, then run each through ElevenLabs for localized voiceovers
* Swap Claude for **Gemini 2.5 Pro** (`/gemini/v1beta/models/gemini-2.5-pro`) for the pitch generation
* Drop the assets into Walrus storage and embed them in a landing page — that's the upcoming Audric Store flow
