UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 3.69 kB
import{copy as e}from"../../../libs/i18n/copy.mjs";import t from"../checks/check-feature-enabled.mjs";import n from"../../../libs/lucid-remote/services/generate-cms-ai.mjs";import{getCmsAiGenerateFailedMessage as r,isCmsAiGenerateAcceptedData as i,isCmsAiGenerateCompletedData as a,isCmsAiGenerateFailedData as o}from"../../../libs/lucid-remote/utils.mjs";import s from"../../options/get-license-key.mjs";import c from"../storage/store-failed-generation.mjs";import l from"../storage/store-generation.mjs";import u from"../storage/store-pending-generation.mjs";const d={natural:`Create a realistic photograph with natural light, believable texture, accurate perspective, and minimal stylization.`,lifestyle:`Create a polished lifestyle image suited to a brand story or magazine article, with a real-world setting, composed framing, and natural lighting.`,product:`Create a clean studio product image with crisp detail, controlled lighting, accurate materials, and minimal background distractions.`,illustration:`Create a polished non-photographic illustration with clear shapes, cohesive colors, intentional texture, and no photorealistic camera effects.`,cinematic:`Create a story-led cinematic image with dramatic composition, atmospheric lighting, depth, and a believable mood.`},f=async(f,p)=>{let m=await t(f,{feature:`imageGeneration`});if(m.error)return m;let h=Date.now(),g=await s(f);if(g.error)return g;let _=p.idempotencyKey?.trim();if(!_)return{error:{type:`basic`,status:400,message:e(`server:core.ai.media.image.generate.idempotency.key.required`)},data:void 0};let v=[],y=p.instruction?.trim(),b=p.guidance?d[p.guidance]:void 0;if(p.guidance&&!b)return{error:{type:`basic`,status:400,message:e(`server:core.ai.guidance.not.found`)},data:void 0};if(!y&&(!p.guidance||!p.image))return{error:{type:`basic`,status:400,message:e(`server:core.ai.media.image.generate.instruction.or.guidance.required`)},data:void 0};y&&v.push({type:`text`,role:`user-instruction`,value:y}),b&&v.push({type:`text`,role:`guidance`,value:b}),p.image&&v.push({type:`image`,role:`source-image`,image:p.image});let x={feature:{key:`media.image.generate`,version:`v1`},input:v,context:{previousInstructions:p.previousInstructions&&p.previousInstructions.length>0?p.previousInstructions:void 0},generation:p.generation},S=await n(f,{licenseKey:g.data,request:x,idempotencyKey:_});if(S.error)return S;let C=S.data.json.data,w={generation:p.generation,guidance:p.guidance??null,previousInstructions:p.previousInstructions??[],sourceImage:p.image?{type:p.image.type,detail:p.image.detail??null,filename:p.image.filename??null,mimeType:p.image.mimeType??null}:null};if(i(C)){let e=await u(f,{userId:p.userId,requestId:C.requestId,feature:{key:`media.image.generate`,version:`v1`},targetType:`media-image`,target:w});return e.error?e:{error:void 0,data:{mode:`async`,requestId:C.requestId,feature:{key:`media.image.generate`,version:`v1`},status:C.status}}}if(o(C)){let t=r(C,f.translate(`server:core.routes.ai.generate.error.message`)),n=await c(f,{userId:p.userId,requestId:C.requestId,feature:C.feature,targetType:`media-image`,target:w,requestStartedAt:h,errorMessage:t,usage:C.usage});return n.error?n:{error:{type:`basic`,status:502,message:e.literal(t)},data:void 0}}if(!a(C))return{error:{type:`basic`,status:502,message:e(`server:core.routes.ai.generate.error.message`)},data:void 0};let T=await l(f,{userId:p.userId,response:C,targetType:`media-image`,requestStartedAt:h,target:w});return T.error?T:{error:void 0,data:{mode:`async`,requestId:C.requestId,feature:{key:`media.image.generate`,version:`v1`},status:`processing`}}};export{f as default}; //# sourceMappingURL=media-image-generate.mjs.map