Skip to content

Get a generation

client.Generations.Get(ctx, generationID) (*Generation, error)
GET/generations/{generation_id}

Poll for generation status and output. On completion, the response includes presigned URLs to download the generated images. When usage reporting is enabled, usage.credits_charged carries the credits actually charged once billing settles, which can be after the generation reaches a terminal state. Poll with backoff up to a cutoff you choose; some generations keep a null charge permanently.

Parameters
generationID string
format: uuid
Returns
type Generation struct{…}

Generation status and output

ID string

Generation identifier

format: uuid
CreatedAt string

Creation timestamp

Model Model

Model used

One of the following:
const ModelUni1 Model = "uni-1"
const ModelUni1Max Model = "uni-1-max"
const ModelRay3_2 Model = "ray-3.2"
State GenerationState

Current state of the generation

One of the following:
const GenerationStateQueued GenerationState = "queued"
const GenerationStateProcessing GenerationState = "processing"
const GenerationStateCompleted GenerationState = "completed"
const GenerationStateFailed GenerationState = "failed"
Type GenerationType

The kind of generation to perform

One of the following:
const GenerationTypeImage GenerationType = "image"
const GenerationTypeImageEdit GenerationType = "image_edit"
const GenerationTypeVideo GenerationType = "video"
const GenerationTypeVideoEdit GenerationType = "video_edit"
const GenerationTypeVideoReframe GenerationType = "video_reframe"
const GenerationTypeLayering GenerationType = "layering"
FailureCode GenerationFailureCode
optional

Machine-readable failure code for programmatic handling

One of the following:
const GenerationFailureCodeContentModerated GenerationFailureCode = "content_moderated"
const GenerationFailureCodeGenerationFailed GenerationFailureCode = "generation_failed"
const GenerationFailureCodeBudgetExhausted GenerationFailureCode = "budget_exhausted"
const GenerationFailureCodeOutputNotFound GenerationFailureCode = "output_not_found"
const GenerationFailureCodeImageTooLarge GenerationFailureCode = "image_too_large"
const GenerationFailureCodeUnsupportedFormat GenerationFailureCode = "unsupported_format"
const GenerationFailureCodeCorruptInput GenerationFailureCode = "corrupt_input"
const GenerationFailureCodeInvalidRequest GenerationFailureCode = "invalid_request"
const GenerationFailureCodeRateLimited GenerationFailureCode = "rate_limited"
FailureReason string
optional

Human-readable failure description

Output []GenerationOutput
optional

Generated outputs (populated on completion)

Type string

Media type (e.g. image, video)

URL string

Presigned URL (1hr expiry)

format: uri
Layer GenerationOutputLayer
optional

Per-layer semantics for a type=layering output

AlphaHint string

Edge treatment of the layer's transparency — soft (hair/fur/glass), hard (solid edges), or none (the opaque background)

Description string

Complete-element caption for the layer's content

Index int64

Layer position, front-to-back; the last layer is the background

Label string

Short (1-2 word) layer name

Bounds GenerationOutputLayerBounds
optional

Where a layer's returned pixels sit inside the full composite frame. Layer images are cropped to their visible-alpha bounding box, so layers of one stack have differing pixel dimensions. Composite onto a transparent canvas_width x canvas_height image by pasting each layer at (x, y), iterating the output list in reverse (back-to-front), to reconstruct the source frame.

CanvasHeight int64

Height of the full composite canvas the layers reassemble into

CanvasWidth int64

Width of the full composite canvas the layers reassemble into

Height int64

Pixel height of the returned layer image

Width int64

Pixel width of the returned layer image

X int64

Left offset of this layer's pixels within the composite canvas

Y int64

Top offset of this layer's pixels within the composite canvas

ContainsText bool
optional

Whether the layer was planned as typeset text (a headline, caption, or label) rather than an image element. Null when not reported for this generation.

Text GenerationOutputLayerText
optional

The text on one live-text layer, as a string plus how it is styled. Placement is the owning layer's bounds — the text fills that box.

Content string

The text as shown, preserving capitalization; one line per line (newline-separated)

Decorated bool
optional

True when the lettering is ornamental (outlines, patterned fills, bevels, drop shadows), so plain typeset text will not reproduce its look.

Font GenerationOutputLayerTextFont
optional

Described letterform traits of a text layer — enough to pick a matching font.

Category GenerationOutputLayerTextFontCategory

Letterform style

One of the following:
const GenerationOutputLayerTextFontCategorySansSerif GenerationOutputLayerTextFontCategory = "sans serif"
const GenerationOutputLayerTextFontCategorySerif GenerationOutputLayerTextFontCategory = "serif"
const GenerationOutputLayerTextFontCategorySlabSerif GenerationOutputLayerTextFontCategory = "slab serif"
const GenerationOutputLayerTextFontCategoryDisplaySans GenerationOutputLayerTextFontCategory = "display sans"
const GenerationOutputLayerTextFontCategoryDisplaySerif GenerationOutputLayerTextFontCategory = "display serif"
const GenerationOutputLayerTextFontCategoryDisplaySlab GenerationOutputLayerTextFontCategory = "display slab"
const GenerationOutputLayerTextFontCategoryDisplayDecorative GenerationOutputLayerTextFontCategory = "display decorative"
const GenerationOutputLayerTextFontCategoryHandwriting GenerationOutputLayerTextFontCategory = "handwriting"
const GenerationOutputLayerTextFontCategoryMonospace GenerationOutputLayerTextFontCategory = "monospace"
Families []string

