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.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.
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.
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.
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.
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.
Failures signal a condition you can catch by class with tryCatch():
saymaker_auth — no key, or the key is wrong or deletedsaymaker_quota — the account is out of creditssaymaker_plan — that model needs a paid plan or a credit packsaymaker_busy — another run on this account is still rendering; free accounts run one at a timesaymaker_rejected — the content filter or the model refused the prompt; rewrite it rather than retryingThe 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.