saymaker (R)

Generate images and video on SayMaker from your own code: one API key runs Veo 3.1, Kling 3.0, Seedance 2.0, MiniMax H3, Nano Banana 2, GPT Image 2.5, Seedream 5.0 and the rest of the shelf on your own credits.

library(saymaker)

url  <- saymaker_generate("a paper-cut layered mountain range at dusk")
clip <- saymaker_generate_video("a paper boat drifting down a rain gutter, low angle")

Each call waits for the run and returns the URL of the finished file. Runs on a free account wait in a queue before they start, and the wait grows with each run of the day; a paid plan starts at once. The default timeouts cover the longest wait.

Install

install.packages("saymaker", repos = c("https://hanshs474.r-universe.dev", "https://cloud.r-project.org"))

Imports curl and jsonlite. Set SAYMAKER_API_KEY or pass api_key.

API key

Sign up on saymaker.ai (new accounts get sign-up credits), create a key at saymaker.ai/settings/apikeys, then pass it or export it:

export SAYMAKER_API_KEY=sk-...

A key runs on your account exactly like the site does: same models, same credit prices, same plan, and every run lands in your library at saymaker.ai/history.

Images

saymaker_generate("isometric diorama of a ramen shop at night", aspect_ratio = "16:9")
saymaker_generate("product shot of a glass perfume bottle on wet slate", model = "gpt-image-2-5-flare")

The default model is saymaker-image-v1, the cheapest text-to-image run. Pass a model id for nano-banana-2, gpt-image-2-5-flare, seedream-5-pro, qwen-image-3-pro and the rest; see the image models.

Editing a photo

Pass an image URL and the prompt describes the change rather than the picture:

saymaker_generate(
  "change the jacket to dark green, keep the face, pose and background exactly as they are",
  image_url = "https://example.com/portrait.jpg"
)

Naming what must stay is what decides whether the edit holds. Prompts that only name the change tend to drift the whole picture.

Video

saymaker_generate_video("a fox trotting through fresh snow at dawn, tracking shot", duration = 6)
saymaker_generate_video("the camera slowly orbits the statue", image_url = "https://example.com/statue.jpg")
saymaker_generate_video("a street drummer in the rain", model = "veo-3-1", resolution = "1080p")

The default model is minimax-h3-fast, the one a free account can run (480p or 768p, 4 to 15 seconds). Veo 3.1, Kling 3.0, Seedance 2.0 and the other video models need a plan or a credit pack; see pricing. Each model's options are on its page: Veo 3.1, Kling 3.0, Seedance 2.0.

Errors worth catching

Failures signal a condition you can catch by class with tryCatch():

The API answers refusals with HTTP 200 and an error code in the body, so a client that only checks the status code reports a refusal as success. This one reads the body.

Free-account output carries a watermark; a paid plan returns the clean file.

MIT licensed. Made by SayMaker, the AI video generator agent.