MiscSubjects

GPT Image 2.5

Rules
JSONRules
18 keys
"transport""connected_tool"
"endpoint"null
"endpoint_status""Connected tool generate_image is verified. A callable HTTP generation endpoint for this model ID has not been established."
"tool""generate_image"
"method""tools/call"
"auth" 3 keys
"mechanism""existing authenticated Higgsfield connector"
"graph_header""X-Terminal-Key"
"secret_values_stored"false
"request_shape" 1 key
"params""fields below; optional outer context is analytics only"
"fields" 13 keys
"model" 5 keys
"type""string"
"required"true
"enum" 1 item
"gpt_image_2_5"
"min"null
"max"null
"prompt" 6 keys
"type""string"
"required"true
"max"null
"max_status""not published"
"min"null
"aspect_ratio" 5 keys
"type""string"
"required"false
"enum" 15 items
"auto"
"1:1"
"3:2"
"2:3"
"4:3"
"3:4"
"16:9"
"9:16"
"21:9"
"27:16"
"16:27"
"9:8"
"8:9"
"4:5"
"5:4"
"min"null
"max"null
"count" 5 keys
"type""integer"
"required"false
"min"1
"max"4
"default"1
"medias" 6 keys
"type""array"
"required"false
"min"0
"max"16
"bounds_status""published in official Higgsfield CLI model documentation"
"items" 2 keys
"role" 1 key
"enum" 1 item
"image"
"value" 2 keys
"type""string"
"format""https-url"
"folder_id" 4 keys
"type""string"
"required"false
"min"null
"max"null
"preset_session_id" 4 keys
"type""string"
"required"false
"min"null
"max"null
"use_free_gens" 4 keys
"type""boolean"
"required"false
"min"null
"max"null
"use_unlim" 4 keys
"type""boolean"
"required"false
"min"null
"max"null
"variant" 6 keys
"type""string"
"required"false
"enum" 2 items
"flare"
"sunburst"
"default""flare"
"min"null
"max"null
"quality" 6 keys
"type""string"
"required"false
"enum" 5 items
"low"
"medium"
"high"
"xhigh"
"max"
"default""low"
"min"null
"max"null
"resolution" 6 keys
"type""string"
"required"false
"enum" 3 items
"1k"
"2k"
"4k"
"default""1k"
"min"null
"max"null
"background" 6 keys
"type""string"
"required"false
"enum" 3 items
"auto"
"opaque"
"transparent"
"nullable"true
"min"null
"max"null
"prompt_limit" 2 keys
"value"null
"status""not published"
"reference_images" 8 keys
"min"0
"max"16
"status""published in official Higgsfield CLI model documentation"
"roles" 1 item
"image"
"catalog_roles" 1 item
"image_references"
"input_form""HTTPS links"
"mapping""Connector maps canonical image role to model-specific image_references when needed"
"bounds_source" 5 keys
"section""gpt_image_2_5 — GPT Image 2.5"
"observed_at""2026-11-05T22:35:50.872703+00:00"
"reference_input""optional; UUID or path; at most 16"
"scope""Published model constraint; connector accepts HTTPS links and maps canonical image role to image_references."
"resolutions" 3 items
"1k"
"2k"
"4k"
"aspect_ratios" 15 items
"auto"
"1:1"
"3:2"
"2:3"
"4:3"
"3:4"
"16:9"
"9:16"
"21:9"
"27:16"
"16:27"
"9:8"
"8:9"
"4:5"
"5:4"
"variants" 2 items
"flare"
"sunburst"
"cost_per_unit" 5 keys
"unit""image"
"quote" 2 keys
"credits"0.25
"credits_exact"0.25
"controls" 4 keys
"count"1
"resolution""1k"
"quality""low"
"variant""flare"
"observed_at""2026-11-05T22:10:59.535735+00:00"
"other_controls""Requote with estimate_image_cost"
"lifecycle" 8 keys
"submit""generate_image"
"status""jobs_wait"
"job_id_path""results[].id"
"success_state""completed"
"failure_states" 4 items
"failed"
"canceled"
"nsfw"
"ip_detected"
"output_url_path""jobs[].result_url"
"submit_is_completion"false
"complete_callable_contracts" 4 keys
"estimate_image_cost""Estimate image generation credit cost without submitting a job. HTTPS image references are fetched, uploaded, and confirmed in your Higgsfield media library; repeated calls can create new uploads. Requires write access. Takes the same `params` object as generate_image: `params.model` is required; `prompt` may be omitted for a cost-only estimate. This tool is part of plugin `Higgsfield`. Every image and video model MCP server instructions: After verifying a completed Katana video, call show_result with action "katana_video" and media_id or url. Default image model: gpt_image_2_6. Native animated GIF and SVG: generate_image with output_format gif/svg inside params; do not generate a video for a GIF. SVG takes no references. Flare is gpt_image_2_6_flare. For top/popular/trending Genjutsu requests, first call get_presets source="genjutsu" category="genjutsu-trending"; never invent a trend. Browse-only stops there; explicit self-selection resolve... exec tool declaration: ```ts declare const tools: { mcp__codex_apps__higgsfield_estimate_image_cost(args: { params: { // Output aspect ratio: 'auto' or positive width:height, for example '1:1', '9:16', or '16:9'. Omit for the selected model's default. Use models_get to inspect that model's supported values; the server coerces unsupported well-formed ratios when a safe model fallback exists. aspect_ratio?: string; // Number of results (1-4). Ignored with use_unlim: an unlim request is always one generation — count is capped to 1 and the cap comes back in adjustments. Send separate calls for more. count?: number; // Destination folder for this conversation. Use default_folder_id from create_project, or folder_id from create_folder when requested. Reuse on every generation and batch item in this conversation; never invent an ID or share a destination across chats. Omit by default for generation without a project. Before the first generation without a destination, call get_preferences: create a project only when auto_create_project is true or explicitly requested. Explicit existing destinations and requests to work without a project take priority; never change the saved preference for a one-off request. folder_id?: string; // Reference media inputs. medias?: Array<{ // Canonical reference role. Allowed: 'image' — Generic reference image (style, composition, subject). | 'start_image' — First frame of the output video. | 'end_image' — Last frame of the output video. | 'video' — Reference video clip. | 'audio' — Reference audio clip. | 'ref_element' — Named element to preserve across frames (product, character). The selected model may support only a subset; use models_get to inspect it. The server maps canonical roles to model-specific backend media keys when needed. role: "image" | "start_image" | "end_image" | "video" | "audio" | "ref_element"; // Uploaded media UUID from media_upload_and_confirm, completed generation job UUID, or authorized HTTPS image URL. HTTPS image URLs are imported and confirmed automatically. value: string; }>; // Model ID from the model catalog (required). model: string; // Session returned by start_katana_preset_session for every Katana preset run, paid or free. Forward this ID on every generation and batch item in that run, including cost estimates. Add use_free_gens: true only when the user explicitly requests free generations; otherwise omit it. preset_session_id?: string; // Text description. Optional for cost-only estimates. prompt?: string; // Request free generation only when the user explicitly asks. For a Katana run, also pass preset_session_id from start_katana_preset_session; the backend validates eligibility. Do not combine with use_unlim or retry a rejected free request on credits without explicit approval. true caps count to 1. use_free_gens?: boolean; // Which balance pays for this generation: the caller's free-trial unlimited generations (true) or their credits (false). OMIT IT to let the server decide — if they hold an allowance that covers the model, the tool submits nothing and returns `unlim_choice` for the user to answer; call again with the same params plus this field. true also caps count to 1. use_unlim?: boolean; [key: string]: unknown; }; }): Promise<CallToolResult<{ adjustments?: { [key: string]: { reason: string; requested: string | number | boolean; used: string | number | boolean; }; }; // Estimated generation cost. No job was submitted. cost?: { // Whole-credit cost (max(1, exact // 1) when exact > 0). credits: number; // Exact credit cost as a float. credits_exact: number; }; error?: string; // Genjutsu required-media presence only. A successful price quote does not validate media existence, duration or generation readiness. input_check?: { generation_validated: false; image_count: number; missing_roles: Array<"image" | "video">; required_media_present: boolean; video_count: number; }; // Genjutsu request params with resolved media UUIDs and applied adjustments. May be incomplete; inspect input_check. Reuse instead of importing the same references again. No generation has been submitted or validated. prepared_params?: { [key: string]: unknown; }; }>>; }; ```"
"generate_image""Generate an image. A successful submission returns job IDs; a choice or rejected request submits no job. For credit preflight use `estimate_image_cost` first; HTTPS image references are imported into your media library. Call this directly as the first tool call of the turn with the default model `gpt_image_2_6` for ordinary generation, photorealistic images, typography, and reference-based editing. GPT Image 2.6 (Sunburst) and `gpt_image_2_6_flare` support native animated GIF and SVG output: set `output_format` to `gif` or `svg` among the model-specific params. For a GIF request use this image tool directly, not video generation or conversion. GIF accepts references and live size/frame_count/frame_duration_ms controls; SVG is generation-only without references. Preserve explicit model choices. Consult `models_recommend`, `models_search`, `models_list`, or `models_get` only when the user asks to pick or compare models, or you need `aspect_ratios`, `parameters`, or `medias[].roles` for reference inputs. Reference media can be uploaded media UUIDs from `media_upload_and_confirm`, completed generation job UUIDs, or authorized HTTPS image URLs such as user-provided file download URLs; the server imports HTTPS images into Higgsfield and confirms them automatically. For a specific already-trained Soul character, first call soul_list with the matching type and status='ready', then pass its returned soul_id with the matching Soul model. Reference Element IDs are not Soul IDs. If the required character cannot be resolved or generation rejects it, stop; never omit soul_id or substitute another identity without the user's agreement. For other character/avatar requests use image generation directly; there is no reusable character-training flow here. All arguments go inside the single `params` object — `params.model` is required, `params.prompt` holds the text description, and model-specific parameters are additional keys of `params`. Server returns `adjustments` for fallbacks; invalid declared-param values return a structured error. This tool already displays its submitted jobs in an auto-updating generation widget, including while pending or in progress. Do not follow it with job_display, show_generations, or show_generation_by_ids merely to show or refresh the same results, before or after completion. To await completion, use jobs_wait with timeout_seconds <= 15; it does not open another widget. Use a separate display only when the user explicitly requests one or the workflow requires a distinct preview or approval. Headless generate_*_batch and execute_preset workflows follow their own display instructions. On a transport timeout the submission outcome may be unknown: do not automatically resubmit. Reuse returned job IDs and retry only after the original outcome is known. This tool is part of plugin `Higgsfield`. Every image and video model MCP server instructions: After verifying a completed Katana video, call show_result with action "katana_video" and media_id or url. Default image model: gpt_image_2_6. Native animated GIF and SVG: generate_image with output_format gif/svg inside params; do not generate a video for a GIF. SVG takes no references. Flare is gpt_image_2_6_flare. For top/popular/trending Genjutsu requests, first call get_presets source="genjutsu" category="genjutsu-trending"; never invent a trend. Browse-only stops there; explicit self-selection resolve... exec tool declaration: ```ts declare const tools: { mcp__codex_apps__higgsfield_generate_image(args: { // Briefly describe the user's underlying goal and why this call helps, in one short sentence. Do not include names, contact details, credentials, URLs, or biometric details. Analytics only; not a generation prompt. context?: string; params: { // Output aspect ratio: 'auto' or positive width:height, for example '1:1', '9:16', or '16:9'. Omit for the selected model's default. Use models_get to inspect that model's supported values; the server coerces unsupported well-formed ratios when a safe model fallback exists. aspect_ratio?: string; // Number of results (1-4). Ignored with use_unlim: an unlim request is always one generation — count is capped to 1 and the cap comes back in adjustments. Send separate calls for more. count?: number; // Destination folder for this conversation. Use default_folder_id from create_project, or folder_id from create_folder when requested. Reuse on every generation and batch item in this conversation; never invent an ID or share a destination across chats. Omit by default for generation without a project. Before the first generation without a destination, call get_preferences: create a project only when auto_create_project is true or explicitly requested. Explicit existing destinations and requests to work without a project take priority; never change the saved preference for a one-off request. folder_id?: string; // Reference media inputs. medias?: Array<{ // Canonical reference role. Allowed: 'image' — Generic reference image (style, composition, subject). | 'start_image' — First frame of the output video. | 'end_image' — Last frame of the output video. | 'video' — Reference video clip. | 'audio' — Reference audio clip. | 'ref_element' — Named element to preserve across frames (product, character). The selected model may support only a subset; use models_get to inspect it. The server maps canonical roles to model-specific backend media keys when needed. role: "image" | "start_image" | "end_image" | "video" | "audio" | "ref_element"; // Uploaded media UUID from media_upload_and_confirm, completed generation job UUID, or authorized HTTPS image URL. HTTPS image URLs are imported and confirmed automatically. value: string; }>; // Model ID from the model catalog (required). model: string; // Session returned by start_katana_preset_session for every Katana preset run, paid or free. Forward this ID on every generation and batch item in that run, including cost estimates. Add use_free_gens: true only when the user explicitly requests free generations; otherwise omit it. preset_session_id?: string; // Text description of what to generate. prompt?: string; // Request free generation only when the user explicitly asks. For a Katana run, also pass preset_session_id from start_katana_preset_session; the backend validates eligibility. Do not combine with use_unlim or retry a rejected free request on credits without explicit approval. true caps count to 1. use_free_gens?: boolean; // Which balance pays for this generation: the caller's free-trial unlimited generations (true) or their credits (false). OMIT IT to let the server decide — if they hold an allowance that covers the model, the tool submits nothing and returns `unlim_choice` for the user to answer; call again with the same params plus this field. true also caps count to 1. use_unlim?: boolean; [key: string]: unknown; }; }): Promise<CallToolResult<{ adjustments?: { [key: string]: { reason: string; requested: string | number | boolean; used: string | number | boolean; }; }; // Set when the server auto-picked an avatar because product_ids were passed without avatars/avatar_ids (Marketing Studio video). avatar_auto_picked?: { id: string; name?: string; type: "preset" | "custom"; }; // Live brand kit status when a generation was rejected because the kit is not ready yet. brand_kit_status?: string; error?: string; // Suggested follow-up tool call (e.g. show_marketing_studio fetch) attached to some marketing error results. next_step?: { params: { [key: string]: unknown; }; tool: string; }; results?: Array<{ author?: { avatarUrl?: string; userId: string; username?: string; }; batch_id?: string; createdAt?: number; folder_id?: string; id: string; liked?: boolean; model: string; params: { aspect_ratio?: string | null; custom_reference_id?: string | { [key: string]: unknown; } | null; duration?: number | null; image?: string | null; input_images?: Array<{ id?: string; type?: string; url?: string; [key: string]: unknown; }> | null; medias?: Array<{ data?: { id?: string; type?: string; url?: string; [key: string]: unknown; }; role?: string; [key: string]: unknown; }> | null; presetMeta?: { id?: string; name?: string; url?: string; } | null; prompt: string; reference_images?: Array<string | { [key: string]: unknown; }> | null; soul_id?: string | { [key: string]: unknown; } | null; soul_reference?: { name?: string; preview_url?: string; soul_id: string; thumbnail_url?: string; url?: string; } | null; voice?: string | { id?: string; name?: string; type?: string; [key: string]: unknown; } | null; [key: string]: unknown; }; results?: { autosprite?: { atlasUrl?: string; audioUrl?: string; columns?: number; frameCount?: number; frameHeight?: number; frameWidth?: number; spritesheetId?: string; }; durationSec?: number; // Original EXR ZIP; when present, rawUrl is the unprocessed input video used for playback. exrUrl?: string; height?: number; minUrl?: string; previewSource?: "input" | "result"; rawUrl: string; text?: string; thumbnailUrl?: string; vtt?: string; waveformUrl?: string; width?: number; }; status: "pending" | "waiting" | "queued" | "dna" | "script" | "visuals" | "vision" | "flow" | "in_progress" | "ip_detect" | "completed" | "canceled" | "failed" | "nsfw" | "ip_detected"; type: "image" | "video" | "audio" | "3d"; }>; // NO JOB WAS SUBMITTED. The caller has free unlimited generations that cover this model, and nobody has said whether to spend them. Ask the user, then call the same tool again with use_unlim: true (free) or use_unlim: false (credits). Do not pick for them. unlim_choice?: { // ISO timestamp when the allowance lapses. expires_at?: string | null; // The question to put to the user, verbatim. message: string; // Model the choice applies to. model: string; // Unlimited generations left; null means unmetered. remaining?: number | null; }; warning?: string; }>>; }; ```"
"jobs_wait""Long-poll 1-8 generation jobs together without opening a widget. Waits up to timeout_seconds (default 15, max 15) for every job to reach a terminal state, then returns compact indexed statuses and result URLs. Use job IDs returned by generate_image_batch, generate_video_batch, or generate_audio_batch. For larger sets, choose groups of at most 8 and wait for each group. Permanent lookup failures are returned once without blocking the other jobs; transient lookup failures are retried within the timeout. When all_terminal is false, wait poll_after_seconds before calling again. After every wait group in the user's generation set is terminal, collect their indexed jobs and display them with one show_generation_by_ids call when within that tool's limit. Never use show_generations or call job_display once per batch job. This tool is part of plugin `Higgsfield`. Every image and video model MCP server instructions: After verifying a completed Katana video, call show_result with action "katana_video" and media_id or url. Default image model: gpt_image_2_6. Native animated GIF and SVG: generate_image with output_format gif/svg inside params; do not generate a video for a GIF. SVG takes no references. Flare is gpt_image_2_6_flare. For top/popular/trending Genjutsu requests, first call get_presets source="genjutsu" category="genjutsu-trending"; never invent a trend. Browse-only stops there; explicit self-selection resolve... exec tool declaration: ```ts declare const tools: { mcp__codex_apps__higgsfield_jobs_wait(args: { // OpenAI-profile generation jobs to wait for together. jobs: Array<{ // Stable index returned by the batch generation tool. index: number; job_id: string; }>; // Long-poll budget. Use 0 for an immediate snapshot. timeout_seconds?: number; }): Promise<CallToolResult<{ aborted?: boolean; // True when every job is terminal or permanently unresolvable, so no further polling is needed. all_terminal: boolean; jobs: Array<{ error?: string; // Original EXR ZIP; result_url is the unchanged input video, not processed HDR. exr_url?: string; index: number; job_id: string; model?: string; result_url?: string; // Present for lookup_failed. True means a later jobs_wait call may succeed; false means the lookup failure is permanent. retryable?: boolean; status: "pending" | "waiting" | "queued" | "dna" | "script" | "visuals" | "vision" | "flow" | "in_progress" | "ip_detect" | "completed" | "canceled" | "failed" | "nsfw" | "ip_detected" | "lookup_failed"; thumbnail_url?: string; type?: "image" | "video" | "audio" | "3d"; }>; poll_after_seconds?: number; summary: { active: number; completed: number; errors: number; failed: number; total: number; }; timed_out?: boolean; }>>; }; ```"
"models_get""Read-only fetch of one generation model's constraints, parameters, media roles, aspect ratios, and durations. This tool is part of plugin `Higgsfield`. Every image and video model MCP server instructions: After verifying a completed Katana video, call show_result with action "katana_video" and media_id or url. Default image model: gpt_image_2_6. Native animated GIF and SVG: generate_image with output_format gif/svg inside params; do not generate a video for a GIF. SVG takes no references. Flare is gpt_image_2_6_flare. For top/popular/trending Genjutsu requests, first call get_presets source="genjutsu" category="genjutsu-trending"; never invent a trend. Browse-only stops there; explicit self-selection resolve... exec tool declaration: ```ts declare const tools: { mcp__codex_apps__higgsfield_models_get(args: { // Model ID from models_list, models_search, or models_recommend. model_id: string; }): Promise<CallToolResult<{ aspect_ratios?: Array<string>; credit_unit?: "per_image" | "per_second"; credits_per_unit?: number; description?: string; duration_range?: { max: number; min: number; }; durations?: Array<number>; error?: string; // Free generations the caller can spend right now, one entry per counter with the model ids that share it. Answer "what free generations do I have" from this; pass use_free_gens:true to generate_video for Higgsfield Genjutsu or execute_preset for Viral when the user asks to use one. For ai_influencer_sheet, prepare with ai_influencer_prepare, then use ai_influencer_generate with use_free_gens:true and max_credits:0, never generate_image. free_gens?: Array<{ // Job-set types sharing this counter. viral_hub_video covers all Viral chain presets; one preset execution spends one attempt. ai_influencer_sheet is spent through ai_influencer_generate with use_free_gens:true or the AI Influencer Builder’s Use free gens toggle. job_set_types: Array<string>; // Upper bound in seconds for a free run, or null. max_duration: number | null; // Allowed values per request parameter for a free run; an absent parameter is uncapped. parameters: { [key: string]: Array<string | number>; }; // Free generations left on the counter. 0 = granted and spent. remaining: number; }>; has_more?: boolean; id?: string; items?: Array<{ aspect_ratios: Array<string>; credit_unit?: "per_image" | "per_second"; credits_per_unit?: number; description: string; duration_range?: { max: number; min: number; }; durations?: Array<number>; id: string; match_reason?: string; medias: Array<{ description?: string; max?: number; name: string; required?: boolean; roles?: Array<string>; type: "image"; }>; name: string; output_type: "image" | "video" | "audio" | "3d"; parameters: Array<{ default?: string | number | boolean; description?: string; // Format constraint for scalar string parameters, e.g. hex_color. format?: string; // Format constraint for string_array items, e.g. hex_color. item_format?: string; // Regex source for string_array items. item_pattern?: string; max?: number; min?: number; name: string; nullable?: boolean; options?: Array<string | number>; // Regex source for scalar string parameters. pattern?: string; required: "required" | "optional"; type: "string" | "number" | "bool" | "string_array" | "object_array"; }>; provider_name: string; score?: number; supports_free_gens?: boolean; supports_unlim?: boolean; tags?: Array<string>; }>; medias?: Array<{ description?: string; max?: number; name: string; required?: boolean; roles?: Array<string>; type: "image"; }>; message?: string; name?: string; next_page_token?: string; output_type?: "image" | "video" | "audio" | "3d"; parameters?: Array<{ default?: string | number | boolean; description?: string; // Format constraint for scalar string parameters, e.g. hex_color. format?: string; // Format constraint for string_array items, e.g. hex_color. item_format?: string; // Regex source for string_array items. item_pattern?: string; max?: number; min?: number; name: string; nullable?: boolean; options?: Array<string | number>; // Regex source for scalar string parameters. pattern?: string; required: "required" | "optional"; type: "string" | "number" | "bool" | "string_array" | "object_array"; }>; provider_name?: string; // Standalone tools (not catalog models) relevant to the recommend query — e.g. motion_control for recast/puppeteer, upscale_image/upscale_video for enhance, outpaint_image for expand/uncrop, reframe for a video aspect-ratio change, remove_background for cutout. Call the named tool directly; it will not appear in items. related_tools?: Array<{ tool: string; use_when: string; }>; status?: string; supports_free_gens?: boolean; supports_unlim?: boolean; tags?: Array<string>; }>>; }; ```"
"result_hosts" 2 items
"d2ol7oe51mr4n9.cloudfront.net"
"higgsfield.ai"
"source" 3 keys
"catalog_tool""models_get"
"observed_at""2026-11-05T22:10:59.535748+00:00"
"catalog" 9 keys
"id""gpt_image_2_5"
"name""GPT Image 2.5"
"provider_name""OpenAI"
"description""GPT Image 2.5 generation and editing with Flare and Sunburst variants"
"output_type""image"
"parameters" 4 items
6 keys
"name""variant"
"required""optional"
"type""string"
"description""Model variant."
"options" 2 items
"flare"
"sunburst"
"default""flare"
6 keys
"name""quality"
"required""optional"
"type""string"
"description""Rendering quality."
"options" 5 items
"low"
"medium"
"high"
"xhigh"
"max"
"default""low"
6 keys
"name""resolution"
"required""optional"
"type""string"
"description""Output resolution."
"options" 3 items
"1k"
"2k"
"4k"
"default""1k"
6 keys
"name""background"
"required""optional"
"type""string"
"description""Background handling. Omit to keep the model default."
"options" 3 items
"auto"
"opaque"
"transparent"
"nullable"true
"medias" 1 item
3 keys
"name""medias"
"type""image"
"roles" 1 item
"image_references"
"aspect_ratios" 15 items
"auto"
"1:1"
"3:2"
"2:3"
"4:3"
"3:4"
"16:9"
"9:16"
"21:9"
"27:16"
"16:27"
"9:8"
"8:9"
"4:5"
"5:4"
"tags" 5 items
"image-generation"
"editing"
"reference-images"
"4k"
"text-rendering"

Images

Make an image of Cyrus Massoumi — image 1
Make an image of Cyrus Massoumi — image 1 · Image record
Make a new AI clone image of Cyrus Massoumi throwing a peace sign — image 1
Make a new AI clone image of Cyrus Massoumi throwing a peace sign — image 1 · Image record