@giveitsmaller/contracts 0.36.0 → 0.37.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 (415) hide show
  1. package/accepted-options/accepted-options.json +206 -1
  2. package/accepted-options/image-output-routes.json +33 -14
  3. package/asyncapi/events.yaml +8 -4
  4. package/availability/availability.json +329 -59
  5. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  6. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  7. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  8. package/dist/openapi/models/AccountLimits.js +1 -1
  9. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  10. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  11. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  12. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  13. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  14. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  15. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  16. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  17. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  18. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  19. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  20. package/dist/openapi/models/AuthErrorType.js +1 -1
  21. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  22. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  23. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  24. package/dist/openapi/models/AvailabilityValue.js +1 -1
  25. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  26. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  27. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  28. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  29. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  30. package/dist/openapi/models/CallbackEventType.js +1 -1
  31. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  32. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  33. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  34. package/dist/openapi/models/CompositionPlan.js +1 -1
  35. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  36. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  37. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  38. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  39. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  40. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  41. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  42. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  43. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  44. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  45. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  46. package/dist/openapi/models/ConnectionSource.js +1 -1
  47. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  48. package/dist/openapi/models/ContactRequest.js +1 -1
  49. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  50. package/dist/openapi/models/ContactSubject.js +1 -1
  51. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  52. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  53. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  54. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  55. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  56. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  57. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  58. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  59. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  60. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  61. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  62. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  63. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  64. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  65. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  66. package/dist/openapi/models/CreditTransaction.js +1 -1
  67. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  68. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  69. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  70. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  71. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  72. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  73. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  74. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  75. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  76. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  77. package/dist/openapi/models/Delivery.d.ts +1 -1
  78. package/dist/openapi/models/Delivery.js +1 -1
  79. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  80. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  81. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  82. package/dist/openapi/models/DeliveryPlan.js +1 -1
  83. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  84. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  85. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  86. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  87. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  88. package/dist/openapi/models/DeliverySelection.js +1 -1
  89. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  90. package/dist/openapi/models/DownloadBundle.js +1 -1
  91. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  92. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  93. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  94. package/dist/openapi/models/EndpointProjection.js +1 -1
  95. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  96. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  97. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  98. package/dist/openapi/models/EstimateQuality.js +1 -1
  99. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  100. package/dist/openapi/models/EstimateRange.js +1 -1
  101. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  102. package/dist/openapi/models/ExternalDestination.js +1 -1
  103. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  104. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  105. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  106. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  107. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  108. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  109. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  110. package/dist/openapi/models/ExternalImportToken.js +1 -1
  111. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  112. package/dist/openapi/models/ExternalSource.js +1 -1
  113. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  114. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  115. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  116. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  117. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  118. package/dist/openapi/models/FeatureViolation.js +1 -1
  119. package/dist/openapi/models/ForgotPasswordRequest.d.ts +1 -1
  120. package/dist/openapi/models/ForgotPasswordRequest.js +1 -1
  121. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  122. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  123. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  124. package/dist/openapi/models/JobDefinition.js +1 -1
  125. package/dist/openapi/models/JobDownload.d.ts +1 -1
  126. package/dist/openapi/models/JobDownload.js +1 -1
  127. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  128. package/dist/openapi/models/JobInputV2.js +1 -1
  129. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  130. package/dist/openapi/models/JobMediaClass.js +1 -1
  131. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  132. package/dist/openapi/models/JobOutputSource.js +1 -1
  133. package/dist/openapi/models/JobResponse.d.ts +1 -1
  134. package/dist/openapi/models/JobResponse.js +1 -1
  135. package/dist/openapi/models/JobStatus.d.ts +1 -1
  136. package/dist/openapi/models/JobStatus.js +1 -1
  137. package/dist/openapi/models/JobType.d.ts +1 -1
  138. package/dist/openapi/models/JobType.js +1 -1
  139. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  140. package/dist/openapi/models/LivenessResponse.js +1 -1
  141. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  142. package/dist/openapi/models/LoginUser200Response.js +1 -1
  143. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  144. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  145. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  146. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  147. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  148. package/dist/openapi/models/LoginUserRequest.js +1 -1
  149. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  150. package/dist/openapi/models/MetadataResponse.js +1 -1
  151. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  152. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  153. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  154. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  155. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  156. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  157. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  158. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  159. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  160. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  161. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  162. package/dist/openapi/models/MultiInputSource.js +1 -1
  163. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  164. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  165. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  166. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  167. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  168. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  169. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  170. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  171. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  172. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  173. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  174. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  175. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  176. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  177. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  178. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  179. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  180. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  181. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  182. package/dist/openapi/models/MultipartPartListing.js +1 -1
  183. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  184. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  185. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  186. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  187. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  188. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  189. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  190. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  191. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  192. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  193. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  194. package/dist/openapi/models/OperationDefinition.js +1 -1
  195. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  196. package/dist/openapi/models/OperationDownload.js +1 -1
  197. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  198. package/dist/openapi/models/OperationInputModel.js +1 -1
  199. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  200. package/dist/openapi/models/OperationResponse.js +1 -1
  201. package/dist/openapi/models/OperationResult.d.ts +24 -1
  202. package/dist/openapi/models/OperationResult.js +3 -1
  203. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  204. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  205. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  206. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  207. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  208. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  209. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  210. package/dist/openapi/models/OperationStatus.js +1 -1
  211. package/dist/openapi/models/OperationType.d.ts +1 -1
  212. package/dist/openapi/models/OperationType.js +1 -1
  213. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  214. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  215. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  216. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  217. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  218. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  219. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  220. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  221. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  222. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  223. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  224. package/dist/openapi/models/OptionSchema.js +1 -1
  225. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  226. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  227. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  228. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  229. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  230. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  231. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  232. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  233. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  234. package/dist/openapi/models/ProcessingClass.js +1 -1
  235. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  236. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  237. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  238. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  239. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  240. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  241. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  242. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  243. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  244. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  245. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  246. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  247. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  248. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  249. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  250. package/dist/openapi/models/ProcessingPlan.js +1 -1
  251. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  252. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  253. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  254. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  255. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  256. package/dist/openapi/models/ReadinessResponse.js +1 -1
  257. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  258. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  259. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  260. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  261. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  262. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  263. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  264. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  265. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  266. package/dist/openapi/models/RetryResponse.js +1 -1
  267. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  268. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  269. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  270. package/dist/openapi/models/SseCompletionBase.js +1 -1
  271. package/dist/openapi/models/SseEventType.d.ts +1 -1
  272. package/dist/openapi/models/SseEventType.js +1 -1
  273. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  274. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  275. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  276. package/dist/openapi/models/SseJobFailedData.js +1 -1
  277. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  278. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  279. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  280. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  281. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  282. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  283. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  284. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  285. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  286. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  287. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  288. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  289. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  290. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  291. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  292. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  293. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +24 -1
  294. package/dist/openapi/models/SseSingleOutputCompletion.js +3 -1
  295. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  296. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  297. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  298. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  299. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  300. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  301. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  302. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  303. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  304. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  305. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  306. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  307. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  308. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  309. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  310. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  311. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  312. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  313. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  314. package/dist/openapi/models/UploadFile403Response.js +1 -1
  315. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  316. package/dist/openapi/models/UploadFile422Response.js +1 -1
  317. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  318. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  319. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  320. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  321. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  322. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  323. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  324. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  325. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  326. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  327. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  328. package/dist/openapi/models/UploadResponse.js +1 -1
  329. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  330. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  331. package/dist/openapi/models/UploadSource.d.ts +1 -1
  332. package/dist/openapi/models/UploadSource.js +1 -1
  333. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  334. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  335. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  336. package/dist/openapi/models/UploadThresholds.js +1 -1
  337. package/dist/openapi/models/UserTier.d.ts +1 -1
  338. package/dist/openapi/models/UserTier.js +1 -1
  339. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  340. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  341. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  342. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  343. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  344. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  345. package/dist/openapi/models/WarningType.d.ts +1 -1
  346. package/dist/openapi/models/WarningType.js +1 -1
  347. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  348. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  349. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  350. package/dist/openapi/models/WebhookPayload.js +1 -1
  351. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  352. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  353. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  354. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  355. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  356. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  357. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  358. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  359. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  360. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  361. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  362. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  363. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  364. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  365. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  366. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  367. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  368. package/dist/openapi/models/WorkflowEdge.js +1 -1
  369. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  370. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  371. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  372. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  373. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  374. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  375. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  376. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  377. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  378. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  379. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  380. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  381. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  382. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  383. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  384. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  385. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  386. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  387. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  388. package/dist/openapi/models/WorkflowSource.js +1 -1
  389. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  390. package/dist/openapi/models/WorkflowStatus.js +1 -1
  391. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  392. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  393. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  394. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  395. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  396. package/dist/openapi/models/WorkflowSummary.js +1 -1
  397. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  398. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  399. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  400. package/dist/openapi/models/WorkflowWarning.js +1 -1
  401. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  402. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  403. package/dist/openapi/runtime.d.ts +1 -1
  404. package/dist/openapi/runtime.js +1 -1
  405. package/dist/operations/compress.d.ts +42 -14
  406. package/dist/operations/compress.js +28 -4
  407. package/dist/operations/compress.metadata.js +95 -25
  408. package/dist/operations/convert.d.ts +33 -0
  409. package/dist/operations/convert.js +27 -0
  410. package/dist/operations/convert.metadata.js +40 -0
  411. package/openapi/api.yaml +23 -1
  412. package/operation-capabilities/operation-capabilities.json +19 -2
  413. package/operations/schemas/compress.yaml +266 -89
  414. package/operations/schemas/convert.yaml +115 -6
  415. package/package.json +1 -1
