Skip to main content

Decart

The Decart adapter provides access to Decart's image and video generation models.

Installation

npm i @decartai/tanstack-ai-adapter
pnpm add @decartai/tanstack-ai-adapter
yarn add @decartai/tanstack-ai-adapter
bun add @decartai/tanstack-ai-adapter

Basic Usage

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",
});

Basic Usage - Custom API Key

import { generateImage } from "@tanstack/ai";
import { createDecartImage } from "@decartai/tanstack-ai-adapter";

const adapter = createDecartImage("lucy-pro-t2i", process.env.DECART_API_KEY!);

const result = await generateImage({
  adapter,
  prompt: "A serene mountain landscape at sunset",
});

Configuration

import { createDecartImage, type DecartImageConfig } from "@decartai/tanstack-ai-adapter";

const config: Omit<DecartImageConfig, "apiKey"> = {
  baseUrl: "https://api.decart.ai", // Optional, for custom endpoints
};

const adapter = createDecartImage("lucy-pro-t2i", process.env.DECART_API_KEY!, config);

Image Generation

Generate images with lucy-pro-t2i:

import { generateImage } from "@tanstack/ai";
import { decartImage } from "@decartai/tanstack-ai-adapter";

const result = await generateImage({
  adapter: decartImage("lucy-pro-t2i"),
  prompt: "A futuristic cityscape at night",
});

console.log(result.images[0]?.b64Json);

Image Model Options

import { generateImage } from "@tanstack/ai";
import { decartImage } from "@decartai/tanstack-ai-adapter";

const result = await generateImage({
  adapter: decartImage("lucy-pro-t2i"),
  prompt: "A portrait of a robot artist",
  modelOptions: {
    resolution: "720p",
    orientation: "portrait",
    seed: 42,
  },
});
OptionTypeDefaultDescription
resolution"720p""720p"Output resolution
orientation"portrait" | "landscape""landscape"Image orientation
seednumber-Seed for reproducible generation

Video Generation

Video generation uses an async job/polling architecture.

Creating a Video Job

import { generateVideo } from "@tanstack/ai";
import { decartVideo } from "@decartai/tanstack-ai-adapter";

const { jobId } = await generateVideo({
  adapter: decartVideo("lucy-pro-t2v"),
  prompt: "A cat playing with a ball of yarn",
});

console.log("Job started:", jobId);

Polling for Status

import { getVideoJobStatus } from "@tanstack/ai";
import { decartVideo } from "@decartai/tanstack-ai-adapter";

const jobId = "example-job-id";
const status = await getVideoJobStatus({
  adapter: decartVideo("lucy-pro-t2v"),
  jobId,
});

console.log("Status:", status.status); // "pending" | "processing" | "completed" | "failed"

if (status.status === "completed" && status.url) {
  console.log("Video URL:", status.url);
}

Complete Example with Polling

import { generateVideo, getVideoJobStatus } from "@tanstack/ai";
import { decartVideo } from "@decartai/tanstack-ai-adapter";

async function createVideo(prompt: string) {
  const adapter = decartVideo("lucy-pro-t2v");

  // Create the job
  const { jobId } = await generateVideo({ adapter, prompt });
  console.log("Job created:", jobId);

  // Poll for completion
  let status = "pending";
  while (status !== "completed" && status !== "failed") {
    await new Promise((resolve) => setTimeout(resolve, 5000));

    const result = await getVideoJobStatus({ adapter, jobId });
    status = result.status;
    console.log(`Status: ${status}`);

    if (result.status === "failed") {
      throw new Error("Video generation failed");
    }

    if (result.status === "completed" && result.url) {
      return result.url;
    }
  }
}

const videoUrl = await createVideo("A drone shot over a tropical beach");

Video Model Options

import { generateVideo } from "@tanstack/ai";
import { decartVideo } from "@decartai/tanstack-ai-adapter";

const { jobId } = await generateVideo({
  adapter: decartVideo("lucy-pro-t2v"),
  prompt: "A timelapse of a blooming flower",
  modelOptions: {
    resolution: "720p",
    orientation: "landscape",
    seed: 42,
  },
});
OptionTypeDefaultDescription
resolution"720p" | "480p""720p"Output resolution
orientation"portrait" | "landscape""landscape"Video orientation
seednumber-Seed for reproducible generation

Environment Variables

Set your API key in environment variables:

DECART_API_KEY=your-api-key-here

Getting an API Key

  1. Go to Decart Platform
  2. Create an account and generate an API key
  3. Add it to your environment variables

API Reference

decartImage(model, config?)

Creates a Decart image adapter using environment variables.

Parameters:

  • model - Model name ("lucy-pro-t2i")
  • config.baseUrl? - Custom base URL (optional)

Returns: A Decart image adapter instance.

createDecartImage(model, apiKey, config?)

Creates a Decart image adapter with an explicit API key.

Parameters:

  • model - Model name ("lucy-pro-t2i")
  • apiKey - Your Decart API key
  • config.baseUrl? - Custom base URL (optional)

Returns: A Decart image adapter instance.

decartVideo(model, config?)

Creates a Decart video adapter using environment variables.

Parameters:

  • model - Model name ("lucy-pro-t2v")
  • config.baseUrl? - Custom base URL (optional)

Returns: A Decart video adapter instance.

createDecartVideo(model, apiKey, config?)

Creates a Decart video adapter with an explicit API key.

Parameters:

  • model - Model name ("lucy-pro-t2v")
  • apiKey - Your Decart API key
  • config.baseUrl? - Custom base URL (optional)

Returns: A Decart video adapter instance.

Next Steps