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
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);