Image-to-video is the workhorse for adult and NSFW pipelines, because it keeps a consistent subject: you start from a still you already have and the model animates it. With Api18.dev there is no content filter on the prompt, so the clips you can make match the images you can make.

How it works#

You pass a public image URL (the frame to animate) and a prompt describing the motion, plus optional resolution, duration and seed. The model returns a clip at data[0].url.

const res = await fetch("https://api18.dev/v1/generate?wait=true", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.API18_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "<image-to-video-model-id>",
    image: "https://your-host.com/frame.jpg", // public URL
    prompt: "gentle camera push-in, soft motion",
    duration: 5,
  }),
});
const job = await res.json();
console.log(job.data[0].url); // the generated video
The image must be a public URL the server can fetch (JPEG/PNG/WEBP/BMP, up to 10MB). Local paths and data: URIs are rejected — host the file first, then pass its URL.

A clean adult/NSFW workflow#

  1. Generate or supply a base image. You can make one with the uncensored image API and host the result.
  2. Host that image at a public URL (your storage/CDN). Make sure it’s reachable without auth.
  3. Call image-to-video with the URL and a motion prompt — keep the motion subtle for natural results.
  4. Download the returned clip; outputs are temporary.

Motion-prompt tips#

  • Describe one primary motion (push-in, sway, hair/fabric movement), not five.
  • Mention camera behavior separately from subject motion.
  • Shorter durations animate more reliably; scale up once you like the look.
  • Fix the seed to compare prompt tweaks fairly.

Image-to-video vs. text-to-video#

  • Image-to-video — best when you need a specific, consistent subject (a character, a product, a generated frame).
  • Text-to-video — best when you’re creating a scene from scratch with no source frame.

Pricing & getting started#

Billed per second (or per run, depending on the model) in USD; failed jobs are refunded. Test free with $10 welcome credit in the playground, then fund with USDT on Solana or Tron. Full parameter lists are on the models page.