@giveitsmaller/contracts 0.48.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/accepted-options/accepted-options.json +31 -54
  2. package/accepted-options/image-output-routes.json +12 -22
  3. package/asyncapi/events.yaml +41 -11
  4. package/availability/availability.json +146 -265
  5. package/dist/asyncapi/OperationMetrics.d.ts +2 -0
  6. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  7. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  8. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  9. package/dist/openapi/models/AccountLimits.js +1 -1
  10. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  11. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  12. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  13. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  14. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  15. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  16. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  17. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  18. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  19. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  20. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  21. package/dist/openapi/models/AuthErrorType.js +1 -1
  22. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  23. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  24. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  25. package/dist/openapi/models/AvailabilityValue.js +1 -1
  26. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  27. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  28. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  29. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  30. package/dist/openapi/models/BillingCheckoutRequest.d.ts +75 -0
  31. package/dist/openapi/models/BillingCheckoutRequest.js +64 -0
  32. package/dist/openapi/models/BillingCheckoutSession.d.ts +42 -0
  33. package/dist/openapi/models/BillingCheckoutSession.js +47 -0
  34. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.d.ts +46 -0
  35. package/dist/openapi/models/BillingCheckoutSuccessEnvelope.js +54 -0
  36. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  37. package/dist/openapi/models/CallbackEventType.js +1 -1
  38. package/dist/openapi/models/CapabilityCondition.d.ts +1 -1
  39. package/dist/openapi/models/CapabilityCondition.js +1 -1
  40. package/dist/openapi/models/CapabilityConditionOneOf.d.ts +1 -1
  41. package/dist/openapi/models/CapabilityConditionOneOf.js +1 -1
  42. package/dist/openapi/models/CapabilityConditionOneOf1.d.ts +1 -1
  43. package/dist/openapi/models/CapabilityConditionOneOf1.js +1 -1
  44. package/dist/openapi/models/CapabilityConditionOneOf2.d.ts +1 -1
  45. package/dist/openapi/models/CapabilityConditionOneOf2.js +1 -1
  46. package/dist/openapi/models/CapabilityConditionOneOf3.d.ts +1 -1
  47. package/dist/openapi/models/CapabilityConditionOneOf3.js +1 -1
  48. package/dist/openapi/models/CapabilityConditionOneOf4.d.ts +1 -1
  49. package/dist/openapi/models/CapabilityConditionOneOf4.js +1 -1
  50. package/dist/openapi/models/CapabilityConditionOneOf5.d.ts +1 -1
  51. package/dist/openapi/models/CapabilityConditionOneOf5.js +1 -1
  52. package/dist/openapi/models/CapabilityConditionOneOf6.d.ts +1 -1
  53. package/dist/openapi/models/CapabilityConditionOneOf6.js +1 -1
  54. package/dist/openapi/models/CapabilityConstraint.d.ts +1 -1
  55. package/dist/openapi/models/CapabilityConstraint.js +1 -1
  56. package/dist/openapi/models/CapabilityInputSpec.d.ts +1 -1
  57. package/dist/openapi/models/CapabilityInputSpec.js +1 -1
  58. package/dist/openapi/models/CapabilityProduces.d.ts +1 -1
  59. package/dist/openapi/models/CapabilityProduces.js +1 -1
  60. package/dist/openapi/models/CapabilityProducesOneOf.d.ts +1 -1
  61. package/dist/openapi/models/CapabilityProducesOneOf.js +1 -1
  62. package/dist/openapi/models/CapabilityProducesOneOf1.d.ts +1 -1
  63. package/dist/openapi/models/CapabilityProducesOneOf1.js +1 -1
  64. package/dist/openapi/models/CapabilityProducesOneOf2.d.ts +1 -1
  65. package/dist/openapi/models/CapabilityProducesOneOf2.js +1 -1
  66. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  67. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  68. package/dist/openapi/models/CodegenSource.d.ts +1 -1
  69. package/dist/openapi/models/CodegenSource.js +1 -1
  70. package/dist/openapi/models/CodegenSourceInput.d.ts +1 -1
  71. package/dist/openapi/models/CodegenSourceInput.js +1 -1
  72. package/dist/openapi/models/CodegenSourceJob.d.ts +1 -1
  73. package/dist/openapi/models/CodegenSourceJob.js +1 -1
  74. package/dist/openapi/models/CodegenSourceJobSource.d.ts +1 -1
  75. package/dist/openapi/models/CodegenSourceJobSource.js +1 -1
  76. package/dist/openapi/models/CodegenSourceOperation.d.ts +1 -1
  77. package/dist/openapi/models/CodegenSourceOperation.js +1 -1
  78. package/dist/openapi/models/CodegenUploadPlaceholder.d.ts +1 -1
  79. package/dist/openapi/models/CodegenUploadPlaceholder.js +1 -1
  80. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  81. package/dist/openapi/models/CompositionPlan.js +1 -1
  82. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  83. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  84. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  85. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  86. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  87. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  88. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  89. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  90. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  91. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  92. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  93. package/dist/openapi/models/ConnectionSource.js +1 -1
  94. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  95. package/dist/openapi/models/ContactRequest.js +1 -1
  96. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  97. package/dist/openapi/models/ContactSubject.js +1 -1
  98. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  99. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  100. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  101. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  102. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  103. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  104. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  105. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  106. package/dist/openapi/models/CreateBillingCheckoutSession422Response.d.ts +23 -0
  107. package/dist/openapi/models/CreateBillingCheckoutSession422Response.js +51 -0
  108. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  109. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  110. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  111. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  112. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  113. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  114. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  115. package/dist/openapi/models/CreditTransaction.js +1 -1
  116. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  117. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  118. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  119. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  120. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  121. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  122. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  123. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  124. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  125. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  126. package/dist/openapi/models/Delivery.d.ts +1 -1
  127. package/dist/openapi/models/Delivery.js +1 -1
  128. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  129. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  130. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  131. package/dist/openapi/models/DeliveryPlan.js +1 -1
  132. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  133. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  134. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  135. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  136. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  137. package/dist/openapi/models/DeliverySelection.js +1 -1
  138. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  139. package/dist/openapi/models/DownloadBundle.js +1 -1
  140. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  141. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  142. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  143. package/dist/openapi/models/EndpointProjection.js +1 -1
  144. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  145. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  146. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  147. package/dist/openapi/models/EstimateQuality.js +1 -1
  148. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  149. package/dist/openapi/models/EstimateRange.js +1 -1
  150. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  151. package/dist/openapi/models/ExternalDestination.js +1 -1
  152. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  153. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  154. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  155. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  156. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  157. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  158. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  159. package/dist/openapi/models/ExternalImportToken.js +1 -1
  160. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  161. package/dist/openapi/models/ExternalSource.js +1 -1
  162. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  163. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  164. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  165. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  166. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  167. package/dist/openapi/models/FeatureViolation.js +1 -1
  168. package/dist/openapi/models/ForgotPasswordRequest.d.ts +1 -1
  169. package/dist/openapi/models/ForgotPasswordRequest.js +1 -1
  170. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  171. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  172. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  173. package/dist/openapi/models/JobDefinition.js +1 -1
  174. package/dist/openapi/models/JobDownload.d.ts +1 -1
  175. package/dist/openapi/models/JobDownload.js +1 -1
  176. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  177. package/dist/openapi/models/JobInputV2.js +1 -1
  178. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  179. package/dist/openapi/models/JobMediaClass.js +1 -1
  180. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  181. package/dist/openapi/models/JobOutputSource.js +1 -1
  182. package/dist/openapi/models/JobResponse.d.ts +1 -1
  183. package/dist/openapi/models/JobResponse.js +1 -1
  184. package/dist/openapi/models/JobStatus.d.ts +1 -1
  185. package/dist/openapi/models/JobStatus.js +1 -1
  186. package/dist/openapi/models/JobType.d.ts +1 -1
  187. package/dist/openapi/models/JobType.js +1 -1
  188. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  189. package/dist/openapi/models/LivenessResponse.js +1 -1
  190. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  191. package/dist/openapi/models/LoginUser200Response.js +1 -1
  192. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  193. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  194. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  195. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  196. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  197. package/dist/openapi/models/LoginUserRequest.js +1 -1
  198. package/dist/openapi/models/LongFormConcurrencyLimitResponse.d.ts +1 -1
  199. package/dist/openapi/models/LongFormConcurrencyLimitResponse.js +1 -1
  200. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.d.ts +1 -1
  201. package/dist/openapi/models/LongFormConcurrencyLimitResponseAllOfLinks.js +1 -1
  202. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  203. package/dist/openapi/models/MetadataResponse.js +1 -1
  204. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  205. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  206. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  207. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  208. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  209. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  210. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  211. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  212. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  213. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  214. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  215. package/dist/openapi/models/MultiInputSource.js +1 -1
  216. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  217. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  218. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  219. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  220. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  221. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  222. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  223. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  224. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  225. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  226. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  227. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  228. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  229. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  230. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  231. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  232. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  233. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  234. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  235. package/dist/openapi/models/MultipartPartListing.js +1 -1
  236. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  237. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  238. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  239. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  240. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  241. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  242. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  243. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  244. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  245. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  246. package/dist/openapi/models/OperationCapability.d.ts +1 -1
  247. package/dist/openapi/models/OperationCapability.js +1 -1
  248. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  249. package/dist/openapi/models/OperationDefinition.js +1 -1
  250. package/dist/openapi/models/OperationDownload.d.ts +27 -4
  251. package/dist/openapi/models/OperationDownload.js +5 -1
  252. package/dist/openapi/models/OperationInputModel.d.ts +2 -2
  253. package/dist/openapi/models/OperationInputModel.js +2 -2
  254. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  255. package/dist/openapi/models/OperationResponse.js +1 -1
  256. package/dist/openapi/models/OperationResult.d.ts +1 -1
  257. package/dist/openapi/models/OperationResult.js +1 -1
  258. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  259. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  260. package/dist/openapi/models/OperationResultMetrics.d.ts +28 -5
  261. package/dist/openapi/models/OperationResultMetrics.js +5 -1
  262. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  263. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  264. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  265. package/dist/openapi/models/OperationStatus.js +1 -1
  266. package/dist/openapi/models/OperationType.d.ts +3 -3
  267. package/dist/openapi/models/OperationType.js +3 -3
  268. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  269. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  270. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  271. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  272. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  273. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  274. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  275. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  276. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  277. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  278. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  279. package/dist/openapi/models/OptionSchema.js +1 -1
  280. package/dist/openapi/models/OutputProperties.d.ts +1 -1
  281. package/dist/openapi/models/OutputProperties.js +1 -1
  282. package/dist/openapi/models/OutputPropertiesIsAnimated.d.ts +1 -1
  283. package/dist/openapi/models/OutputPropertiesIsAnimated.js +1 -1
  284. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  285. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  286. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  287. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  288. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  289. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  290. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  291. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  292. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  293. package/dist/openapi/models/ProcessingClass.js +1 -1
  294. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  295. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  296. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  297. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  298. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  299. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  300. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  301. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  302. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  303. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  304. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  305. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  306. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  307. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  308. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  309. package/dist/openapi/models/ProcessingPlan.js +1 -1
  310. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  311. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  312. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  313. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  314. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  315. package/dist/openapi/models/ReadinessResponse.js +1 -1
  316. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  317. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  318. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  319. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  320. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  321. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  322. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  323. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  324. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  325. package/dist/openapi/models/RetryResponse.js +1 -1
  326. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  327. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  328. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  329. package/dist/openapi/models/SseCompletionBase.js +1 -1
  330. package/dist/openapi/models/SseEventType.d.ts +1 -1
  331. package/dist/openapi/models/SseEventType.js +1 -1
  332. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  333. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  334. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  335. package/dist/openapi/models/SseJobFailedData.js +1 -1
  336. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  337. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  338. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  339. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  340. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  341. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  342. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  343. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  344. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  345. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  346. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  347. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  348. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  349. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  350. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  351. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  352. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  353. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  354. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  355. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  356. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  357. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  358. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  359. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  360. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  361. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  362. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  363. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  364. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  365. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  366. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  367. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  368. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  369. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  370. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  371. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  372. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  373. package/dist/openapi/models/UploadFile403Response.js +1 -1
  374. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  375. package/dist/openapi/models/UploadFile422Response.js +1 -1
  376. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  377. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  378. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  379. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  380. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  381. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  382. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  383. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  384. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  385. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  386. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  387. package/dist/openapi/models/UploadResponse.js +1 -1
  388. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  389. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  390. package/dist/openapi/models/UploadSource.d.ts +1 -1
  391. package/dist/openapi/models/UploadSource.js +1 -1
  392. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  393. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  394. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  395. package/dist/openapi/models/UploadThresholds.js +1 -1
  396. package/dist/openapi/models/UserTier.d.ts +1 -1
  397. package/dist/openapi/models/UserTier.js +1 -1
  398. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  399. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  400. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  401. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  402. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  403. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  404. package/dist/openapi/models/WarningType.d.ts +1 -1
  405. package/dist/openapi/models/WarningType.js +1 -1
  406. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  407. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  408. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  409. package/dist/openapi/models/WebhookPayload.js +1 -1
  410. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  411. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  412. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  413. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  414. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  415. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  416. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  417. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  418. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  419. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  420. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  421. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  422. package/dist/openapi/models/WorkflowCreditSummary.d.ts +22 -56
  423. package/dist/openapi/models/WorkflowCreditSummary.js +4 -24
  424. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  425. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  426. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  427. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  428. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  429. package/dist/openapi/models/WorkflowEdge.js +1 -1
  430. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  431. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  432. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  433. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  434. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  435. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  436. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  437. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  438. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  439. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  440. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  441. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  442. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  443. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  444. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  445. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  446. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  447. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  448. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  449. package/dist/openapi/models/WorkflowSource.js +1 -1
  450. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  451. package/dist/openapi/models/WorkflowStatus.js +1 -1
  452. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  453. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  454. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  455. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  456. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  457. package/dist/openapi/models/WorkflowSummary.js +1 -1
  458. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  459. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  460. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  461. package/dist/openapi/models/WorkflowWarning.js +1 -1
  462. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  463. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  464. package/dist/openapi/models/index.d.ts +4 -0
  465. package/dist/openapi/models/index.js +4 -0
  466. package/dist/openapi/runtime.d.ts +1 -1
  467. package/dist/openapi/runtime.js +1 -1
  468. package/dist/operations/compress.d.ts +27 -12
  469. package/dist/operations/compress.js +24 -0
  470. package/dist/operations/compress.metadata.js +10 -42
  471. package/dist/operations/convert.d.ts +3 -6
  472. package/dist/operations/convert.js +2 -5
  473. package/dist/operations/convert.metadata.js +1 -15
  474. package/dist/operations/image_watermark.d.ts +19 -0
  475. package/dist/operations/image_watermark.js +12 -0
  476. package/dist/operations/image_watermark.metadata.js +5 -4
  477. package/dist/operations/text_watermark.metadata.js +0 -2
  478. package/dist/operations/thumbnail.d.ts +6 -24
  479. package/dist/operations/thumbnail.js +0 -12
  480. package/dist/operations/thumbnail.metadata.js +0 -33
  481. package/openapi/api.yaml +349 -63
  482. package/operation-capabilities/operation-capabilities.json +53 -3
  483. package/operations/schemas/compress.yaml +142 -139
  484. package/operations/schemas/convert.yaml +39 -42
  485. package/operations/schemas/image_watermark.yaml +140 -31
  486. package/operations/schemas/text_watermark.yaml +17 -17
  487. package/operations/schemas/thumbnail.yaml +40 -77
  488. package/package.json +1 -1
