Media ​
| Workflow | Type | Description |
|---|---|---|
| media.artifact.register | Atomic | Register a GeneratedArtifact index row (default review_gate=inbox, verdict=pending). Bytes live on StorageObject when storage_object_uuid set. |
| media.artifact.request-review | Atomic | Create a Staff ActorOutboxEnvelope for GeneratedArtifact inbox review, stamp approval_envelope_id on the artifact, and fan out to inbox connectors. |
| media.artifact.set-verdict | Atomic | Set review verdict on a GeneratedArtifact. Inbox-gated artifacts require an approved ActorOutboxEnvelope (from media.artifact.request-review) unless force=true. |
| media.audio.transcribe | Atomic | Transcribe an audio StorageObject via the org AI connection (provider-blind), persist the transcript to storage, and index it as a copy GeneratedArtifact. Returns refs plus the transcript text; audio bytes never enter workflow state. |
| media.brand.generate-critique-approve | Dag | Generate a brand image, run a multimodal AI critique (storage_object_uuid → ai.chat.complete attachment_uuids), and open an inbox review envelope. Final verdict via media.artifact.set-verdict. |
| media.image.edit | Atomic | Edit an existing StorageObject image via the org AI connection; persist result and return a new StorageObject UUID. Prefer media_profile_uuid (fail-closed). |
| media.image.generate | Atomic | Generate an image via the org AI connection (Azure-first), persist bytes to storage, return StorageObject UUID only. Prefer media_profile_uuid (fail-closed ready profile); explicit connection/storage/bucket/model kept for back-compat. |
| media.image.variant | Atomic | Create a variant of an existing StorageObject image via the org AI connection; persist and return a new StorageObject UUID. Prefer media_profile_uuid (fail-closed). gpt-image-* uses images/edits fallback (variations API unsupported). |
| media.ingest.from-url | Atomic | Fetch a remote HTTPS URL server-side, write bytes to org storage, return StorageObject UUID only (never bytes). |
| media.profile.disable | Atomic | Disable a MediaProfile (enabled=False, status=disabled). Idempotent when already disabled. |
| media.profile.recheck | Atomic | Re-validate an existing MediaProfile (AI, bucket ensure, storage probe, paid image smoke). Restores status=ready only when smoke succeeds. |
| media.profile.set-default | Atomic | Promote one MediaProfile to the organization default, demoting any previous default in the same transaction. |
| media.profile.setup | Atomic | Create or update a MediaProfile: validate AIProviderConfig, ensure media bucket via storage.media-bucket.ensure, storage put/delete probe, and paid image smoke. Marks status=ready only when smoke succeeds. |
