The Decart adapter for TanStack AI adds image and video generation to any TanStack project.
Prerequisites
Installation
Install both the Decart adapter and TanStack AI:
npm install @decartai/tanstack-ai-adapter @tanstack/ai
Setup
Set your Decart API key as an environment variable:
export DECART_API_KEY="your-api-key"
Get your API key from platform.decart.ai. See authentication for details.
Or pass your API key directly when creating adapters:
import { createDecartImage } from '@decartai/tanstack-ai-adapter';
const adapter = createDecartImage('lucy-pro-t2i', 'your-api-key');
Image generation
Generate images with generateImage() and the decartImage() adapter:
import { generateImage } from '@tanstack/ai';
import { decartImage } from '@decartai/tanstack-ai-adapter';
const result = await generateImage({
adapter: decartImage('lucy-pro-t2i'),
prompt: 'A serene mountain landscape at sunset, cinematic lighting',
});
console.log(result.images[0].b64Json); // Base64-encoded image data
With explicit API key
Use createDecartImage() to pass your API key directly:
import { generateImage } from '@tanstack/ai';
import { createDecartImage } from '@decartai/tanstack-ai-adapter';
const result = await generateImage({
adapter: createDecartImage('lucy-pro-t2i', 'your-api-key'),
prompt: 'A serene mountain landscape at sunset, cinematic lighting',
});
Video generation
Video generation uses an async job and polling pattern — you submit a job, then poll for the result.
Unlike generateImage(), video generation is asynchronous. You submit a generation job with generateVideo(), then poll its status with getVideoJobStatus() until it completes.
import { setTimeout } from 'node:timers/promises';
import { generateVideo, getVideoJobStatus } from '@tanstack/ai';
import { decartVideo } from '@decartai/tanstack-ai-adapter';
const { jobId } = await generateVideo({
adapter: decartVideo('lucy-pro-t2v'),
prompt: 'A cat walking through a miniature lego city',
});
let videoUrl: string | undefined;
while (true) {
const status = await getVideoJobStatus({
adapter: decartVideo('lucy-pro-t2v'),
jobId,
});
if (status.status === 'failed') {
throw new Error('Video generation failed');
}
if (status.status === 'completed') {
videoUrl = status.url;
break;
}
await setTimeout(2000);
}
console.log('Video ready:', videoUrl);
Models
| Model | Type | Description |
|---|
lucy-pro-t2i | Text-to-image | High-quality image generation |
lucy-pro-t2v | Text-to-video | Video generation from text prompts |
Options
Seed value for reproducible results.
Output resolution. Defaults to 720p.
Next steps