@@ -25,14 +25,27 @@ operation:
25
25
  # 2026-06-20, lossless parked). width/height/fit/auto_orient stay removed
26
26
  # (EsD1hs5u — worker recompresses only; resize -> thumbnail, format -> convert).
27
27
  #
28
- # output_format (replicated identically per group): only the LIVE targets
29
- # are advertised — `original` (no-op, default) and `webp` (the one proven
28
+ # output_format (replicated identically per group): the LIVE concrete
29
+ # targets are `original` (no-op, default) and `webp` (the one proven
30
30
  # compress+format pass: a single API-canonicalized convert-with-size-cap;
31
- # the compress worker itself never reads output_format). The planned
32
- # facade targets (auto/smallest/jpeg/png/avif) were PRUNED 2026-06-21 —
33
- # dangling coming-soon values are dishonest at source; every other format
34
- # change is the convert operation's job (all stable). Re-add a target here
35
- # only when its compress+format canonicalization actually ships.
31
+ # the compress worker itself never reads output_format). The concrete
32
+ # facade targets jpeg/png/avif stay PRUNED (pruned 2026-06-21) — a dangling
33
+ # coming-soon DUPLICATE of a concrete format is dishonest at source when
34
+ # every such format change is already the convert operation's job (all
35
+ # stable). Re-add a concrete target here only when its compress+format
36
+ # canonicalization actually ships.
37
+ #
38
+ # `auto` / `smallest` are the EXCEPTION (re-added 2026-06-23, planned, the
39
+ # auto-format differentiator): they are SELECTION STRATEGIES, not concrete
40
+ # formats — the server encodes to several candidate formats and returns the
41
+ # best (`auto` = the most suitable; `smallest` = the absolute fewest bytes),
42
+ # reporting the chosen format via the result `mime_type`. `convert` cannot
43
+ # express "pick the smallest" (it needs an explicit target), so these
44
+ # genuinely belong on this compress Output facade, not on convert — that is
45
+ # why they are NOT dangling duplicates. Both stay `per_value_availability:
46
+ # planned` until the API try-all-return-smallest logic + worker proof land
47
+ # (coordinated with api + frontend). They are EXCLUDED from the projection's
48
+ # facade_managed_outputs (not single-target canonicalizations).
36
49
  #
