import Foundationlet url = URL(string: "https://api.apimart.ai/v1/images/generations")!let payload: [String: Any] = [ "model": "seedream-5-0-flash", "prompt": "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", "size": "16:9", "resolution": "2K"]var request = URLRequest(url: url)request.httpMethod = "POST"request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")request.setValue("application/json", forHTTPHeaderField: "Content-Type")request.httpBody = try? JSONSerialization.data(withJSONObject: payload)let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let data = data, let responseString = String(data: data, encoding: .utf8) { print(responseString) }}task.resume()
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;class Program{ static async Task Main(string[] args) { var url = "https://api.apimart.ai/v1/images/generations"; var payload = @"{ ""model"": ""seedream-5-0-flash"", ""prompt"": ""Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen"", ""size"": ""16:9"", ""resolution"": ""2K"" }"; using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); }}
(* Requires cohttp and yojson libraries *)open Lwtopen Cohttpopen Cohttp_lwt_unixlet url = "https://api.apimart.ai/v1/images/generations"let payload = {|{ "model": "seedream-5-0-flash", "prompt": "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", "size": "16:9", "resolution": "2K"}|}let () = let headers = Header.init () |> fun h -> Header.add h "Authorization" "Bearer <token>" |> fun h -> Header.add h "Content-Type" "application/json" in let body = Cohttp_lwt.Body.of_string payload in let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) -> body |> Cohttp_lwt.Body.to_string >|= fun body_str -> print_endline body_str in Lwt_main.run response
import 'dart:convert';import 'package:http/http.dart' as http;void main() async { final url = Uri.parse('https://api.apimart.ai/v1/images/generations'); final payload = { 'model': 'seedream-5-0-flash', 'prompt': 'Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen', 'size': '16:9', 'resolution': '2K' }; final response = await http.post( url, headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json', }, body: jsonEncode(payload), ); print(response.body);}
library(httr)library(jsonlite)url <- "https://api.apimart.ai/v1/images/generations"payload <- list( model = "seedream-5-0-flash", prompt = "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", size = "16:9", resolution = "2K")response <- POST( url, add_headers( Authorization = "Bearer <token>", `Content-Type` = "application/json" ), body = toJSON(payload, auto_unbox = TRUE), encode = "raw")cat(content(response, "text"))
import Foundationlet url = URL(string: "https://api.apimart.ai/v1/images/generations")!let payload: [String: Any] = [ "model": "seedream-5-0-flash", "prompt": "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", "size": "16:9", "resolution": "2K"]var request = URLRequest(url: url)request.httpMethod = "POST"request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")request.setValue("application/json", forHTTPHeaderField: "Content-Type")request.httpBody = try? JSONSerialization.data(withJSONObject: payload)let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let data = data, let responseString = String(data: data, encoding: .utf8) { print(responseString) }}task.resume()
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;class Program{ static async Task Main(string[] args) { var url = "https://api.apimart.ai/v1/images/generations"; var payload = @"{ ""model"": ""seedream-5-0-flash"", ""prompt"": ""Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen"", ""size"": ""16:9"", ""resolution"": ""2K"" }"; using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); }}
(* Requires cohttp and yojson libraries *)open Lwtopen Cohttpopen Cohttp_lwt_unixlet url = "https://api.apimart.ai/v1/images/generations"let payload = {|{ "model": "seedream-5-0-flash", "prompt": "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", "size": "16:9", "resolution": "2K"}|}let () = let headers = Header.init () |> fun h -> Header.add h "Authorization" "Bearer <token>" |> fun h -> Header.add h "Content-Type" "application/json" in let body = Cohttp_lwt.Body.of_string payload in let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) -> body |> Cohttp_lwt.Body.to_string >|= fun body_str -> print_endline body_str in Lwt_main.run response
import 'dart:convert';import 'package:http/http.dart' as http;void main() async { final url = Uri.parse('https://api.apimart.ai/v1/images/generations'); final payload = { 'model': 'seedream-5-0-flash', 'prompt': 'Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen', 'size': '16:9', 'resolution': '2K' }; final response = await http.post( url, headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json', }, body: jsonEncode(payload), ); print(response.body);}
library(httr)library(jsonlite)url <- "https://api.apimart.ai/v1/images/generations"payload <- list( model = "seedream-5-0-flash", prompt = "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", size = "16:9", resolution = "2K")response <- POST( url, add_headers( Authorization = "Bearer <token>", `Content-Type` = "application/json" ), body = toJSON(payload, auto_unbox = TRUE), encode = "raw")cat(content(response, "text"))
import Foundationlet url = URL(string: "https://api.apimart.ai/v1/images/generations")!let payload: [String: Any] = [ "model": "seedream-5-0-flash", "prompt": "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", "size": "16:9", "resolution": "2K"]var request = URLRequest(url: url)request.httpMethod = "POST"request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")request.setValue("application/json", forHTTPHeaderField: "Content-Type")request.httpBody = try? JSONSerialization.data(withJSONObject: payload)let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let data = data, let responseString = String(data: data, encoding: .utf8) { print(responseString) }}task.resume()
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;class Program{ static async Task Main(string[] args) { var url = "https://api.apimart.ai/v1/images/generations"; var payload = @"{ ""model"": ""seedream-5-0-flash"", ""prompt"": ""Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen"", ""size"": ""16:9"", ""resolution"": ""2K"" }"; using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); }}
(* Requires cohttp and yojson libraries *)open Lwtopen Cohttpopen Cohttp_lwt_unixlet url = "https://api.apimart.ai/v1/images/generations"let payload = {|{ "model": "seedream-5-0-flash", "prompt": "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", "size": "16:9", "resolution": "2K"}|}let () = let headers = Header.init () |> fun h -> Header.add h "Authorization" "Bearer <token>" |> fun h -> Header.add h "Content-Type" "application/json" in let body = Cohttp_lwt.Body.of_string payload in let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) -> body |> Cohttp_lwt.Body.to_string >|= fun body_str -> print_endline body_str in Lwt_main.run response
import 'dart:convert';import 'package:http/http.dart' as http;void main() async { final url = Uri.parse('https://api.apimart.ai/v1/images/generations'); final payload = { 'model': 'seedream-5-0-flash', 'prompt': 'Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen', 'size': '16:9', 'resolution': '2K' }; final response = await http.post( url, headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json', }, body: jsonEncode(payload), ); print(response.body);}
library(httr)library(jsonlite)url <- "https://api.apimart.ai/v1/images/generations"payload <- list( model = "seedream-5-0-flash", prompt = "Cyberpunk-Stadtansicht bei Nacht, Neonlichter spiegeln sich auf nassen Straßen", size = "16:9", resolution = "2K")response <- POST( url, add_headers( Authorization = "Bearer <token>", `Content-Type` = "application/json" ), body = toJSON(payload, auto_unbox = TRUE), encode = "raw")cat(content(response, "text"))
Alle API-Endpunkte erfordern eine Bearer-Token-AuthentifizierungAPI-Key abrufen:Besuchen Sie die API-Key-Verwaltungsseite, um Ihren API-Key zu erhaltenFügen Sie ihn dem Request-Header hinzu:
Authorization: Bearer YOUR_API_KEY
Einzelbildmodell: seedream-5-0-flash erzeugt pro Anfrage nur 1 Bild (außer bei der Ebenenzerlegung). Die folgenden Parameter werden abgelehnt (HTTP 400, kein Task, keine Kosten):
n > 1
sequential_image_generation (Gruppengenerierung wird nicht unterstützt)
stream (Streaming wird nicht unterstützt)
tools (Websuche wird nicht unterstützt)
mehr als 10 Einträge in image_urls
Interaktive Bearbeitung
Verwenden Sie <point>-/<bbox>-Koordinaten im Prompt oder laden Sie ein Bild mit handgezeichneten Markierungen hoch, um Bearbeitungsbereiche präzise festzulegen.
Punktkoordinaten: <point>x y</point> (geben einen einzelnen Punkt an; das Modell bestimmt den Wirkungsbereich)
Begrenzungsrahmen-Koordinaten: <bbox>x1 y1 x2 y2</bbox> (geben die Koordinaten oben links und unten rechts an, um die Größe des Bearbeitungsbereichs präzise zu steuern)
Ebenenzerlegung
Zerlegen Sie ein Bild in ein Basisbild und bis zu 16 transparente PNG-Ebenen samt Positions- und Stapelinformationen.
Textbeschreibung für die BildgenerierungBei layer_decomposition: true optional; wird der Prompt weggelassen, erkennt und trennt das Modell die Hauptelemente des Bildes automatisch.Neben Chinesisch und Englisch unterstützt die native Texterzeugung Russisch, Arabisch, Filipino, Thailändisch, Türkisch, Koreanisch, Malaiisch, Spanisch, Portugiesisch, Indonesisch, Französisch, Deutsch, Vietnamesisch und Japanisch.
Tipp: Bleiben Sie bei maximal 600 englischen Wörtern; zu lange Beschreibungen können Detailverlust verursachen.
Die Stufe kann direkt in size oder über das API-Mart-Erweiterungsfeld resolution angegeben werden:
{ "size": "2K" }
{ "resolution": "2K" }
Beide Schreibweisen sind gleichwertig. Wenn nur eine Stufe angegeben wird, beschreiben Sie das gewünschte Layout im Prompt (z. B. “Poster im Hochformat” oder “Titelbild im Querformat”) und lassen Sie das Modell das Seitenverhältnis wählen.
transparent ist nur für Bild-zu-Bild-Anfragen mit genau einem Eingabebild verfügbar, das bereits einen Alphakanal besitzt; zusätzlich ist output_format: "png" erforderlich.
Legt fest, ob das Bild in Ebenen zerlegt wird. Bei Aktivierung gibt das Modell ein Basisbild und bis zu 16 PNG-Ebenen mit Alphakanal zurück.Es ist genau ein PNG- oder JPEG-Bild erforderlich. Es muss insgesamt [262144, 36000000] Pixel enthalten und darf höchstens 30 MB groß sein. size akzeptiert nur 1K, 1.5K, 2K oder auto und verwendet standardmäßig auto. output_format steuert nur das Format des Basisbilds; zerlegte Ebenen sind immer PNG.
Sie können auch auf 0–1000 normalisierte <bbox>-Koordinaten verwenden, um die zu extrahierenden Elemente präzise anzugeben:
{ "model": "seedream-5-0-flash", "prompt": "Zerlege das Bild in präzise Ebenen. Der Text befindet sich bei <bbox>180 64 812 198</bbox>; der Papagei bei <bbox>347 305 642 997</bbox>.", "image_urls": ["https://example.com/poster.png"], "layer_decomposition": true}
Beschreiben Sie handgezeichnete Markierungen im Bild in natürlicher Sprache:
{ "model": "seedream-5-0-flash", "prompt": "Bearbeite das Bild entsprechend der Skizze. Füge im markierten Bereich unten links einen Stapel Zeitschriften und im markierten Bereich rechts eine Tasse Kaffee hinzu. Entferne alle Skizzenlinien und behalte die Komposition bei.", "image_urls": ["https://example.com/sketch.png"], "size": "2K", "output_format": "png"}
Oder geben Sie Positionen mit <point> / <bbox> präzise an:
{ "model": "seedream-5-0-flash", "prompt": "Platziere das Motiv aus Bild 1 bei <bbox>179 283 796 986</bbox> in Bild 2 an Position <bbox>118 331 933 871</bbox>.", "image_urls": [ "https://example.com/a.png", "https://example.com/b.png" ]}
{ "model": "seedream-5-0-flash", "prompt": "Verwandle den Papagei in einen Pfau und erhalte den transparenten Hintergrund", "image_urls": ["https://cdn.example.com/images/layer.png"], "background": "transparent", "output_format": "png", "size": "2K"}
Vollständiges Beispiel: Task senden und Bild abrufen
Das folgende Skript zeigt den vollständigen Ablauf: einen asynchronen Task senden, den Status abfragen, Fehlerzustände behandeln und die finale Bild-URL auslesen. Ersetzen Sie vor der Ausführung YOUR_API_KEY.
Zurückgegebene Bilder werden in einen von der Plattform verwalteten Speicher gespiegelt. Laden Sie sie dennoch zeitnah herunter und speichern Sie sie dauerhaft in Ihrem eigenen System; behandeln Sie die Ergebnis-URL nicht als permanenten Speicher.
Komposition aus mehreren Bildern (bis zu 10 Referenzen)
curl -X POST "https://api.apimart.ai/v1/images/generations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "seedream-5-0-flash", "prompt": "Setze die Person aus Bild 1 in die Szene aus Bild 2 und vereinheitliche die Beleuchtung auf Abenddämmerung", "image_urls": [ "https://example.com/person.jpg", "https://example.com/scene.jpg" ], "resolution": "1.5K", "size": "16:9", "output_format": "png" }'
Setzen Sie die Ebenen in aufsteigender z_index-Reihenfolge zusammen. Für die Rekonstruktion auf dem Ausgabe-Basisbild mit absoluten Koordinaten gilt:
x = lefty = topw = right - lefth = bottom - top
Verwenden Sie für die Rekonstruktion auf einer beliebigen W × H-Zeichenfläche normalisierte Koordinaten:
x = left / 1000 × Wy = top / 1000 × Hw = (right - left) / 1000 × Wh = (bottom - top) / 1000 × H
Die Ebenenzerlegung wird pro Bild abgerechnet. Beim Senden des Tasks werden bis zu 17 Bilder vorautorisiert. Nach Abschluss wird jede Ausgabe anhand ihrer tatsächlichen Pixelzahl eingestuft und einzeln abgerechnet; eine überschüssige Vorautorisierung wird automatisch erstattet. Ihr Guthaben muss die Vorautorisierung für 17 Bilder decken; size: "auto" wird in der 2K-Stufe vorautorisiert.
Vorautorisierung und Abrechnung der Ebenenzerlegung
Da Anzahl und Abmessungen der Ebenen beim Senden des Tasks noch unbekannt sind, erfolgt die Vorautorisierung nach konservativen Regeln anhand der Anfrage:
Exakte Pixel: Einstufung nach der angeforderten Pixelfläche.
1K / 1.5K: Vorautorisierung in der 1K-Stufe.
2K: Vorautorisierung in der 2K-Stufe.
auto: kann bis zu 2K ausgeben und wird daher in der 2K-Stufe vorautorisiert.
Nach Abschluss werden Basisbild und jede tatsächliche Ebene anhand ihrer realen Pixelfläche einzeln eingestuft und summiert. Eine überschüssige Vorautorisierung wird automatisch erstattet. Ebenen sind meist deutlich kleiner als das Basisbild, sodass selbst ein in der 2K-Stufe vorautorisierter Task letztlich vollständig in der 1K-Stufe abgerechnet werden kann.
Beispiel: Eine 1080×1080-Eingabe wird in 10 Bilder zerlegt. Der Task wird als 17 Bilder × 2K-Stufe vorautorisiert. Wenn alle 10 finalen Bilder höchstens 2,61 Millionen Pixel enthalten, erfolgt die Abrechnung als 10 Bilder × 1K-Stufe; das verbleibende Guthaben wird automatisch erstattet.
Weder 1K / 1.5K / 2K / auto noch ein unterstütztes Seitenverhältnis oder gültige Pixelmaße → 400
Exakte-Pixel-Gesamt außerhalb des Bereichs
Muss in [921600, 4624220] liegen
Exakte-Pixel-Verhältnis außerhalb des Bereichs
Muss in [1/16, 16] liegen
n > 1 / Parameter für Bildgruppen
Vom Einzelbildmodell abgelehnt
Mehr als 10 Referenzbilder
Rejected
Ebenenzerlegung ohne Bild oder mit mehreren Bildern
Genau ein Bild ist erforderlich
Ebenenzerlegung mit Seitenverhältnis oder exakten Pixeln
size unterstützt nur 1K / 1.5K / 2K / auto
Transparenter Hintergrund bei Text-zu-Bild oder mehreren Eingaben
Genau ein Eingabebild mit Alphakanal ist erforderlich
Transparenter Hintergrund mit JPEG
Setzen Sie output_format: "png"
stream / tools
Von diesem Modell nicht unterstützt; gibt 400 zurück
Ungültiger Prompt-Optimierungsmodus
Nur standard wird unterstützt
⏱️ Langsamere Generierung: ca. 90 s für 1K, ca. 160 s für 2K (Qualität hat Vorrang). Fragen Sie den Task-Status alle 5–10 Sekunden ab und setzen Sie das Client-Timeout auf 5 Minuten. Speichern Sie erzeugte Ergebnisse zeitnah.