@@ -104,15 +104,23 @@ operation:
104
104
  automatically to hit the size budget, so this option is inactive.
105
105
  encoding_mode:
106
106
  type: enum
107
- values: [quality, target_size]
107
+ values: [quality, target_size, auto_quality]
108
108
  default: quality
109
+ # auto_quality flipped planned->stable 2026-06-30 on the lambdas staging
110
+ # proof (compression-image git-122a329, harness PR #294): the SSIM-target
111
+ # search is calibrated — the `good` preset measures ~0.95 across jpeg/webp/
112
+ # avif and the best/good/fair/low ladder is monotonic. All three
113
+ # encoding_mode values are now live (ticket PQMWCqfR; no ADR).
109
114
  honored_on: [same_format]
110
115
  description: >-
111
116
  Compression mode. `quality` = the `quality` slider drives the encode
112
117
  (default). `target_size` = automatically find the highest quality that
113
118
  fits a byte budget (set via `target_size_bytes`); if the budget can't be
114
119
  met even at the lowest quality, the closest result is returned, and the
115
- original is kept if re-encoding wouldn't be smaller.
120
+ original is kept if re-encoding wouldn't be smaller. `auto_quality` = hit
121
+ a named perceptual-quality target (set via `quality_preset`) and let the
122
+ worker pick the encoder quality that meets it — the perceptual twin of
123
+ `target_size` (which targets bytes); the result reports the chosen quality.
116
124
  target_size_bytes:
117
125
  type: integer
118
126
  min: 1024
@@ -124,6 +132,20 @@ operation:
124
132
  be met even at the lowest quality, the closest result is returned (the
125
133
  result reports the chosen quality and whether the target was met). Requires
126
134
  `encoding_mode: target_size`.
135
+ quality_preset:
136
+ type: enum
137
+ values: [best, good, fair, low]
138
+ default: good
139
+ depends_on: { encoding_mode: auto_quality }
140
+ honored_on: [same_format]
141
+ description: >-
142
+ Named perceptual-quality target for `encoding_mode: auto_quality`
143
+ (best > good > fair > low; `good` is the default). The worker runs a
144
+ perceptual-target search and picks the encoder quality that meets the
145
+ named tier — the wire carries the NAME only, so the tier→target mapping
146
+ stays worker-internal and calibration-tunable without a contract change.
147
+ Requires `encoding_mode: auto_quality`. The achieved perceptual score is
148
+ reported on the result as `metrics.measured_quality` (+ `metrics.quality_metric`).
127
149
  metadata:
128
150
  type: enum
129
151
  values: [strip, keep, all]
@@ -136,27 +158,11 @@ operation:
136
158
  preserve EXIF, colour profile, and XMP. `all` is a DEPRECATED alias of
137
159
  `strip` (kept for older callers; emits Deprecation/Sunset headers — migrate
138
160
  to `strip`). Any other value is rejected.