37
50
  # ---- ROUTE-AWARE "OUTPUT" model (image-options Phase 0, tewB37Jg) ----
38
51
  # The user-facing "Output" operation IS this compress op + output_format:
@@ -89,50 +102,97 @@ operation:
89
102
  type: enum
90
103
  values: [quality, target_size]
91
104
  default: quality
92
- per_value_availability:
93
- target_size: { availability: planned }
94
105
  honored_on: [same_format]
95
106
  description: >-
96
107
  Compression mode (mirrors compress.video). `quality` = the `quality`
97
- slider drives the encode (default, live). `target_size` = `planned` —
98
- hit a byte budget via the worker's encode-measure-binary-search loop
99
- (lambdas building; jpeg/webp/avif only). Optimiser (same_format) route.
108
+ slider drives the encode (default). `target_size` = hit a byte budget via
109
+ the worker's encode-measure-binary-search loop — STABLE (worker-proven on
110
+ staging, lambdas git-870a7c2: re-encode under target + best-effort below
111
+ floor + original-wins, all proven). Optimiser (same_format) route.
100
112
  target_size_bytes:
101
113
  type: integer
102
114
  min: 1024
103
- availability: planned
104
115
  depends_on: { encoding_mode: target_size }
105
116
  honored_on: [same_format]
106
117
  description: >-
107
- Target output size in bytes (min 1024 = 1 KiB). `planned` — the image
108
- encode-measure loop binary-searches quality to land at or under the
109
- target; best-effort if the target is unreachable at min quality (the
110
- result reports the chosen quality + whether the target was met).
111
- Optimiser (same_format) route.
118
+ Target output size in bytes (min 1024 = 1 KiB). The image encode-measure
119
+ loop binary-searches quality to land at or under the target; best-effort
120
+ if the target is unreachable at min quality (the result reports the chosen
121
+ quality + whether the target was met). STABLE (worker-proven, lambdas
122
+ git-870a7c2). Optimiser (same_format) route.
112
123
  metadata:
113
124
  type: enum
114
- values: [all, keep]
115
- default: all
125
+ values: [strip, keep, all]
126
+ default: strip
127
+ per_value_availability:
128
+ all: { availability: deprecated }
116
129
  honored_on: [same_format]
117
130
  description: >-
118
- Metadata handling (optimiser/same_format route). `all` = strip all
131
+ Metadata handling (optimiser/same_format route). `strip` = remove all
119
132
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
120
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
121
- unit test). Any other value is rejected as invalid_options.
133
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
134
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
135
+ `all` reading as "strip all" was counterintuitive) — still accepted,
136
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
137
+ at the worker boundary. Any other value is rejected as invalid_options.
138
+ keep_metadata:
139
+ type: array
140
+ items:
141
+ # items.type is `string` (not `enum`) deliberately: the valid categories
142
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
143
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
144
+ # values:[copyright,gps,date] when that lands — likely at this option's
145
+ # stable-flip). Wire-identical either way (a JSON array of strings).
146
+ type: string
147
+ uniqueItems: true
148
+ availability: planned
149
+ depends_on: { metadata: strip }
150
+ honored_on: [same_format]
151
+ description: >-
152
+ Selective per-category metadata keep (optimiser/same_format route):
153
+ preserve ONLY these categories and strip the rest — refines the strip
154
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
155
+ `date` (capture time); combinable. `planned` — the worker does not yet
156
+ do selective keep (use `metadata: keep` to preserve everything), so the
157
+ API returns feature_not_available until lambdas proves it.
122
158
  progressive:
