madeAPI
Log in
Explore/VEED Fabric 1.0
VideoPriced by input

VEED Fabric 1.0

VEED Fabric 1.0 animates a single photo to speak any audio track — face, mouth, and subtle head motion are generated to match the voice, producing a talking video as long as the audio.

View docsModel guide
// Node.js. Running this creates one paid generation.
import { randomUUID } from 'node:crypto';
const base = "https://www.made.app/api";
const headers = {
  Authorization: `Bearer ${process.env.MADE_API_KEY}`,
  'Content-Type': 'application/json',
};
const input = {
  "model": "veed_fabric",
  "resolution": "480p",
  "medias": [
    {
      "value": "https://example.com/reference.jpg",
      "role": "image"
    },
    {
      "value": "https://example.com/reference.mp3",
      "role": "audio"
    }
  ]
};

async function api(path, body) {
  const response = await fetch(base + path, {
    method: body ? 'POST' : 'GET', headers,
    ...(body && { body: JSON.stringify(body) }),
  });
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

const { cost } = await api('/v1/cost', input);
console.log('Quoted cents:', cost.customerCostCents);
// Preserve this request ID when retrying a submission.
const requestId = randomUUID();
let job = await api('/v1/generations', {
  ...input, request_id: requestId,
  max_cost_cents: cost.customerCostCents,
});
console.log('Request:', job.id);
while (!['succeeded', 'failed', 'canceled'].includes(job.status)) {
  await new Promise(resolve => setTimeout(resolve, 3000));
  job = await api('/v1/generations/' + job.id);
}
if (job.status !== 'succeeded') throw new Error(JSON.stringify(job.error || job.status));
console.log(job.result.assets);

Input

20 MB maximum

10 MB maximum

Sign in to generate

Uses your credits. See the exact price before generating.

Result

Example
Photo to talking video at 720p

Price

Priced by input. Add your reference media to get an exact quote. Check the exact cost for your settings before generating. Failed generations are refunded. Full price sheet.