139
- keep_metadata:
140
- type: array
141
- items:
142
- # JSON-Schema `enum:` (not the DSL `type: enum`) on a string item: the
143
- # SDK operation-schema parser's valid array-item types are
144
- # {number,integer,float,string,object} — `type: enum` is rejected, so the
145
- # categories are carried as a JSON-Schema `enum` constraint on a string
146
- # item. Consumers (FE) read the allowed categories structurally from the
147
- # sidecar; SDK codegen sees a string array (the enum key is value-only) —
148
- # wire-identical (a JSON array of strings).
149
- type: string
150
- enum: [copyright, gps, date]
151
- uniqueItems: true
152
- availability: planned
153
- depends_on: { metadata: strip }
154
- honored_on: [same_format]
155
- description: >-
156
- Selectively keep only certain metadata categories and strip the rest —
157
- refines `metadata: strip`. Allowed categories: `copyright`, `gps`
158
- (location), `date` (capture time); combinable. `planned` — selective keep
159
- is not yet supported (use `metadata: keep` to preserve everything).
161
+ # keep_metadata (selective copyright/gps/date) REMOVED 2026-06-30 (hub honesty
162
+ # decision): the compress worker (libcaesium) does ALL-OR-NOTHING keep/strip
163
+ # only — no per-category control, and selective EXIF/XMP surgery is unscheduled
164
+ # (lambdas, M-L build). Use `metadata: keep` for all-or-nothing preservation.
165
+ # Re-add the selective primitive when that worker support is built + scheduled.
160
166
  progressive:
161
167
  type: boolean
162
168
  default: true
@@ -262,7 +268,14 @@ operation:
262
268
  max: 100
263
269
  default: 80
264
270
  honored_on: [same_format]
265
- description: "Compression quality (1 = smallest file, 100 = best quality)."
271
+ description: >-
272
+ Compression quality (1-100). For PNG this is the SINGLE lossy/lossless
273
+ control: `quality` < 100 applies lossy palette quantization (imagequant —
274
+ licence-cleared for our server-side SaaS backend, `kkajDFXD`; the value is
275
+ the quantization level), while `quality: 100` keeps the PNG lossless (oxipng
276
+ optimisation only — tune the lossless effort via `optimization_level`).
277
+ 1 = smallest file, 100 = best quality / lossless. There is no separate
278
+ lossy/lossless toggle for PNG — it is purely quality-driven.
266
279
  metadata:
267
280
  type: enum
268
281
  values: [strip, keep, all]
@@ -275,27 +288,11 @@ operation:
275
288
  preserve EXIF, colour profile, and XMP. `all` is a DEPRECATED alias of
276
289
  `strip` (kept for older callers; emits Deprecation/Sunset headers — migrate
277
290
  to `strip`). Any other value is rejected.
278
- keep_metadata:
279
- type: array
280
- items:
281
- # JSON-Schema `enum:` (not the DSL `type: enum`) on a string item: the
282
- # SDK operation-schema parser's valid array-item types are
283
- # {number,integer,float,string,object} — `type: enum` is rejected, so the
284
- # categories are carried as a JSON-Schema `enum` constraint on a string
285
- # item. Consumers (FE) read the allowed categories structurally from the
286
- # sidecar; SDK codegen sees a string array (the enum key is value-only) —
287
- # wire-identical (a JSON array of strings).
288
- type: string
289
- enum: [copyright, gps, date]
290
- uniqueItems: true
291
- availability: planned
292
- depends_on: { metadata: strip }
293
- honored_on: [same_format]
294
- description: >-
295
- Selectively keep only certain metadata categories and strip the rest —
296
- refines `metadata: strip`. Allowed categories: `copyright`, `gps`
297
- (location), `date` (capture time); combinable. `planned` — selective keep
298
- is not yet supported (use `metadata: keep` to preserve everything).
291
+ # keep_metadata (selective copyright/gps/date) REMOVED 2026-06-30 (hub honesty
292
+ # decision): the compress worker (libcaesium) does ALL-OR-NOTHING keep/strip
293
+ # only — no per-category control, and selective EXIF/XMP surgery is unscheduled
294
+ # (lambdas, M-L build). Use `metadata: keep` for all-or-nothing preservation.
295
+ # Re-add the selective primitive when that worker support is built + scheduled.
299
296
  optimization_level:
300
297
  type: integer
301
298
  min: 0
@@ -319,14 +316,6 @@ operation:
319
316
  reporting the chosen format via the result `mime_type`. They are selection
320
317
  strategies, not concrete targets, and stay `planned` until supported. See
321
318
  FORMAT.md.
322
- lossy:
323
- type: boolean
324
- default: false
325
- availability: planned
326
- honored_on: [same_format]
327
- description: >-
328
- Lossy PNG palette quantization — a large saving for flat-colour PNGs.
329
- `planned` — not yet supported.
330
319
  width:
331
320
  type: integer
332
321
  min: 1
@@ -380,9 +369,12 @@ operation:
380
369
  which can drop other (non-orientation) metadata even with `metadata: keep`.
381
370
 
382
371
  image_avif:
383
- availability: beta
384
- # avif INPUT decode shipped in the compress-image worker via libheif
385
- # (lambdas w34Taquf, #210). beta: live + opt-in, shape-stable.
372
+ # avif INPUT compress (libheif decode + ravif re-encode) is now GA-STABLE —
373
+ # flipped beta->stable 2026-06-30 on the lambdas attestation: decode+re-encode
374
+ # proven 1-46MP (quality / target_size / auto_quality all green), AND the
375
+ # large-image crash path is now guarded (#295, compression-image git-74b3161,
376
+ # digest-verified): inputs >~70MP return a clean non-retryable InvalidRequest
377
+ # instead of an OOM process-kill, so GA carries no crash path.
386
378
  # image/heic is intentionally NOT a compress input: compress is decode-only