123
159
  type: boolean
124
160
  default: true
125
161
  honored_on: [same_format]
126
162
  description: "Enable progressive JPEG rendering (a low-quality preview renders first, then refines). JPEG only — the optimiser (same_format) route."
163
+ chroma_subsampling:
164
+ type: enum
165
+ values: ["420", "422", "444"]
166
+ honored_on: [same_format]
167
+ description: >-
168
+ JPEG chroma subsampling — the colour-resolution/size trade-off.
169
+ `420` (4:2:0) = smallest, chroma at quarter resolution (default-ish for
170
+ web photos); `422` (4:2:2) = half-horizontal; `444` (4:4:4) = full chroma
171
+ (largest, best for sharp colour edges / text). JPEG ONLY (declared on
172
+ image_jpeg only — ravif hardcodes 4:4:4, libwebp lossy locks 4:2:0).
173
+ String values (the worker strict-matches strings). STABLE — worker-proven
174
+ on staging (lambdas PR #264, deployed git-f2bef85: output JPEG SOF luma
175
+ sampling bytes verified 0x22/0x21/0x11 for 420/422/444). INCOMPATIBLE with
176
+ `lossless` (any chroma value): lossless JPEG is a DCT-coefficient copy and
177
+ cannot resample chroma — see the chroma_subsampling.lossless_conflict
178
+ constraint.
127
179
  output_format:
128
180
  type: enum
129
- values: [original, webp]
181
+ values: [original, webp, auto, smallest]
130
182
  default: original
183
+ per_value_availability:
184
+ auto: { availability: planned }
185
+ smallest: { availability: planned }
131
186
  description: >-
132
187
  Output format. original = keep input format (default); webp = recompress to
133
- WebP — the one live compress+format target (proven on staging). Other format
188
+ WebP — the one live compress+format target (proven on staging). Concrete format
134
189
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
135
- See FORMAT.md.
190
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
191
+ several candidate formats and returns the best (`auto` = the most suitable;
192
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
193
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
194
+ cannot express "pick the smallest"), so they live here and stay `planned` until
195
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
136
196
  lossless:
137
197
  type: boolean
138
198
  default: false
@@ -192,14 +252,39 @@ operation:
192
252
  description: "Compression quality (1 = smallest file, 100 = best quality)."
193
253
  metadata:
194
254
  type: enum
195
- values: [all, keep]
196
- default: all
255
+ values: [strip, keep, all]
256
+ default: strip
257
+ per_value_availability:
258
+ all: { availability: deprecated }
197
259
  honored_on: [same_format]
198
260
  description: >-
199
- Metadata handling (optimiser/same_format route). `all` = strip all
261
+ Metadata handling (optimiser/same_format route). `strip` = remove all
200
262
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
201
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
202
- unit test). Any other value is rejected as invalid_options.
263
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
264
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
265
+ `all` reading as "strip all" was counterintuitive) — still accepted,
266
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
267
+ at the worker boundary. Any other value is rejected as invalid_options.
268
+ keep_metadata:
269
+ type: array
270
+ items:
271
+ # items.type is `string` (not `enum`) deliberately: the valid categories
272
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
273
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
274
+ # values:[copyright,gps,date] when that lands — likely at this option's
275
+ # stable-flip). Wire-identical either way (a JSON array of strings).
276
+ type: string
277
+ uniqueItems: true
278
+ availability: planned
279
+ depends_on: { metadata: strip }
280
+ honored_on: [same_format]
281
+ description: >-
282
+ Selective per-category metadata keep (optimiser/same_format route):
283
+ preserve ONLY these categories and strip the rest — refines the strip
284
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
285
+ `date` (capture time); combinable. `planned` — the worker does not yet
286
+ do selective keep (use `metadata: keep` to preserve everything), so the
287
+ API returns feature_not_available until lambdas proves it.
203
288
  optimization_level:
204
289
  type: integer
205
290
  min: 0
@@ -209,13 +294,21 @@ operation:
209
294
  description: "PNG optimization effort (0-6, oxipng). Higher = smaller file, slower encode. Default 3. Optimiser (same_format) route."
210
295
  output_format:
211
296
  type: enum
212
- values: [original, webp]
297
+ values: [original, webp, auto, smallest]
213
298
  default: original
299
+ per_value_availability:
300
+ auto: { availability: planned }
301
+ smallest: { availability: planned }
214
302
  description: >-
215
303
  Output format. original = keep input format (default); webp = recompress to