Up to three Google Fonts family names that resemble the lettering, closest first. Empty when none of the offered families fit.

Italic bool

Whether the letters are slanted or cursive

Weight GenerationOutputLayerTextFontWeight

Stroke weight

One of the following:
const GenerationOutputLayerTextFontWeightThin GenerationOutputLayerTextFontWeight = "thin"
const GenerationOutputLayerTextFontWeightLight GenerationOutputLayerTextFontWeight = "light"
const GenerationOutputLayerTextFontWeightRegular GenerationOutputLayerTextFontWeight = "regular"
const GenerationOutputLayerTextFontWeightMedium GenerationOutputLayerTextFontWeight = "medium"
const GenerationOutputLayerTextFontWeightBold GenerationOutputLayerTextFontWeight = "bold"
const GenerationOutputLayerTextFontWeightBlack GenerationOutputLayerTextFontWeight = "black"
Width GenerationOutputLayerTextFontWidth

Letter width for its height

One of the following:
const GenerationOutputLayerTextFontWidthCondensed GenerationOutputLayerTextFontWidth = "condensed"
const GenerationOutputLayerTextFontWidthNormal GenerationOutputLayerTextFontWidth = "normal"
const GenerationOutputLayerTextFontWidthWide GenerationOutputLayerTextFontWidth = "wide"
Match GenerationOutputLayerTextFontMatch
optional

The font in your font catalog that the lettering matches, so you can re-set the text in it. Absent when no catalog font matches closely enough, or matching is not enabled. The image itself is not rendered in this font.

FaceID string

Typed ref of the matched face (one weight and style), font_face:

FamilyID string

Typed ref of the matched font family, font_family:

FamilyName string

Name of the matched font family

Style GenerationOutputLayerTextFontMatchStyle

Style of the matched face

One of the following:
const GenerationOutputLayerTextFontMatchStyleNormal GenerationOutputLayerTextFontMatchStyle = "normal"
const GenerationOutputLayerTextFontMatchStyleItalic GenerationOutputLayerTextFontMatchStyle = "italic"
Weight int64

CSS font weight of the matched face, e.g. 400 or 700

Usage GenerationUsage
optional

What one generation actually cost, as billing settled it

CreditsCharged int64

Credits actually charged for this generation. Null until billing has settled it; a confirmed no-charge outcome is 0. Stays null for a generation whose charge could not be confirmed, including ones settled before this field existed. Never an estimate or the reserved amount.

minimum: 0

Get a generation

package main
import (
"context"
"fmt"
"github.com/lumalabs/luma-agents-go"
"github.com/lumalabs/luma-agents-go/option"
)
func main() {
client := lumaagents.NewClient(
option.WithAuthToken("My Auth Token"),
)
generation, err := client.Generations.Get(context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e")
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", generation.ID)
}
200 example
{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"created_at": "created_at",
"model": "uni-1",
"state": "queued",
"type": "image",
"failure_code": "content_moderated",
"failure_reason": "failure_reason",
"output": [
{
"type": "type",
"url": "https://example.com",
"layer": {
"alpha_hint": "alpha_hint",
"description": "description",
"index": 0,
"label": "label",
"bounds": {
"canvas_height": 0,
"canvas_width": 0,
"height": 0,
"width": 0,
"x": 0,
"y": 0
},
"contains_text": true,
"text": {
"content": "content",
"decorated": true,
"font": {
"category": "sans serif",
"families": [
"string"
],
"italic": true,
"weight": "thin",
"width": "condensed",
"match": {
"face_id": "face_id",
"family_id": "family_id",
"family_name": "family_name",
"style": "normal",
"weight": 0
}
}
}
}
}
],
"usage": {
"credits_charged": 0
}
}
Returns Examples
200 example
{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"created_at": "created_at",
"model": "uni-1",
"state": "queued",
"type": "image",
"failure_code": "content_moderated",
"failure_reason": "failure_reason",
"output": [
{
"type": "type",
"url": "https://example.com",
"layer": {
"alpha_hint": "alpha_hint",
"description": "description",
"index": 0,
"label": "label",
"bounds": {
"canvas_height": 0,
"canvas_width": 0,
"height": 0,
"width": 0,
"x": 0,
"y": 0
},
"contains_text": true,
"text": {
"content": "content",
"decorated": true,
"font": {
"category": "sans serif",
"families": [
"string"
],
"italic": true,
"weight": "thin",
"width": "condensed",
"match": {
"face_id": "face_id",
"family_id": "family_id",
"family_name": "family_name",
"style": "normal",
"weight": 0
}
}
}
}
}
],
"usage": {
"credits_charged": 0
}
}