Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Preparing Ring content
Preparing Ring content
Preparing Ring content
Generative Gallery is Ring Platform’s shared media field for NFT create, multi-vendor product forms, and File Cabinet detail-panel Image/Video chat. Operators upload images or generate ImageConductor variations, enrich prompts with Ghost-write (TextConductor + web search), and keep history in a hidden tool chat (genmedia:…) that never clutters Messages.
Use Founder / Developer tabs in the docs sidebar to filter this page. Founders see operator value and surfaces; developers see modules, billing, and verified paths.
| Surface | Role |
|---|---|
| NFT create wizard | Collection cover + mint media via GenerativeMediaField (scope: 'nft') |
| Vendor / admin product form | Product image gallery (scope: 'product'); Agent Knowledge Research is a separate WebConductor path — see Store |
| File Cabinet detail panel | Image chat / Video chat → GenerativeMediaEditorFsModal (scope: 'cabinet'); sibling save under source parent |
| Product detail gallery | Prefers derivatives.thumb / webpUrl for strip; lightbox uses original |
| News cards / hero / OG | pickImageSrc → card / hero / og; blur LQIP when present |
| Avatar | avatarThumb (sync_thumb) preferred over photoURL original |
| Chat image bubbles | MessageAttachment.derivatives.thumb preferred over original URL |
| NFT mint + listings | Off-chain Metaplex JSON (image, optional animation_url, properties.files) |
SSOT module: features/generative-media/. Scopes: nft | product | cabinet | editor.
generative_gallery / genmedia:).…/alt; Generative Gallery creates or enhances pixels. Gallery attach from research stays Use in gallery (explicit).{name}-enhanced-… or {name}-enlive-… so originals stay intact.Depends-on: Conversation.type vs metadata.kind — tool chats reuse the product channel.
Same-workflow: Generative Gallery on member create/mint/list.
Same-workflow: product gallery field plus WebConductor Agent Knowledge Research.
Next-step: detail-panel Image/Video chat and sibling save under parentId.
Generative Gallery is Ring Platform’s shared media field for NFT create, multi-vendor product forms, and File Cabinet detail-panel Image/Video chat. Operators upload images or generate ImageConductor variations, enrich prompts with Ghost-write (TextConductor + web search), and keep history in a hidden tool chat (genmedia:…) that never clutters Messages.
Use Founder / Developer tabs in the docs sidebar to filter this page. Founders see operator value and surfaces; developers see modules, billing, and verified paths.
| Surface | Role |
|---|---|
| NFT create wizard | Collection cover + mint media via GenerativeMediaField (scope: 'nft') |
| Vendor / admin product form | Product image gallery (scope: 'product'); Agent Knowledge Research is a separate WebConductor path — see Store |
| File Cabinet detail panel | Image chat / Video chat → GenerativeMediaEditorFsModal (scope: 'cabinet'); sibling save under source parent |
| Product detail gallery | Prefers derivatives.thumb / webpUrl for strip; lightbox uses original |
| News cards / hero / OG | pickImageSrc → card / hero / og; blur LQIP when present |
| Avatar | avatarThumb (sync_thumb) preferred over photoURL original |
| Chat image bubbles | MessageAttachment.derivatives.thumb preferred over original URL |
| NFT mint + listings | Off-chain Metaplex JSON (image, optional animation_url, properties.files) |
SSOT module: features/generative-media/. Scopes: nft | product | cabinet | editor.
generative_gallery / genmedia:).…/alt; Generative Gallery creates or enhances pixels. Gallery attach from research stays Use in gallery (explicit).{name}-enhanced-… or {name}-enlive-… so originals stay intact.Depends-on: Conversation.type vs metadata.kind — tool chats reuse the product channel.
Same-workflow: Generative Gallery on member create/mint/list.
Same-workflow: product gallery field plus WebConductor Agent Knowledge Research.
Next-step: detail-panel Image/Video chat and sibling save under parentId.
Generative Gallery is Ring Platform’s shared media field for NFT create, multi-vendor product forms, and File Cabinet detail-panel Image/Video chat. Operators upload images or generate ImageConductor variations, enrich prompts with Ghost-write (TextConductor + web search), and keep history in a hidden tool chat (genmedia:…) that never clutters Messages.
Use Founder / Developer tabs in the docs sidebar to filter this page. Founders see operator value and surfaces; developers see modules, billing, and verified paths.
| Surface | Role |
|---|---|
| NFT create wizard | Collection cover + mint media via GenerativeMediaField (scope: 'nft') |
| Vendor / admin product form | Product image gallery (scope: 'product'); Agent Knowledge Research is a separate WebConductor path — see Store |
| File Cabinet detail panel | Image chat / Video chat → GenerativeMediaEditorFsModal (scope: 'cabinet'); sibling save under source parent |
| Product detail gallery | Prefers derivatives.thumb / webpUrl for strip; lightbox uses original |
| News cards / hero / OG | pickImageSrc → card / hero / og; blur LQIP when present |
| Avatar | avatarThumb (sync_thumb) preferred over photoURL original |
| Chat image bubbles | MessageAttachment.derivatives.thumb preferred over original URL |
| NFT mint + listings | Off-chain Metaplex JSON (image, optional animation_url, properties.files) |
SSOT module: features/generative-media/. Scopes: nft | product | cabinet | editor.
generative_gallery / genmedia:).…/alt; Generative Gallery creates or enhances pixels. Gallery attach from research stays Use in gallery (explicit).{name}-enhanced-… or {name}-enlive-… so originals stay intact.Depends-on: Conversation.type vs metadata.kind — tool chats reuse the product channel.
Same-workflow: Generative Gallery on member create/mint/list.
Same-workflow: product gallery field plus WebConductor Agent Knowledge Research.
Next-step: detail-panel Image/Video chat and sibling save under parentId.
GENERATIVE_CREDIT_* optional overrides).ring_filebase so uploads return a full derivatives map.| Naming |
{base}-enhanced-{ts}.{ext} for images; {base}-enlive-{ts}.{ext} for video (base from source filename) |
| Parent | parentId: genSourceNode.parentId — sibling of the source, not a new root dump |
| Pipeline | cabinet.genmedia.sibling_save in scripts/PIPELINES.md |
| Path | Role |
|---|---|
features/generative-media/types.ts | GalleryItem, scopes nft | product | cabinet | editor, buildGenMediaChatKey → genmedia:scope:entity:page:field |
features/generative-media/billing.ts | Credit-first WalletConductor.spendCredits + generative_usage ledger |
features/generative-media/service.ts | Hidden tool chat, upload, Ghost-write, ImageConductor / video turns |
features/generative-media/nft-metadata.ts | Metaplex JSON + upload helpers |
features/generative-media/parse-product-images.ts | FormData URL gallery for vendor/admin |
features/generative-media/components/generative-media-field.tsx | Upload | Generate tabs SSOT widget |
features/generative-media/components/generative-media-editor-fs-modal.tsx | Fullscreen history + Ghost-write + Use this image |
app/_actions/generative-media.ts | listGenMediaMessagesAction, runGenMediaImageAction, runGhostWriteAction, … |
lib/file/media-asset.ts | pickImageSrc / pickGalleryDisplayUrl display SSOT |
features/chat/services/conversation-service.ts | isHiddenToolConversation |
Session required — all generative-media server actions call auth(); unauthenticated → Unauthorized.
NFT scope needs member+ — requireMember = true when scope === 'nft'.
Product / cabinet scopes — signed-in actor (vendor/admin form or cabinet owner path).
| Action | Env key | Default credits |
|---|---|---|
| Ghost-write | GENERATIVE_CREDIT_GHOST_WRITE | 5 |
| Image gen | GENERATIVE_CREDIT_IMAGE | 15 |
| Video gen (priced; studio polish TBD) | GENERATIVE_CREDIT_VIDEO | 50 |
Flow: soft-idempotent on referenceId in generative_usage → balance check → WalletConductor.spendCredits → ledger row.
| Field | Value |
|---|---|
type | 'product' |
metadata.kind | 'generative_gallery' |
metadata.hiddenFromInbox | true |
metadata.productId / subject | genmedia:{scope}:{entity}:{page}:{field} |
Store product-agent chats also use type: 'product' with a real catalog productId and no tool kind — they remain visible in Messages.
Depends-on: credit spend used by generative billing.
GENERATIVE_CREDIT_* optional overrides).ring_filebase so uploads return a full derivatives map.| Naming |
{base}-enhanced-{ts}.{ext} for images; {base}-enlive-{ts}.{ext} for video (base from source filename) |
| Parent | parentId: genSourceNode.parentId — sibling of the source, not a new root dump |
| Pipeline | cabinet.genmedia.sibling_save in scripts/PIPELINES.md |
| Path | Role |
|---|---|
features/generative-media/types.ts | GalleryItem, scopes nft | product | cabinet | editor, buildGenMediaChatKey → genmedia:scope:entity:page:field |
features/generative-media/billing.ts | Credit-first WalletConductor.spendCredits + generative_usage ledger |
features/generative-media/service.ts | Hidden tool chat, upload, Ghost-write, ImageConductor / video turns |
features/generative-media/nft-metadata.ts | Metaplex JSON + upload helpers |
features/generative-media/parse-product-images.ts | FormData URL gallery for vendor/admin |
features/generative-media/components/generative-media-field.tsx | Upload | Generate tabs SSOT widget |
features/generative-media/components/generative-media-editor-fs-modal.tsx | Fullscreen history + Ghost-write + Use this image |
app/_actions/generative-media.ts | listGenMediaMessagesAction, runGenMediaImageAction, runGhostWriteAction, … |
lib/file/media-asset.ts | pickImageSrc / pickGalleryDisplayUrl display SSOT |
features/chat/services/conversation-service.ts | isHiddenToolConversation |
Session required — all generative-media server actions call auth(); unauthenticated → Unauthorized.
NFT scope needs member+ — requireMember = true when scope === 'nft'.
Product / cabinet scopes — signed-in actor (vendor/admin form or cabinet owner path).
| Action | Env key | Default credits |
|---|---|---|
| Ghost-write | GENERATIVE_CREDIT_GHOST_WRITE | 5 |
| Image gen | GENERATIVE_CREDIT_IMAGE | 15 |
| Video gen (priced; studio polish TBD) | GENERATIVE_CREDIT_VIDEO | 50 |
Flow: soft-idempotent on referenceId in generative_usage → balance check → WalletConductor.spendCredits → ledger row.
| Field | Value |
|---|---|
type | 'product' |
metadata.kind | 'generative_gallery' |
metadata.hiddenFromInbox | true |
metadata.productId / subject | genmedia:{scope}:{entity}:{page}:{field} |
Store product-agent chats also use type: 'product' with a real catalog productId and no tool kind — they remain visible in Messages.
Depends-on: credit spend used by generative billing.
GENERATIVE_CREDIT_* optional overrides).ring_filebase so uploads return a full derivatives map.| Naming |
{base}-enhanced-{ts}.{ext} for images; {base}-enlive-{ts}.{ext} for video (base from source filename) |
| Parent | parentId: genSourceNode.parentId — sibling of the source, not a new root dump |
| Pipeline | cabinet.genmedia.sibling_save in scripts/PIPELINES.md |
| Path | Role |
|---|---|
features/generative-media/types.ts | GalleryItem, scopes nft | product | cabinet | editor, buildGenMediaChatKey → genmedia:scope:entity:page:field |
features/generative-media/billing.ts | Credit-first WalletConductor.spendCredits + generative_usage ledger |
features/generative-media/service.ts | Hidden tool chat, upload, Ghost-write, ImageConductor / video turns |
features/generative-media/nft-metadata.ts | Metaplex JSON + upload helpers |
features/generative-media/parse-product-images.ts | FormData URL gallery for vendor/admin |
features/generative-media/components/generative-media-field.tsx | Upload | Generate tabs SSOT widget |
features/generative-media/components/generative-media-editor-fs-modal.tsx | Fullscreen history + Ghost-write + Use this image |
app/_actions/generative-media.ts | listGenMediaMessagesAction, runGenMediaImageAction, runGhostWriteAction, … |
lib/file/media-asset.ts | pickImageSrc / pickGalleryDisplayUrl display SSOT |
features/chat/services/conversation-service.ts | isHiddenToolConversation |
Session required — all generative-media server actions call auth(); unauthenticated → Unauthorized.
NFT scope needs member+ — requireMember = true when scope === 'nft'.
Product / cabinet scopes — signed-in actor (vendor/admin form or cabinet owner path).
| Action | Env key | Default credits |
|---|---|---|
| Ghost-write | GENERATIVE_CREDIT_GHOST_WRITE | 5 |
| Image gen | GENERATIVE_CREDIT_IMAGE | 15 |
| Video gen (priced; studio polish TBD) | GENERATIVE_CREDIT_VIDEO | 50 |
Flow: soft-idempotent on referenceId in generative_usage → balance check → WalletConductor.spendCredits → ledger row.
| Field | Value |
|---|---|
type | 'product' |
metadata.kind | 'generative_gallery' |
metadata.hiddenFromInbox | true |
metadata.productId / subject | genmedia:{scope}:{entity}:{page}:{field} |
Store product-agent chats also use type: 'product' with a real catalog productId and no tool kind — they remain visible in Messages.
Depends-on: credit spend used by generative billing.