216
- WebP — the one live compress+format target (proven on staging). Other format
304
+ WebP — the one live compress+format target (proven on staging). Concrete format
217
305
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
218
- See FORMAT.md.
306
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
307
+ several candidate formats and returns the best (`auto` = the most suitable;
308
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
309
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
310
+ cannot express "pick the smallest"), so they live here and stay `planned` until
311
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
219
312
  lossy:
220
313
  type: boolean
221
314
  default: false
@@ -289,37 +382,38 @@ operation:
289
382
  type: enum
290
383
  values: [quality, target_size]
291
384
  default: quality
292
- per_value_availability:
293
- target_size: { availability: planned }
294
385
  honored_on: [same_format]
295
386
  description: >-
296
387
  Compression mode (mirrors compress.video). `quality` = the `quality`
297
- slider drives the encode (default, live). `target_size` = `planned` —
298
- hit a byte budget via the worker's encode-measure-binary-search loop
299
- (lambdas building; jpeg/webp/avif only). AVIF encodes are slow, so the
300
- loop caps iterations. Optimiser (same_format) route.
388
+ slider drives the encode (default). `target_size` = hit a byte budget via
389
+ the worker's encode-measure-binary-search loop — STABLE (worker-proven on
390
+ staging, lambdas git-870a7c2: re-encode under target + best-effort +
391
+ original-wins). AVIF encodes are slow, so the loop caps iterations (a
392
+ 6-iteration cap, ~18s worst case). Optimiser (same_format) route.
301
393
  target_size_bytes:
302
394
  type: integer
303
395
  min: 1024
304
- availability: planned
305
396
  depends_on: { encoding_mode: target_size }
306
397
  honored_on: [same_format]
307
398
  description: >-
308
- Target output size in bytes (min 1024 = 1 KiB). `planned` — the image
309
- encode-measure loop binary-searches quality to land at or under the
310
- target; best-effort if the target is unreachable at min quality (the
311
- result reports the chosen quality + whether the target was met).
312
- Optimiser (same_format) route.
399
+ Target output size in bytes (min 1024 = 1 KiB). The image encode-measure
400
+ loop binary-searches quality to land at or under the target; best-effort
401
+ if the target is unreachable at min quality (the result reports the chosen
402
+ quality + whether the target was met). STABLE (worker-proven, lambdas
403
+ git-870a7c2). Optimiser (same_format) route.
313
404
  metadata:
314
405
  type: enum
315
- values: [all]
316
- default: all
406
+ values: [strip, all]
407
+ default: strip
408
+ per_value_availability:
409
+ all: { availability: deprecated }
317
410
  honored_on: [same_format]
318
411
  description: >-
319
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (the only supported
320
- value). `keep` is NOT offered for AVIF — ravif re-encodes from pixels
321
- and cannot preserve metadata (the worker rejects `keep` as
322
- invalid_options).
412
+ Metadata handling. `strip` = remove all EXIF/IPTC/XMP (default, the only
413
+ supported behaviour). `all` is a DEPRECATED alias of `strip` (migrate to
414
+ `strip`; the API lowers it at the worker boundary). `keep` is NOT offered
415
+ for AVIF — ravif re-encodes from pixels and cannot preserve metadata (the
416
+ worker rejects `keep` as invalid_options).
323
417
  avif_speed:
324
418
  type: integer
325
419
  min: 1
@@ -329,13 +423,21 @@ operation:
329
423
  description: "AVIF encode speed (1-10, ravif). Lower = smaller file, slower encode; higher = faster, larger. Default 4. Optimiser (same_format) route."
330
424
  output_format:
331
425
  type: enum
332
- values: [original, webp]
426
+ values: [original, webp, auto, smallest]
333
427
  default: original
428
+ per_value_availability:
429
+ auto: { availability: planned }
430
+ smallest: { availability: planned }
334
431
  description: >-
335
432
  Output format. original = keep input format (default); webp = recompress to
336
- WebP — the one live compress+format target (proven on staging). Other format
433
+ WebP — the one live compress+format target (proven on staging). Concrete format
337
434
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
338
- See FORMAT.md.
435
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
436
+ several candidate formats and returns the best (`auto` = the most suitable;
437
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
438
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
439
+ cannot express "pick the smallest"), so they live here and stay `planned` until
440
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
339
441
  width:
340
442
  type: integer
341
443
  min: 1
@@ -392,45 +494,76 @@ operation:
392
494
  type: enum
393
495
  values: [quality, target_size]
394
496
  default: quality
395
- per_value_availability:
396
- target_size: { availability: planned }
397
497
  honored_on: [same_format]
398
498
  description: >-
399
499
  Compression mode (mirrors compress.video). `quality` = the `quality`
400
- slider drives the encode (default, live). `target_size` = `planned` —
401
- hit a byte budget via the worker's encode-measure-binary-search loop
402
- (lambdas building; jpeg/webp/avif only). Optimiser (same_format) route.
500
+ slider drives the encode (default). `target_size` = hit a byte budget via
501
+ the worker's encode-measure-binary-search loop — STABLE (worker-proven on
502
+ staging, lambdas git-870a7c2: re-encode under target + best-effort below
503
+ floor + original-wins, all proven). Optimiser (same_format) route.
403
504
  target_size_bytes:
404
505
  type: integer
405
506
  min: 1024
406
- availability: planned
407
507
  depends_on: { encoding_mode: target_size }
408
508
  honored_on: [same_format]
409
509
  description: >-
410
- Target output size in bytes (min 1024 = 1 KiB). `planned` — the image
411
- encode-measure loop binary-searches quality to land at or under the
412
- target; best-effort if the target is unreachable at min quality (the
413
- result reports the chosen quality + whether the target was met).
414
- Optimiser (same_format) route.
510
+ Target output size in bytes (min 1024 = 1 KiB). The image encode-measure
511
+ loop binary-searches quality to land at or under the target; best-effort
512
+ if the target is unreachable at min quality (the result reports the chosen
513
+ quality + whether the target was met). STABLE (worker-proven, lambdas
514
+ git-870a7c2). Optimiser (same_format) route.
415
515
  metadata:
416
516
  type: enum
417
- values: [all, keep]
418
- default: all
517
+ values: [strip, keep, all]
518
+ default: strip
519
+ per_value_availability:
520
+ all: { availability: deprecated }
419
521
  honored_on: [same_format]
420
522
  description: >-
421
- Metadata handling (optimiser/same_format route). `all` = strip all
523
+ Metadata handling (optimiser/same_format route). `strip` = remove all
422
524
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
423
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
424
- unit test). Any other value is rejected as invalid_options.
525
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
526
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
527
+ `all` reading as "strip all" was counterintuitive) — still accepted,
528
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
529
+ at the worker boundary. Any other value is rejected as invalid_options.
530
+ keep_metadata:
531
+ type: array
532
+ items:
533
+ # items.type is `string` (not `enum`) deliberately: the valid categories
534
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
535
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
536
+ # values:[copyright,gps,date] when that lands — likely at this option's
537
+ # stable-flip). Wire-identical either way (a JSON array of strings).
538
+ type: string
539
+ uniqueItems: true
540
+ availability: planned
541
+ depends_on: { metadata: strip }
542
+ honored_on: [same_format]
543
+ description: >-
544
+ Selective per-category metadata keep (optimiser/same_format route):
545
+ preserve ONLY these categories and strip the rest — refines the strip
546
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
547
+ `date` (capture time); combinable. `planned` — the worker does not yet
548
+ do selective keep (use `metadata: keep` to preserve everything), so the
549
+ API returns feature_not_available until lambdas proves it.
425
550
  output_format:
426
551
  type: enum
427
- values: [original, webp]
552
+ values: [original, webp, auto, smallest]
428
553
  default: original
554
+ per_value_availability:
555
+ auto: { availability: planned }
556
+ smallest: { availability: planned }
429
557
  description: >-
430
558
  Output format. original = keep input format (default); webp = recompress to
431
- WebP — the one live compress+format target (proven on staging). Other format
559
+ WebP — the one live compress+format target (proven on staging). Concrete format
432
560
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
433
- See FORMAT.md.
561
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
562
+ several candidate formats and returns the best (`auto` = the most suitable;
563
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
564
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
565
+ cannot express "pick the smallest"), so they live here and stay `planned` until
566
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
434
567
  lossless:
435
568
  type: boolean
436
569
  default: false
@@ -491,20 +624,31 @@ operation:
491
624
  description: "Compression quality (1 = smallest file, 100 = best quality)."
492
625
  metadata:
493
626
  type: enum
494
- values: [all]
495
- default: all
627
+ values: [strip, all]
628
+ default: strip
629
+ per_value_availability:
630
+ all: { availability: deprecated }
496
631
  honored_on: [same_format]
497
632
  description: >-
498
- Metadata handling. `all` = strip all metadata (the only supported value).
499
- `keep` is NOT offered for SVG — SVGO optimises the markup and cannot
500
- preserve a metadata block (the worker rejects `keep` as invalid_options).
633
+ Metadata handling. `strip` = remove all metadata (default, the only
634
+ supported behaviour). `all` is a DEPRECATED alias of `strip` (migrate to
635
+ `strip`; the API lowers it at the worker boundary). `keep` is NOT offered
636
+ for SVG — SVGO optimises the markup and cannot preserve a metadata block
637
+ (the worker rejects `keep` as invalid_options).
501
638
  output_format:
502
639
  type: enum
503
- values: [original, webp]
640
+ values: [original, webp, auto, smallest]
504
641
  default: original
642
+ per_value_availability:
643
+ auto: { availability: planned }
644
+ smallest: { availability: planned }
505
645
  description: >-
506
646
  Output format. original = keep input format (default); webp = recompress to
507
- WebP. Other format changes are the convert operation's job. See FORMAT.md.
647
+ WebP. Concrete format changes are the convert operation's job. `auto` /
648
+ `smallest` are PLANNED auto-format directives (server picks the best/smallest
649
+ candidate format, reported via the result `mime_type`) — selection strategies,
650
+ not concrete targets, planned until the API logic + worker proof land. See
651
+ FORMAT.md.
508
652
 