387
379
  # and there is no HEIC encoder, so the worker rejects a declared image/heic
388
380
  # (FormatMismatch). heic stays on convert+thumbnail.
@@ -407,16 +399,25 @@ operation:
407
399
  automatically to hit the size budget, so this option is inactive.
408
400
  encoding_mode:
409
401
  type: enum
410
- values: [quality, target_size]
402
+ values: [quality, target_size, auto_quality]
411
403
  default: quality
404
+ # auto_quality flipped planned->stable 2026-06-30 on the lambdas staging
405
+ # proof (compression-image git-122a329, harness PR #294): the SSIM-target
406
+ # search is calibrated — the `good` preset measures ~0.95 across jpeg/webp/
407
+ # avif and the best/good/fair/low ladder is monotonic. All three
408
+ # encoding_mode values are now live (ticket PQMWCqfR; no ADR).
412
409
  honored_on: [same_format]
413
410
  description: >-
414
411
  Compression mode. `quality` = the `quality` slider drives the encode
415
412
  (default). `target_size` = automatically find the highest quality that
416
413
  fits a byte budget (set via `target_size_bytes`); if the budget can't be
417
414
  met even at the lowest quality, the closest result is returned, and the
418
- original is kept if re-encoding wouldn't be smaller. AVIF encoding is
419
- slower, so the search is bounded and may stop slightly above the budget.
415
+ original is kept if re-encoding wouldn't be smaller. `auto_quality` = hit
416
+ a named perceptual-quality target (set via `quality_preset`) and let the
417
+ worker pick the encoder quality that meets it — the perceptual twin of
418
+ `target_size` (which targets bytes); the result reports the chosen quality.
419
+ AVIF encoding is slower, so the search is bounded and may stop slightly
420
+ above the budget.
420
421
  target_size_bytes:
421
422
  type: integer
422
423
  min: 1024
@@ -428,6 +429,20 @@ operation:
428
429
  be met even at the lowest quality, the closest result is returned (the
429
430
  result reports the chosen quality and whether the target was met). Requires
430
431
  `encoding_mode: target_size`.
432
+ quality_preset:
433
+ type: enum
434
+ values: [best, good, fair, low]
435
+ default: good
436
+ depends_on: { encoding_mode: auto_quality }
437
+ honored_on: [same_format]
438
+ description: >-
439
+ Named perceptual-quality target for `encoding_mode: auto_quality`
440
+ (best > good > fair > low; `good` is the default). The worker runs a
441
+ perceptual-target search and picks the encoder quality that meets the
442
+ named tier — the wire carries the NAME only, so the tier→target mapping
443
+ stays worker-internal and calibration-tunable without a contract change.
444
+ Requires `encoding_mode: auto_quality`. The achieved perceptual score is
445
+ reported on the result as `metrics.measured_quality` (+ `metrics.quality_metric`).
431
446
  metadata:
432
447
  type: enum
433
448
  values: [strip, all]
@@ -495,14 +510,21 @@ operation:
495
510
  type: enum
496
511
  values: [keep, srgb, strip]
497
512
  default: keep
498
- availability: planned
499
513
  honored_on: [same_format, format_change]
500
514
  description: >-
501
515
  Colour-profile handling — a dedicated control, separate from `metadata` so
502
516
  that stripping metadata never silently shifts colours. `keep` (default) =
503
- preserve the embedded colour profile; `srgb` = convert to sRGB (also
504
- handles CMYK → sRGB); `strip` = drop the profile (smallest — only when the
505
- consumer manages colour itself). `planned` — not yet supported.
517
+ preserve your colours: embed the ICC profile where the output format can
518
+ carry one, otherwise convert to sRGB and bake the colours in so they survive
519
+ (never a silent drop — for AVIF the gamut is baked to sRGB); `srgb` = convert
520
+ to sRGB (transform pixels to sRGB, emit untagged — no embedded ICC, the web
521
+ default; CMYK/grayscale best-effort); `strip` = drop the profile (smallest —
522
+ only when the consumer manages colour itself). All three values are live on
523
+ compress AVIF — `srgb` flipped planned->stable 2026-06-30 on the lambdas
524
+ proof (wide-gamut-p3-icc.avif: srgb bakes untagged, whole-image RMSE 0.041 /
525
+ 92% pixels shifted vs strip). Note: on AVIF `keep` and `srgb` both bake the
526
+ gamut to sRGB by design, so keep_px == srgb_px; the proving inequality is
527
+ srgb != strip, which holds.
506
528
  auto_orient:
507
529
  type: boolean
508
530
  default: true
@@ -536,15 +558,23 @@ operation:
536
558
  automatically to hit the size budget, so this option is inactive.
537
559
  encoding_mode:
538
560
  type: enum
539
- values: [quality, target_size]
561
+ values: [quality, target_size, auto_quality]
540
562
  default: quality
563
+ # auto_quality flipped planned->stable 2026-06-30 on the lambdas staging
564
+ # proof (compression-image git-122a329, harness PR #294): the SSIM-target
565
+ # search is calibrated — the `good` preset measures ~0.95 across jpeg/webp/
566
+ # avif and the best/good/fair/low ladder is monotonic. All three
567
+ # encoding_mode values are now live (ticket PQMWCqfR; no ADR).
541
568
  honored_on: [same_format]
542
569
  description: >-
543
570
  Compression mode. `quality` = the `quality` slider drives the encode
544
571
  (default). `target_size` = automatically find the highest quality that
545
572
  fits a byte budget (set via `target_size_bytes`); if the budget can't be
546
573
  met even at the lowest quality, the closest result is returned, and the
547
- original is kept if re-encoding wouldn't be smaller.
574
+ original is kept if re-encoding wouldn't be smaller. `auto_quality` = hit
575
+ a named perceptual-quality target (set via `quality_preset`) and let the
576
+ worker pick the encoder quality that meets it — the perceptual twin of
577
+ `target_size` (which targets bytes); the result reports the chosen quality.
548
578
  target_size_bytes:
549
579
  type: integer
550
580
  min: 1024
