from magic_hour import Client
from os import getenv
client = Client(token=getenv("API_TOKEN"))
res = client.v1.ai_image_generator.generate(
image_count=1,
style={
"prompt": "Cool image",
"tool": "ai-anime-generator",
},
aspect_ratio="1:1",
model="default",
name="My Ai Image image",
resolution="auto",
wait_for_completion=True,
download_outputs=True,
download_directory="."
)import { Client } from "magic-hour";
const client = new Client({ token: process.env["API_TOKEN"]!! });
const res = await client.v1.aiImageGenerator.generate(
{
aspectRatio: "1:1",
imageCount: 1,
model: "default",
name: "My Ai Image image",
resolution: "auto",
style: { prompt: "Cool image", tool: "ai-anime-generator" },
},
{
waitForCompletion: true,
downloadOutputs: true,
downloadDirectory: ".",
},
);package main
import (
os "os"
sdk "github.com/magichourhq/magic-hour-go/client"
nullable "github.com/magichourhq/magic-hour-go/nullable"
ai_image_generator "github.com/magichourhq/magic-hour-go/resources/v1/ai_image_generator"
types "github.com/magichourhq/magic-hour-go/types"
)
func main() {
client := sdk.NewClient(
sdk.WithBearerAuth(os.Getenv("API_TOKEN")),
)
res, err := client.V1.AiImageGenerator.Create(ai_image_generator.CreateRequest{
AspectRatio: nullable.NewValue(types.V1AiImageGeneratorCreateBodyAspectRatioEnum11),
ImageCount: 1,
Model: nullable.NewValue(types.V1AiImageGeneratorCreateBodyModelEnumDefault),
Name: nullable.NewValue("My Ai Image image"),
Resolution: nullable.NewValue(types.V1AiImageGeneratorCreateBodyResolutionEnumAuto),
Style: types.V1AiImageGeneratorCreateBodyStyle{
Prompt: "Cool image",
Tool: nullable.NewValue(types.V1AiImageGeneratorCreateBodyStyleToolEnumAiAnimeGenerator),
},
})
}let client = magic_hour::Client::default()
.with_bearer_auth(&std::env::var("API_TOKEN").unwrap());
let res = client
.v1()
.ai_image_generator()
.create(magic_hour::resources::v1::ai_image_generator::CreateRequest {
aspect_ratio: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyAspectRatioEnum::Enum11,
),
image_count: 1,
model: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyModelEnum::Default,
),
name: Some("My Ai Image image".to_string()),
resolution: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyResolutionEnum::Auto,
),
style: magic_hour::models::V1AiImageGeneratorCreateBodyStyle {
prompt: "Cool image".to_string(),
tool: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyStyleToolEnum::AiAnimeGenerator,
),
..Default::default()
},
..Default::default()
})
.await;curl --request POST \
--url https://api.magichour.ai/v1/ai-image-generator \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"name": "My Ai Image image",
"image_count": 1,
"model": "default",
"aspect_ratio": "1:1",
"resolution": "auto",
"style": {
"prompt": "Cool image",
"tool": "ai-anime-generator"
}
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.magichour.ai/v1/ai-image-generator",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Ai Image image',
'image_count' => 1,
'model' => 'default',
'aspect_ratio' => '1:1',
'resolution' => 'auto',
'style' => [
'prompt' => 'Cool image',
'tool' => 'ai-anime-generator'
]
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"authorization: Bearer <token>",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://api.magichour.ai/v1/ai-image-generator")
.header("accept", "application/json")
.header("content-type", "application/json")
.header("authorization", "Bearer <token>")
.body("{\"name\":\"My Ai Image image\",\"image_count\":1,\"model\":\"default\",\"aspect_ratio\":\"1:1\",\"resolution\":\"auto\",\"style\":{\"prompt\":\"Cool image\",\"tool\":\"ai-anime-generator\"}}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.magichour.ai/v1/ai-image-generator")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image_count\": 1,\n \"style\": {\n \"prompt\": \"Cool image\",\n \"tool\": \"ai-anime-generator\"\n },\n \"name\": \"My Ai Image image\",\n \"model\": \"default\",\n \"aspect_ratio\": \"1:1\",\n \"resolution\": \"auto\"\n}"
response = http.request(request)
puts response.read_body{
"id": "cuid-example",
"credits_charged": 5
}{
"code": "invalid_request",
"message": "<string>"
}{
"code": "unauthorized",
"message": "<string>"
}{
"code": "insufficient_credits",
"message": "<string>"
}{
"code": "not_found",
"message": "<string>"
}{
"code": "unprocessable_entity",
"message": "<string>"
}{
"code": "internal_server_error",
"message": "<string>"
}AI Image Generator
Create an AI image with advanced model selection and quality controls.
from magic_hour import Client
from os import getenv
client = Client(token=getenv("API_TOKEN"))
res = client.v1.ai_image_generator.generate(
image_count=1,
style={
"prompt": "Cool image",
"tool": "ai-anime-generator",
},
aspect_ratio="1:1",
model="default",
name="My Ai Image image",
resolution="auto",
wait_for_completion=True,
download_outputs=True,
download_directory="."
)import { Client } from "magic-hour";
const client = new Client({ token: process.env["API_TOKEN"]!! });
const res = await client.v1.aiImageGenerator.generate(
{
aspectRatio: "1:1",
imageCount: 1,
model: "default",
name: "My Ai Image image",
resolution: "auto",
style: { prompt: "Cool image", tool: "ai-anime-generator" },
},
{
waitForCompletion: true,
downloadOutputs: true,
downloadDirectory: ".",
},
);package main
import (
os "os"
sdk "github.com/magichourhq/magic-hour-go/client"
nullable "github.com/magichourhq/magic-hour-go/nullable"
ai_image_generator "github.com/magichourhq/magic-hour-go/resources/v1/ai_image_generator"
types "github.com/magichourhq/magic-hour-go/types"
)
func main() {
client := sdk.NewClient(
sdk.WithBearerAuth(os.Getenv("API_TOKEN")),
)
res, err := client.V1.AiImageGenerator.Create(ai_image_generator.CreateRequest{
AspectRatio: nullable.NewValue(types.V1AiImageGeneratorCreateBodyAspectRatioEnum11),
ImageCount: 1,
Model: nullable.NewValue(types.V1AiImageGeneratorCreateBodyModelEnumDefault),
Name: nullable.NewValue("My Ai Image image"),
Resolution: nullable.NewValue(types.V1AiImageGeneratorCreateBodyResolutionEnumAuto),
Style: types.V1AiImageGeneratorCreateBodyStyle{
Prompt: "Cool image",
Tool: nullable.NewValue(types.V1AiImageGeneratorCreateBodyStyleToolEnumAiAnimeGenerator),
},
})
}let client = magic_hour::Client::default()
.with_bearer_auth(&std::env::var("API_TOKEN").unwrap());
let res = client
.v1()
.ai_image_generator()
.create(magic_hour::resources::v1::ai_image_generator::CreateRequest {
aspect_ratio: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyAspectRatioEnum::Enum11,
),
image_count: 1,
model: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyModelEnum::Default,
),
name: Some("My Ai Image image".to_string()),
resolution: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyResolutionEnum::Auto,
),
style: magic_hour::models::V1AiImageGeneratorCreateBodyStyle {
prompt: "Cool image".to_string(),
tool: Some(
magic_hour::models::V1AiImageGeneratorCreateBodyStyleToolEnum::AiAnimeGenerator,
),
..Default::default()
},
..Default::default()
})
.await;curl --request POST \
--url https://api.magichour.ai/v1/ai-image-generator \
--header 'accept: application/json' \
--header 'authorization: Bearer <token>' \
--header 'content-type: application/json' \
--data '
{
"name": "My Ai Image image",
"image_count": 1,
"model": "default",
"aspect_ratio": "1:1",
"resolution": "auto",
"style": {
"prompt": "Cool image",
"tool": "ai-anime-generator"
}
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.magichour.ai/v1/ai-image-generator",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Ai Image image',
'image_count' => 1,
'model' => 'default',
'aspect_ratio' => '1:1',
'resolution' => 'auto',
'style' => [
'prompt' => 'Cool image',
'tool' => 'ai-anime-generator'
]
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"authorization: Bearer <token>",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://api.magichour.ai/v1/ai-image-generator")
.header("accept", "application/json")
.header("content-type", "application/json")
.header("authorization", "Bearer <token>")
.body("{\"name\":\"My Ai Image image\",\"image_count\":1,\"model\":\"default\",\"aspect_ratio\":\"1:1\",\"resolution\":\"auto\",\"style\":{\"prompt\":\"Cool image\",\"tool\":\"ai-anime-generator\"}}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.magichour.ai/v1/ai-image-generator")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image_count\": 1,\n \"style\": {\n \"prompt\": \"Cool image\",\n \"tool\": \"ai-anime-generator\"\n },\n \"name\": \"My Ai Image image\",\n \"model\": \"default\",\n \"aspect_ratio\": \"1:1\",\n \"resolution\": \"auto\"\n}"
response = http.request(request)
puts response.read_body{
"id": "cuid-example",
"credits_charged": 5
}{
"code": "invalid_request",
"message": "<string>"
}{
"code": "unauthorized",
"message": "<string>"
}{
"code": "insufficient_credits",
"message": "<string>"
}{
"code": "not_found",
"message": "<string>"
}{
"code": "unprocessable_entity",
"message": "<string>"
}{
"code": "internal_server_error",
"message": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <api_key>, where <api_key> is your API key. To get your API key, go to Developer Hub and click "Create new API Key".
Body
Body
Number of images to generate. Maximum varies by model.
1 <= x <= 161
The art style to use for image generation.
Show child attributes
Show child attributes
Give your image a custom name for easy identification.
"My Ai Image image"
The AI model to use for image generation. Each model has different capabilities and costs.
Models:
default- Use the model we recommend, which will change over time. This is recommended unless you need a specific model. This is the default behavior.flux-2-klein- from 5 credits/image- Supported resolutions: 640px, 1k, 2k
- Available for tiers: free, creator, pro, business
- Image count allowed: 1
flux-schnell- from 5 credits/image- Supported resolutions: 640px, 1k, 2k
- Available for tiers: free, creator, pro, business
- Image count allowed: 1, 2, 3, 4
gpt-image-2- from 50 credits/image- Supported resolutions: 640px, 1k, 2k, 4k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 2, 3, 4
gpt-image-2.5-flare- from 100 credits/image- Supported resolutions: 640px, 1k, 2k, 4k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 2, 3, 4
krea-2- from 10 credits/image- Supported resolutions: 640px, 1k
- Available for tiers: free, creator, pro, business
- Image count allowed: 1
nano-banana- from 50 credits/image- Supported resolutions: 640px, 1k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 2, 3, 4
nano-banana-2- from 100 credits/image- Supported resolutions: 640px, 1k, 2k, 4k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 4, 9, 16
nano-banana-2-lite- from 50 credits/image- Supported resolutions: 640px, 1k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 2, 3, 4
nano-banana-pro- from 150 credits/image- Supported resolutions: 1k, 2k, 4k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 4, 9, 16
seedream-v4- from 40 credits/image- Supported resolutions: 640px, 1k, 2k, 4k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 2, 3, 4
seedream-v5-pro- from 75 credits/image- Supported resolutions: 640px, 1k, 2k
- Available for tiers: creator, pro, business
- Image count allowed: 1, 2, 3, 4
z-image-turbo- from 5 credits/image- Supported resolutions: 640px, 1k, 2k
- Available for tiers: free, creator, pro, business
- Image count allowed: 1, 2, 3, 4
Deprecated Enum Values:
seedream- Useseedream-v4instead.
default, nano-banana-2, gpt-image-2, gpt-image-2.5-flare, z-image-turbo, flux-2-klein, nano-banana-2-lite, krea-2, seedream-v4, seedream-v5-pro, nano-banana, nano-banana-pro, flux-schnell, seedream "default"
The aspect ratio of the output image(s). If not specified, defaults to 1:1 (square).
1:1, 16:9, 9:16 "1:1"
Maximum resolution (longest edge) for the output image.
Options:
640px— up to 640px1k— up to 1024px2k— up to 2048px4k— up to 4096pxauto— Deprecated. Mapped server-side from your subscription tier to the best matching resolution the model supports
Per-model support:
flux-2-klein- 640px, 1k, 2kflux-schnell- 640px, 1k, 2kgpt-image-2- 640px, 1k, 2k, 4kgpt-image-2.5-flare- 640px, 1k, 2k, 4kkrea-2- 640px, 1knano-banana- 640px, 1knano-banana-2- 640px, 1k, 2k, 4knano-banana-2-lite- 640px, 1knano-banana-pro- 1k, 2k, 4kseedream-v4- 640px, 1k, 2k, 4kseedream-v5-pro- 640px, 1k, 2kz-image-turbo- 640px, 1k, 2k
Note: Resolution availability depends on the model and your subscription tier.
auto, 640px, 1k, 2k, 4k "auto"
Response
Success
Success
Unique ID of the image. Use it with the Get image Project API to fetch status and downloads.
"cuid-example"
The amount of credits deducted from your account to generate the image. We charge credits right when the request is made.
If an error occurred while generating the image(s), credits will be refunded and this field will be updated to include the refund.
5
Was this page helpful?