509
653
  # gif/tiff: raster Resize is engine-proven (both are in thumbnail-images), but
510
654
  # the optimiser `lossless` knob is WebP-only — not advertised here.
@@ -525,23 +669,56 @@ operation:
525
669
  GIF the worker honours this but real-world size reduction is typically small.
526
670
  metadata:
527
671
  type: enum
528
- values: [all, keep]
529
- default: all
672
+ values: [strip, keep, all]
673
+ default: strip
674
+ per_value_availability:
675
+ all: { availability: deprecated }
530
676
  honored_on: [same_format]
531
677
  description: >-
532
- Metadata handling (optimiser/same_format route). `all` = strip all
678
+ Metadata handling (optimiser/same_format route). `strip` = remove all
533
679
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
534
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
535
- unit test). Any other value is rejected as invalid_options.
680
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
681
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
682
+ `all` reading as "strip all" was counterintuitive) — still accepted,
683
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
684
+ at the worker boundary. Any other value is rejected as invalid_options.
685
+ keep_metadata:
686
+ type: array
687
+ items:
688
+ # items.type is `string` (not `enum`) deliberately: the valid categories
689
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
690
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
691
+ # values:[copyright,gps,date] when that lands — likely at this option's
692
+ # stable-flip). Wire-identical either way (a JSON array of strings).
693
+ type: string
694
+ uniqueItems: true
695
+ availability: planned
696
+ depends_on: { metadata: strip }
697
+ honored_on: [same_format]
698
+ description: >-
699
+ Selective per-category metadata keep (optimiser/same_format route):
700
+ preserve ONLY these categories and strip the rest — refines the strip
701
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
702
+ `date` (capture time); combinable. `planned` — the worker does not yet
703
+ do selective keep (use `metadata: keep` to preserve everything), so the
704
+ API returns feature_not_available until lambdas proves it.
536
705
  output_format:
537
706
  type: enum
538
- values: [original, webp]
707
+ values: [original, webp, auto, smallest]
539
708
  default: original
709
+ per_value_availability:
710
+ auto: { availability: planned }
711
+ smallest: { availability: planned }
540
712
  description: >-
541
713
  Output format. original = keep input format (default); webp = recompress to
542
- WebP — the one live compress+format target (proven on staging). Other format
714
+ WebP — the one live compress+format target (proven on staging). Concrete format
543
715
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
544
- See FORMAT.md.
716
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
717
+ several candidate formats and returns the best (`auto` = the most suitable;
718
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
719
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
720
+ cannot express "pick the smallest"), so they live here and stay `planned` until
721
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
545
722
  width:
546
723
  type: integer
547
724
  min: 1
@@ -8,15 +8,16 @@ operation:
8
8
 
9
9
  mime_groups:
10
10
  image:
11
- # svg is split into convert.image_svg (below): it rasterises to raster
12
- # formats but CANNOT be raster-resized (worker rejects svg resize), so it
13
- # must NOT sit in a group that declares width/height/fit — else the raw
14
- # schema / availability / accepted-options advertise svg resize. Mirrors
15
- # compress.image_svg.
11
+ # svg is split into convert.image_svg + gif into convert.image_gif (below).
12
+ # svg rasterises but CANNOT be raster-resized (worker rejects svg resize), so
13
+ # it must NOT sit in a group that declares width/height/fit. gif is split out
14
+ # because it ALSO targets VIDEO (mp4/webm — the GIF→video transcode, card
15
+ # oEjNe9gT), which a jpeg/png input must not advertise. This `image` group is
16
+ # the still-raster inputs whose only targets are still-image formats. Mirrors
17
+ # compress.image_svg / compress.image* per-format split.
16
18
  mimes:
17
19
  - image/jpeg
18
20
  - image/png
19
- - image/gif
20
21
  - image/webp
21
22
  - image/tiff
22
23
  - image/bmp
@@ -78,6 +79,23 @@ operation:
78
79
  (e.g. `magenta`) to the white default, so the `pattern` rejects a
79
80
  non-hex value as `invalid_options` rather than advertising an inert
80
81
  free-form string (e2e staging-verified 2026-06-22).
82
+ metadata:
83
+ type: enum
84
+ values: [strip, keep]
85
+ default: strip
86
+ availability: planned
87
+ honored_on: [format_change]
88
+ description: >-
89
+ Metadata handling on the format-change (convert/transcoder) route.
90
+ `strip` = remove all EXIF/IPTC/XMP (default), `keep` = preserve. `planned`
91
+ — the convert worker re-encodes from pixels and does not yet preserve
92
+ metadata across a format change, so the API returns feature_not_available
93
+ (rather than "Unknown option" on a format-change request — e2e/api flagged
94
+ 2026-06-23). This is a new (planned) surface, so it carries no deprecated
95
+ `all` alias — unlike compress.image.metadata, which keeps `all` for its
96
+ existing callers. Stable-flip gated on lambdas proving convert-route
97
+ metadata preservation; the honoured target subset may narrow (avif/heic
98
+ targets re-encode and cannot keep).
81
99
  width:
82
100
  type: integer
83
101
  min: 1
@@ -140,6 +158,97 @@ operation:
140
158
  rasterised to JPEG (alpha-flatten). HEX ONLY — non-hex is rejected as
141
159
  `invalid_options` (see convert.image.background).
142
160
 
161
+ # gif is animated raster: it converts to a STILL image (first frame / rasterise —
162
+ # the existing image targets, stable) AND — NEW, planned — to VIDEO (mp4/webm):
163
+ # the GIF→video transcode (animated GIF → muted, play-once video; ~85-95% smaller
164
+ # than the GIF; card oEjNe9gT). Split out of convert.image so ONLY gif advertises
165
+ # the mp4/webm video targets (a jpeg/png input must not show them). The output
166
+ # crosses the media boundary image→video; per codex convergence this stays
167
+ # operation_type=convert (the convert worker's video_convert path owns the ffmpeg
168
+ # mp4/webm encode — NOT a new op, NOT the compression-video worker). mp4/webm are
169
+ # per_value_availability:planned and flip INDEPENDENTLY (like target_size's
170
+ # per-format flip) on lambdas worker-proof + API representability + the API's
171
+ # output-aware billing override (convert.image_gif→video is video-class encode
172
+ # work, NOT a cheap image transcode — the API must not price it as convert.image;
173
+ # API owns that, ticket 0Z4zunCr). Planned-first anti-regression (image-options §2.5).
174
+ image_gif:
175
+ mimes:
176
+ - image/gif
177
+ max_output_pixels: 16000000
178
+ options:
179
+ output_format:
180
+ type: enum
181
+ values: [jpeg, png, webp, avif, gif, tiff, mp4, webm]
182
+ required: true
183
+ per_value_availability:
184
+ mp4: { availability: planned }
185
+ webm: { availability: planned }
186
+ description: >-
187
+ Target format. The still-image targets (jpeg/png/webp/avif/gif/tiff) take
188
+ the first frame / rasterise (stable, today's gif-convert behaviour). `mp4`
189
+ / `webm` are the NEW (planned) GIF→VIDEO transcode targets — the animated
190
+ GIF becomes a muted, play-once video (`mp4` = H.264 / yuv420p / +faststart,
191
+ plays everywhere; `webm` = VP9, smaller). GIFs are silent (no audio
192
+ stream); the GIF infinite-loop becomes a playback attribute (`<video loop>`)
193
+ the player sets, NOT baked into the file. mp4 and webm flip planned→stable
194
+ independently on worker proof.
195
+ quality:
196
+ type: integer
197
+ min: 1
198
+ max: 100
199
+ default: 85
200
+ depends_on: { output_format: [jpeg, webp, avif] }
201
+ honored_on: [format_change]
202
+ description: >-
203
+ Output quality for the lossy STILL-IMAGE targets (jpeg/webp/avif). The
204
+ video targets (mp4/webm) use a sensible default encode quality in v1 —
205
+ there is no exposed CRF knob yet (planned-first; may be added later).
206
+ background:
207
+ type: string
208
+ pattern: "^#[0-9a-fA-F]{6}$"
209
+ depends_on: { output_format: jpeg }
210
+ honored_on: [format_change]
211
+ description: >-
212
+ Background colour as a 6-digit hex (`#RRGGBB`) for a transparent GIF
213
+ flattened to JPEG (alpha-flatten). HEX ONLY — non-hex is rejected as
214
+ `invalid_options` (see convert.image.background).
215
+ metadata:
216
+ type: enum
217
+ values: [strip, keep]
218
+ default: strip
219
+ availability: planned
220
+ honored_on: [format_change]
221
+ description: >-
222
+ Metadata handling on the format-change route (still-image targets).
223
+ `planned` — mirrors convert.image.metadata (the convert worker does not
224
+ yet preserve metadata across a format change). The video targets carry no
225
+ EXIF/IPTC/XMP.
226
+ width:
227
+ type: integer
228
+ min: 1
229
+ max: 16384
230
+ honored_on: [format_change]
231
+ description: >-
232
+ Resize-inside-Output: target width in pixels (1-16384; width*height <=
233
+ max_output_pixels). Applies to the still-image targets; for the planned
234
+ mp4/webm video targets, resize applicability is settled at the worker flip.
235
+ height:
236
+ type: integer
237
+ min: 1
238
+ max: 16384
239
+ honored_on: [format_change]
240
+ description: "Resize-inside-Output: target height in pixels (1-16384; width*height <= max_output_pixels). See `width`."
241
+ fit:
242
+ type: enum
243
+ values: [max, crop, scale]
244
+ default: max
245
+ depends_on: { width: set, height: set, logic: or }
246
+ honored_on: [format_change]
247
+ description: >-
248
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
249
+ and never upscaling; `crop`/`scale` = exact dimensions. Applies only when
250
+ width or height is set.
251
+
143
252
  video:
144
253
  mimes:
145
254
  - video/mp4