@@ -556,6 +586,20 @@ operation:
556
586
  be met even at the lowest quality, the closest result is returned (the
557
587
  result reports the chosen quality and whether the target was met). Requires
558
588
  `encoding_mode: target_size`.
589
+ quality_preset:
590
+ type: enum
591
+ values: [best, good, fair, low]
592
+ default: good
593
+ depends_on: { encoding_mode: auto_quality }
594
+ honored_on: [same_format]
595
+ description: >-
596
+ Named perceptual-quality target for `encoding_mode: auto_quality`
597
+ (best > good > fair > low; `good` is the default). The worker runs a
598
+ perceptual-target search and picks the encoder quality that meets the
599
+ named tier — the wire carries the NAME only, so the tier→target mapping
600
+ stays worker-internal and calibration-tunable without a contract change.
601
+ Requires `encoding_mode: auto_quality`. The achieved perceptual score is
602
+ reported on the result as `metrics.measured_quality` (+ `metrics.quality_metric`).
559
603
  metadata:
560
604
  type: enum
561
605
  values: [strip, keep, all]
@@ -568,27 +612,11 @@ operation:
568
612
  preserve EXIF, colour profile, and XMP. `all` is a DEPRECATED alias of
569
613
  `strip` (kept for older callers; emits Deprecation/Sunset headers — migrate
570
614
  to `strip`). Any other value is rejected.
571
- keep_metadata:
572
- type: array
573
- items:
574
- # JSON-Schema `enum:` (not the DSL `type: enum`) on a string item: the
575
- # SDK operation-schema parser's valid array-item types are
576
- # {number,integer,float,string,object} — `type: enum` is rejected, so the
577
- # categories are carried as a JSON-Schema `enum` constraint on a string
578
- # item. Consumers (FE) read the allowed categories structurally from the
579
- # sidecar; SDK codegen sees a string array (the enum key is value-only) —
580
- # wire-identical (a JSON array of strings).
581
- type: string
582
- enum: [copyright, gps, date]
583
- uniqueItems: true
584
- availability: planned
585
- depends_on: { metadata: strip }
586
- honored_on: [same_format]
587
- description: >-
588
- Selectively keep only certain metadata categories and strip the rest —
589
- refines `metadata: strip`. Allowed categories: `copyright`, `gps`
590
- (location), `date` (capture time); combinable. `planned` — selective keep
591
- is not yet supported (use `metadata: keep` to preserve everything).
615
+ # keep_metadata (selective copyright/gps/date) REMOVED 2026-06-30 (hub honesty
616
+ # decision): the compress worker (libcaesium) does ALL-OR-NOTHING keep/strip
617
+ # only — no per-category control, and selective EXIF/XMP surgery is unscheduled
618
+ # (lambdas, M-L build). Use `metadata: keep` for all-or-nothing preservation.
619
+ # Re-add the selective primitive when that worker support is built + scheduled.
592
620
  output_format:
593
621
  type: enum
594
622
  values: [original, webp, auto, smallest]
@@ -647,8 +675,6 @@ operation:
647
675
  type: enum
648
676
  values: [keep, srgb, strip]
649
677
  default: keep
650
- per_value_availability:
651
- srgb: { availability: planned }
652
678
  honored_on: [same_format, format_change]
653
679
  description: >-
654
680
  Colour-profile handling — a dedicated control, separate from `metadata` so
@@ -657,8 +683,9 @@ operation:
657
683
  carry one, otherwise convert to sRGB and bake the colours in so they survive
658
684
  (never a silent drop); `srgb` = convert to sRGB (transform pixels to sRGB, emit untagged — no embedded ICC, the web default; CMYK/grayscale best-effort);
659
685
  `strip` = drop the profile (smallest — only when the consumer manages colour
660
- itself). On the WebP same-format route `srgb` is `planned` (the byte-level
661
- optimiser does not yet run the sRGB transform); `keep` and `strip` are live.
686
+ itself). All three values are live on the WebP same-format route — the sRGB
687
+ pixel transform is staging-proven (lambdas compression-image git-13b5000:
688
+ srgb output untagged + a real pixel shift vs strip).
662
689
  auto_orient:
663
690
  type: boolean
664
691
  default: true
@@ -677,13 +704,11 @@ operation:
677
704
  mimes:
678
705
  - image/svg+xml
679
706
  options:
680
- quality:
681
- type: integer
682
- min: 1
683
- max: 100
684
- default: 80
685
- honored_on: [same_format]
686
- description: "Compression quality (1 = smallest file, 100 = best quality)."
707
+ # No `quality`: compress SVG is SVG->SVG via SVGO (lossless vector optimise);
708
+ # `quality` is never passed to the worker, so a quality slider here is a no-op
709
+ # (removed — lambdas worker-code investigation, the SVG-quality ticket). Raster
710
+ # output (the webp facade route) goes through convert, which carries its own
711
+ # quality on convert.image_svg.
687
712
  metadata:
688
713
  type: enum
689
714
  values: [strip, all]
@@ -740,27 +765,11 @@ operation:
740
765
  preserve EXIF, colour profile, and XMP. `all` is a DEPRECATED alias of
741
766
  `strip` (kept for older callers; emits Deprecation/Sunset headers — migrate
742
767
  to `strip`). Any other value is rejected.
743
- keep_metadata:
744
- type: array
745
- items:
746
- # JSON-Schema `enum:` (not the DSL `type: enum`) on a string item: the
747
- # SDK operation-schema parser's valid array-item types are
748
- # {number,integer,float,string,object} — `type: enum` is rejected, so the
749
- # categories are carried as a JSON-Schema `enum` constraint on a string
750
- # item. Consumers (FE) read the allowed categories structurally from the
751
- # sidecar; SDK codegen sees a string array (the enum key is value-only) —
752
- # wire-identical (a JSON array of strings).
753
- type: string
754
- enum: [copyright, gps, date]
755
- uniqueItems: true
756
- availability: planned
757
- depends_on: { metadata: strip }
758
- honored_on: [same_format]
759
- description: >-
760
- Selectively keep only certain metadata categories and strip the rest —
761
- refines `metadata: strip`. Allowed categories: `copyright`, `gps`
762
- (location), `date` (capture time); combinable. `planned` — selective keep
763
- is not yet supported (use `metadata: keep` to preserve everything).
768
+ # keep_metadata (selective copyright/gps/date) REMOVED 2026-06-30 (hub honesty
769
+ # decision): the compress worker (libcaesium) does ALL-OR-NOTHING keep/strip
770
+ # only — no per-category control, and selective EXIF/XMP surgery is unscheduled
771
+ # (lambdas, M-L build). Use `metadata: keep` for all-or-nothing preservation.
772
+ # Re-add the selective primitive when that worker support is built + scheduled.
764
773
  output_format:
765
774
  type: enum
766
775
  values: [original, webp, auto, smallest]
@@ -1185,13 +1194,11 @@ operation:
1185
1194
  max: 100
1186
1195
  default: 50
1187
1196
  description: "Compression quality (1 = smallest, 100 = best). The only document compression option supported today."
1188
- image_quality:
1189
- type: integer
1190
- min: 1
1191
- max: 100
1192
- default: 80
1193
- availability: planned
1194
- description: "Recompress embedded images at this quality level (1 = smallest, 100 = best). `planned` — not yet supported (use `quality`)."
1197
+ # image_quality REMOVED 2026-06-30 (hub honesty decision): redundant — the
1198
+ # zip-based document worker ALREADY recompresses embedded jpeg/png/webp/gif
1199
+ # via libcaesium, driven by the general `quality` option (capability is LIVE).
1200
+ # The separate `image_quality` knob was unwired (a planned no-op). Re-add only
1201
+ # if a distinct image-vs-document quality split is genuinely wanted (small wiring).
1195
1202
  strip_macros:
1196
1203
  type: boolean
1197
1204
  default: true
@@ -1221,13 +1228,11 @@ operation:
1221
1228
  max: 100
1222
1229
  default: 50
1223
1230
  description: "Compression quality (1 = smallest, 100 = best). The only document compression option supported today."
1224
- image_quality:
1225
- type: integer
1226
- min: 1
1227
- max: 100
1228
- default: 80
1229
- availability: planned
1230
- description: "Recompress embedded images at this quality level. `planned` — not yet supported (use `quality`)."
1231
+ # image_quality REMOVED 2026-06-30 (hub honesty decision): redundant — the
1232
+ # zip-based document worker ALREADY recompresses embedded jpeg/png/webp/gif
1233
+ # via libcaesium, driven by the general `quality` option (capability is LIVE).
1234
+ # The separate `image_quality` knob was unwired (a planned no-op). Re-add only
1235
+ # if a distinct image-vs-document quality split is genuinely wanted (small wiring).
1231
1236
  strip_metadata:
1232
1237
  type: boolean
1233
1238
  default: true
@@ -1250,13 +1255,11 @@ operation:
1250
1255
  max: 100
1251
1256
  default: 50
1252
1257
  description: "Compression quality (1 = smallest, 100 = best). The only document compression option supported today."
1253
- image_quality:
1254
- type: integer
1255
- min: 1
1256
- max: 100
1257
- default: 80
1258
- availability: planned
1259
- description: "Recompress embedded images at this quality level. `planned` — not yet supported (use `quality`)."
1258
+ # image_quality REMOVED 2026-06-30 (hub honesty decision): redundant — the
1259
+ # zip-based document worker ALREADY recompresses embedded jpeg/png/webp/gif
1260
+ # via libcaesium, driven by the general `quality` option (capability is LIVE).
1261
+ # The separate `image_quality` knob was unwired (a planned no-op). Re-add only
1262
+ # if a distinct image-vs-document quality split is genuinely wanted (small wiring).
1260
1263
  font_subsetting:
1261
1264
  type: boolean
1262
1265
  default: true
@@ -25,20 +25,16 @@ operation:
25
25
  - image/avif
26
26
  - image/heic
27
27
  - image/heif
28
- per_mime_availability:
29
- # avif/heic/heif input decode in the convert worker via libheif (the
30
- # opt-in beta tier — heavier/newer decode path). beta: live + opt-in,
31
- # shape-stable. avif/heic re-added after the v2.67.0 crash-window drop
32
- # (aYPbNVKD Phase 2). image/heif is the accept-list ALIAS of the HEIF
33
- # container (same libheif decode as heic) — added 2026-06-24, lambdas
34
- # PR #265 (deployed git-7b13754) staging-proved heif→jpeg + heif→png
35
- # (decode→encode via libheif; pure accept-list widening, no verify_mime).
36
- # Kept beta to match heic/avif (the libheif tier); flip the whole tier
37
- # to stable as a deliberate GA-finish if product wants it.
38
- # (avif is also a valid OUTPUT via output_format — ravif encode.)
39
- image/avif: { availability: beta }
40
- image/heic: { availability: beta }
41
- image/heif: { availability: beta }
28
+ # avif/heic/heif input decode in the convert worker via libheif is now
29
+ # GA-STABLE — no per_mime_availability tag = stable (the group default),
30
+ # promoted beta→stable 2026-06-30 on the lambdas GA attestation: libheif
31
+ # decode (w34Taquf #210/#211; heif accept-list alias #265, git-7b13754)
32
+ # has been LIVE on staging since 2026-06-14, e2e decode-smoke green, zero
33
+ # decode failures since. Standard files are GA; exotic variants (10-bit /
34
+ # HDR / multi-image HEIC) decode best-effort. heif is the accept-list ALIAS
35
+ # of the HEIF container (same libheif decode as heic; pure accept-list
36
+ # widening, no verify_mime). (avif is also a valid OUTPUT via output_format
37
+ # — ravif encode.)
42
38
  # convert.image is the TRANSCODER leg of the route-aware image "Output"
43
39
  # model (FORMAT.md §"Route-aware Output model"): a format_change Output
44
40
  # route (output_format != input) runs here. Its options carry
@@ -183,18 +179,17 @@ operation:
183
179
  rejected (see convert.image.background).
184
180
 
185
181
  # gif is animated raster: it converts to a STILL image (first frame / rasterise —
