Skip to content

Media Credit Costs

Image, basic, and signature examples cost 1 base credit.

Carousel generations use CAROUSEL_CREDIT_PRICE.

Video generations use VIDEO_CREDIT_PRICE with duration thresholds. Long and extra-long durations use the configured multipliers and extra-long price constants.

A carousel is priced for WorkflowCarouselItemCount panels (5). When fewer arrive (moderation blocks, or a sequential provider returning fewer):

  • Fewer than max(2, ceil(priced / 2)): the carousel fails and the full price is refunded.
  • Otherwise: the delivered panels are kept, and min(ceil(Cost × undelivered / priced), Cost) whole credits are refunded as a carousel_partial_refund credit event. Rounding favours the user.
  • The refund is taken off the carousel’s recorded spend (spent_standard_credits / spent_full_access_credits). A later admin fail therefore refunds only what is left.
  • The refund never exceeds the recorded spend. A carousel with no recorded spend, such as one covered by the monthly media quota, consumed no credits and gets no partial refund.
  • A carousel that arrives with all panels is charged in full, unchanged. It completes through the same guarded transaction as a short one and simply refunds nothing.

NSFW examples and prompts use NSFW_CREDITS_MULTIPLIER. Image-to-video NSFW generation uses the image-to-video NSFW video multiplier where implemented.

Free edits may reduce cost to zero for source edits. The price logic subtracts one NSFW-adjusted unit for free image edits and clamps at zero.

  • apps/brisket/src/utils/credits-price.ts