186
- # the existing image targets, stable) AND — NEW, planned — to VIDEO (mp4/webm):
187
- # the GIF→video transcode (animated GIF → muted, play-once video; ~85-95% smaller
188
- # than the GIF; card oEjNe9gT). Split out of convert.image so ONLY gif advertises
189
- # the mp4/webm video targets (a jpeg/png input must not show them). The output
182
+ # the existing image targets, stable) AND to VIDEO (mp4/webm): the GIF→video
183
+ # transcode (animated GIF → muted, play-once video; ~85-95% smaller than the
184
+ # GIF; card oEjNe9gT). Split out of convert.image so ONLY gif advertises the
185
+ # mp4/webm video targets (a jpeg/png input must not show them). The output
190
186
  # crosses the media boundary image→video; per codex convergence this stays
191
187
  # operation_type=convert (the convert worker's video_convert path owns the ffmpeg
192
188
  # mp4/webm encode — NOT a new op, NOT the compression-video worker). mp4/webm are
193
- # per_value_availability:planned and flip INDEPENDENTLY (like target_size's
194
- # per-format flip) on lambdas worker-proof + API representability + the API's
195
- # output-aware billing override (convert.image_gif→video is video-class encode
196
- # work, NOT a cheap image transcode — the API must not price it as convert.image;
197
- # API owns that, ticket 0Z4zunCr). Planned-first anti-regression (image-options §2.5).
189
+ # now STABLE (flipped planned→stable in v2.114.0 #258 on lambdas worker-proof);
190
+ # the API applies an output-aware billing override (convert.image_gif→video is
191
+ # video-class encode work, NOT a cheap image transcode — priced as video, not
192
+ # convert.image; API owns that, ticket 0Z4zunCr).
198
193
  image_gif:
199
194
  mimes:
200
195
  - image/gif
@@ -232,16 +227,12 @@ operation:
232
227
  Background colour as a 6-digit hex (`#RRGGBB`) for a transparent GIF
233
228
  flattened to JPEG (alpha-flatten). HEX ONLY — a non-hex value is
234
229
  rejected (see convert.image.background).
235
- metadata:
236
- type: enum
237
- values: [strip, keep]
238
- default: strip
239
- availability: planned
240
- honored_on: [format_change]
241
- description: >-
242
- Metadata handling for the still-image targets. `planned` — metadata is
243
- not yet preserved across a format change. The video targets carry no
244
- EXIF/IPTC/XMP.
230
+ # metadata REMOVED 2026-06-30 (hub honesty decision; won't-do): the GIF INPUT
231
+ # carries no standard EXIF/IPTC/XMP/ICC, so "preserve metadata across the
232
+ # format change" has nothing to preserve (colour is already handled by
233
+ # color_profile=keep's sRGB bake). The video targets carry no metadata either.
234
+ # (convert.image — a real raster group — keeps its metadata option; only the
235
+ # GIF-input group's metadata was a phantom.)
245
236
  width:
246
237
  type: integer
247
238
  min: 1
@@ -330,22 +321,28 @@ operation:
330
321
  options:
331
322
  output_format:
332
323
  type: enum
333
- values: [mp4, webm, ogg, gif]
324
+ values: [mp4, webm, ogg, gif, mov, mkv]
334
325
  required: true
335
326
  # The video codec is DETERMINED by the target container, NOT a caller
336
327
  # choice: the convert-video worker hard-wires it per container
337
- # (mp4 -> H.264/libx264, webm -> VP9, ogg -> Theora, gif -> palette;
338
- # lambdas-confirmed video_convert.rs). The former `codec` option
339
- # (enum h264/h265/vp9/av1) was a SILENT NO-OP — the worker never read
340
- # it — so it was removed (honesty pass, 2026-06-20). To choose a codec,
341
- # use compress.video (which has a real, worker-honored `codec`).
342
- description: "Target format. The video codec is fixed by the container (mp4->H.264, webm->VP9, ogg->Theora, gif->palette) — not caller-selectable."
328
+ # (mp4 -> H.264/libx264, webm -> VP9, ogg -> Theora, gif -> palette,
329
+ # mov -> H.264/libx264, mkv -> H.264/libx264; lambdas-confirmed
330
+ # video_convert.rs). mov + mkv added 2026-06-30 on the lambdas staging proof
331
+ # (operation-convert #287, prove-convert-video-formats-staging.sh 2/2 PASS:
332
+ # mp4->mov [Content-Type video/quicktime, vcodec h264] + mp4->mkv
333
+ # [video/x-matroska, vcodec h264], real re-encodes, container-by-extension).
334
+ # Added STABLE — no per_value gating, matching the rest of this enum (the
335
+ # proof is in hand; they are h264 in a different container, same codec as the
336
+ # already-GA mp4). The former `codec` option (enum h264/h265/vp9/av1) was a
337
+ # SILENT NO-OP — the worker never read it — so it was removed (honesty pass,
338
+ # 2026-06-20). To choose a codec, use compress.video (real worker-honored `codec`).
339
+ description: "Target format. The video codec is fixed by the container (mp4->H.264, webm->VP9, ogg->Theora, gif->palette, mov->H.264, mkv->H.264) — not caller-selectable."
343
340
  crf:
344
341
  type: integer
345
342
  min: 0
346
343
  max: 51
347
344
  default: 23
348
- depends_on: { output_format: [mp4, webm, ogg] }
345
+ depends_on: { output_format: [mp4, webm, ogg, mov, mkv] }
349
346
  # Renamed `quality` -> `crf` (2026-06-20) to match compress.video.crf
350
347
  # and stop the misnomer: this is a Constant Rate Factor (0=best/lossless,
351
348
  # 51=worst), the INVERSE of convert.image.quality (1-100, higher=better).
@@ -365,7 +362,7 @@ operation:
365
362
  Trim from beginning in seconds (absent = from the start). The clip
366
363
  is cut before transcoding — the user's "trim a video then make a GIF"
367
364
  path. The kept clip is [`trim_start`, input_duration − `trim_end`]. Live
368
- for all video outputs (gif/mp4/webm/ogg).
365
+ for all video outputs.
369
366
  trim_end:
370
367
  type: float
371
368
  min: 0