@giveitsmaller/contracts 0.36.0 → 0.38.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 +274 -1
  2. package/accepted-options/image-output-routes.json +56 -12
  3. package/asyncapi/events.yaml +8 -4
  4. package/availability/availability.json +500 -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 +77 -14
  406. package/dist/operations/compress.js +58 -4
  407. package/dist/operations/compress.metadata.js +135 -25
  408. package/dist/operations/convert.d.ts +47 -0
  409. package/dist/operations/convert.js +39 -0
  410. package/dist/operations/convert.metadata.js +56 -0
  411. package/openapi/api.yaml +23 -1
  412. package/operation-capabilities/operation-capabilities.json +19 -2
  413. package/operations/schemas/compress.yaml +412 -96
  414. package/operations/schemas/convert.yaml +158 -6
  415. package/package.json +1 -1
@@ -17,22 +17,39 @@ operation:
17
17
  # image_png -> + optimization_level (PNG-only)
18
18
  # image_avif -> + avif_speed (AVIF-only)
19
19
  # image -> webp/gif/svg/tiff (quality + output_format only)
20
- # The worker reads quality/progressive/optimization_level/avif_speed (+ a
21
- # `lossless` bool the API never emits). It HARDCODES metadata-strip, so
22
- # `metadata` is a single fixed `all`. `mode` (lossy/lossless/auto) and
23
- # `icc_profile` were REMOVED — the worker never read them and the API passed
24
- # them verbatim; image compress is LOSSY-ONLY today (product decision
25
- # 2026-06-20, lossless parked). width/height/fit/auto_orient stay removed
26
- # (EsD1hs5u — worker recompresses only; resize -> thumbnail, format -> convert).
20
+ # The worker reads quality/progressive/optimization_level/avif_speed/lossless
21
+ # (the API now emits lossless) + metadata (strip/keep). The old `mode`
22
+ # (lossy/lossless/auto) was REMOVED (the worker never read it). HISTORY: this
23
+ # header once said width/height/fit/auto_orient "stay removed" and metadata is a
24
+ # fixed `all` — BOTH now superseded by the image-options work: RESIZE
25
+ # (width/height/fit) is back STABLE (v2.97.0, the route-aware Output model);
26
+ # `metadata` is strip/keep (canonical `strip`, deprecated `all`); `auto_orient`
27
+ # is re-added PLANNED (wave-2, below); and the old `icc_profile` is superseded by
28
+ # the decoupled `color_profile` control (wave-2, planned — ICC handling is its
29
+ # own axis, NOT folded into metadata-strip; that fold-in was the silent-colour-
30
+ # shift bug). See the per-option blocks for the live shape.
27
31
  #
28
- # output_format (replicated identically per group): only the LIVE targets
29
- # are advertised — `original` (no-op, default) and `webp` (the one proven
32
+ # output_format (replicated identically per group): the LIVE concrete
33
+ # targets are `original` (no-op, default) and `webp` (the one proven
30
34
  # 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.
35
+ # the compress worker itself never reads output_format). The concrete
36
+ # facade targets jpeg/png/avif stay PRUNED (pruned 2026-06-21) — a dangling
37
+ # coming-soon DUPLICATE of a concrete format is dishonest at source when
38
+ # every such format change is already the convert operation's job (all
39
+ # stable). Re-add a concrete target here only when its compress+format
40
+ # canonicalization actually ships.
41
+ #
42
+ # `auto` / `smallest` are the EXCEPTION (re-added 2026-06-23, planned, the
43
+ # auto-format differentiator): they are SELECTION STRATEGIES, not concrete
44
+ # formats — the server encodes to several candidate formats and returns the
45
+ # best (`auto` = the most suitable; `smallest` = the absolute fewest bytes),
46
+ # reporting the chosen format via the result `mime_type`. `convert` cannot
47
+ # express "pick the smallest" (it needs an explicit target), so these
48
+ # genuinely belong on this compress Output facade, not on convert — that is
49
+ # why they are NOT dangling duplicates. Both stay `per_value_availability:
50
+ # planned` until the API try-all-return-smallest logic + worker proof land
51
+ # (coordinated with api + frontend). They are EXCLUDED from the projection's
52
+ # facade_managed_outputs (not single-target canonicalizations).
36
53
  #
37
54
  # ---- ROUTE-AWARE "OUTPUT" model (image-options Phase 0, tewB37Jg) ----
38
55
  # The user-facing "Output" operation IS this compress op + output_format:
@@ -89,50 +106,97 @@ operation:
89
106
  type: enum
90
107
  values: [quality, target_size]
91
108
  default: quality
92
- per_value_availability:
93
- target_size: { availability: planned }
94
109
  honored_on: [same_format]
95
110
  description: >-
96
111
  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.
112
+ slider drives the encode (default). `target_size` = hit a byte budget via
113
+ the worker's encode-measure-binary-search loop — STABLE (worker-proven on
114
+ staging, lambdas git-870a7c2: re-encode under target + best-effort below
115
+ floor + original-wins, all proven). Optimiser (same_format) route.
100
116
  target_size_bytes:
101
117
  type: integer
102
118
  min: 1024
103
- availability: planned
104
119
  depends_on: { encoding_mode: target_size }
105
120
  honored_on: [same_format]
106
121
  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.
122
+ Target output size in bytes (min 1024 = 1 KiB). The image encode-measure
123
+ loop binary-searches quality to land at or under the target; best-effort
124
+ if the target is unreachable at min quality (the result reports the chosen
125
+ quality + whether the target was met). STABLE (worker-proven, lambdas
126
+ git-870a7c2). Optimiser (same_format) route.
112
127
  metadata:
113
128
  type: enum
114
- values: [all, keep]
115
- default: all
129
+ values: [strip, keep, all]
130
+ default: strip
131
+ per_value_availability:
132
+ all: { availability: deprecated }
116
133
  honored_on: [same_format]
117
134
  description: >-
118
- Metadata handling (optimiser/same_format route). `all` = strip all
135
+ Metadata handling (optimiser/same_format route). `strip` = remove all
119
136
  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.
137
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
138
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
139
+ `all` reading as "strip all" was counterintuitive) — still accepted,
140
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
141
+ at the worker boundary. Any other value is rejected as invalid_options.
142
+ keep_metadata:
143
+ type: array
144
+ items:
145
+ # items.type is `string` (not `enum`) deliberately: the valid categories
146
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
147
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
148
+ # values:[copyright,gps,date] when that lands — likely at this option's
149
+ # stable-flip). Wire-identical either way (a JSON array of strings).
150
+ type: string
151
+ uniqueItems: true
152
+ availability: planned
153
+ depends_on: { metadata: strip }
154
+ honored_on: [same_format]
155
+ description: >-
156
+ Selective per-category metadata keep (optimiser/same_format route):
157
+ preserve ONLY these categories and strip the rest — refines the strip
158
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
159
+ `date` (capture time); combinable. `planned` — the worker does not yet
160
+ do selective keep (use `metadata: keep` to preserve everything), so the
161
+ API returns feature_not_available until lambdas proves it.
122
162
  progressive:
123
163
  type: boolean
124
164
  default: true
125
165
  honored_on: [same_format]
126
166
  description: "Enable progressive JPEG rendering (a low-quality preview renders first, then refines). JPEG only — the optimiser (same_format) route."
167
+ chroma_subsampling:
168
+ type: enum
169
+ values: ["420", "422", "444"]
170
+ honored_on: [same_format]
171
+ description: >-
172
+ JPEG chroma subsampling — the colour-resolution/size trade-off.
173
+ `420` (4:2:0) = smallest, chroma at quarter resolution (default-ish for
174
+ web photos); `422` (4:2:2) = half-horizontal; `444` (4:4:4) = full chroma
175
+ (largest, best for sharp colour edges / text). JPEG ONLY (declared on
176
+ image_jpeg only — ravif hardcodes 4:4:4, libwebp lossy locks 4:2:0).
177
+ String values (the worker strict-matches strings). STABLE — worker-proven
178
+ on staging (lambdas PR #264, deployed git-f2bef85: output JPEG SOF luma
179
+ sampling bytes verified 0x22/0x21/0x11 for 420/422/444). INCOMPATIBLE with
180
+ `lossless` (any chroma value): lossless JPEG is a DCT-coefficient copy and
181
+ cannot resample chroma — see the chroma_subsampling.lossless_conflict
182
+ constraint.
127
183
  output_format:
128
184
  type: enum
129
- values: [original, webp]
185
+ values: [original, webp, auto, smallest]
130
186
  default: original
187
+ per_value_availability:
188
+ auto: { availability: planned }
189
+ smallest: { availability: planned }
131
190
  description: >-
132
191
  Output format. original = keep input format (default); webp = recompress to
133
- WebP — the one live compress+format target (proven on staging). Other format
192
+ WebP — the one live compress+format target (proven on staging). Concrete format
134
193
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
135
- See FORMAT.md.
194
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
195
+ several candidate formats and returns the best (`auto` = the most suitable;
196
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
197
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
198
+ cannot express "pick the smallest"), so they live here and stay `planned` until
199
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
136
200
  lossless:
137
201
  type: boolean
138
202
  default: false
@@ -177,6 +241,33 @@ operation:
177
241
  worker has no such key). `crop`/`scale` = exact dimensions (`scale`
178
242
  deliberately enlarges past source). Applies only when width or height is
179
243
  set, on whichever Output route runs.
244
+ color_profile:
245
+ type: enum
246
+ values: [keep, srgb, strip]
247
+ default: keep
248
+ availability: planned
249
+ honored_on: [same_format, format_change]
250
+ description: >-
251
+ ICC colour-profile handling — its OWN control, DECOUPLED from `metadata`
252
+ (stripping metadata must NOT silently shift colours; that coupling is the
253
+ correctness bug this fixes). `keep` (default) = preserve the embedded
254
+ profile; `srgb` = convert to sRGB (also handles CMYK→sRGB); `strip` = drop
255
+ the profile (smallest — only when the consumer manages colour itself).
256
+ `planned` — the worker does not yet honour it (today the default strips ICC
257
+ during metadata-strip; the fix preserves it). Applies on BOTH Output routes
258
+ (optimiser preserves; transcoder preserves/converts). Worker-proven flip.
259
+ auto_orient:
260
+ type: boolean
261
+ default: true
262
+ availability: planned
263
+ honored_on: [same_format, format_change]
264
+ description: >-
265
+ Bake EXIF orientation into the pixels (honour the camera/device rotation
266
+ tag) so the output displays upright everywhere, then drop the now-redundant
267
+ orientation tag. `planned` — a restored control (was removed): the worker
268
+ must apply the EXIF-orientation transform before encode on both Output
269
+ routes. Default `true` (a behaviour change, proven planned-first). No-op for
270
+ inputs without an orientation tag.
180
271
 
181
272
  image_png:
182
273
  mimes:
@@ -192,14 +283,39 @@ operation:
192
283
  description: "Compression quality (1 = smallest file, 100 = best quality)."
193
284
  metadata:
194
285
  type: enum
195
- values: [all, keep]
196
- default: all
286
+ values: [strip, keep, all]
287
+ default: strip
288
+ per_value_availability:
289
+ all: { availability: deprecated }
197
290
  honored_on: [same_format]
198
291
  description: >-
199
- Metadata handling (optimiser/same_format route). `all` = strip all
292
+ Metadata handling (optimiser/same_format route). `strip` = remove all
200
293
  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.
294
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
295
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
296
+ `all` reading as "strip all" was counterintuitive) — still accepted,
297
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
298
+ at the worker boundary. Any other value is rejected as invalid_options.
299
+ keep_metadata:
300
+ type: array
301
+ items:
302
+ # items.type is `string` (not `enum`) deliberately: the valid categories
303
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
304
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
305
+ # values:[copyright,gps,date] when that lands — likely at this option's
306
+ # stable-flip). Wire-identical either way (a JSON array of strings).
307
+ type: string
308
+ uniqueItems: true
309
+ availability: planned
310
+ depends_on: { metadata: strip }
311
+ honored_on: [same_format]
312
+ description: >-
313
+ Selective per-category metadata keep (optimiser/same_format route):
314
+ preserve ONLY these categories and strip the rest — refines the strip
315
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
316
+ `date` (capture time); combinable. `planned` — the worker does not yet
317
+ do selective keep (use `metadata: keep` to preserve everything), so the
318
+ API returns feature_not_available until lambdas proves it.
203
319
  optimization_level:
204
320
  type: integer
205
321
  min: 0
@@ -209,13 +325,21 @@ operation:
209
325
  description: "PNG optimization effort (0-6, oxipng). Higher = smaller file, slower encode. Default 3. Optimiser (same_format) route."
210
326
  output_format:
211
327
  type: enum
212
- values: [original, webp]
328
+ values: [original, webp, auto, smallest]
213
329
  default: original
330
+ per_value_availability:
331
+ auto: { availability: planned }
332
+ smallest: { availability: planned }
214
333
  description: >-
215
334
  Output format. original = keep input format (default); webp = recompress to
216
- WebP — the one live compress+format target (proven on staging). Other format
335
+ WebP — the one live compress+format target (proven on staging). Concrete format
217
336
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
218
- See FORMAT.md.
337
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
338
+ several candidate formats and returns the best (`auto` = the most suitable;
339
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
340
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
341
+ cannot express "pick the smallest"), so they live here and stay `planned` until
342
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
219
343
  lossy:
220
344
  type: boolean
221
345
  default: false
@@ -258,6 +382,33 @@ operation:
258
382
  worker has no such key). `crop`/`scale` = exact dimensions (`scale`
259
383
  deliberately enlarges past source). Applies only when width or height is
260
384
  set, on whichever Output route runs.
385
+ color_profile:
386
+ type: enum
387
+ values: [keep, srgb, strip]
388
+ default: keep
389
+ availability: planned
390
+ honored_on: [same_format, format_change]
391
+ description: >-
392
+ ICC colour-profile handling — its OWN control, DECOUPLED from `metadata`
393
+ (stripping metadata must NOT silently shift colours; that coupling is the
394
+ correctness bug this fixes). `keep` (default) = preserve the embedded
395
+ profile; `srgb` = convert to sRGB (also handles CMYK→sRGB); `strip` = drop
396
+ the profile (smallest — only when the consumer manages colour itself).
397
+ `planned` — the worker does not yet honour it (today the default strips ICC
398
+ during metadata-strip; the fix preserves it). Applies on BOTH Output routes
399
+ (optimiser preserves; transcoder preserves/converts). Worker-proven flip.
400
+ auto_orient:
401
+ type: boolean
402
+ default: true
403
+ availability: planned
404
+ honored_on: [same_format, format_change]
405
+ description: >-
406
+ Bake EXIF orientation into the pixels (honour the camera/device rotation
407
+ tag) so the output displays upright everywhere, then drop the now-redundant
408
+ orientation tag. `planned` — a restored control (was removed): the worker
409
+ must apply the EXIF-orientation transform before encode on both Output
410
+ routes. Default `true` (a behaviour change, proven planned-first). No-op for
411
+ inputs without an orientation tag.
261
412
 
262
413
  image_avif:
263
414
  availability: beta
@@ -289,37 +440,38 @@ operation:
289
440
  type: enum
290
441
  values: [quality, target_size]
291
442
  default: quality
292
- per_value_availability:
293
- target_size: { availability: planned }
294
443
  honored_on: [same_format]
295
444
  description: >-
296
445
  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.
446
+ slider drives the encode (default). `target_size` = hit a byte budget via
447
+ the worker's encode-measure-binary-search loop — STABLE (worker-proven on
448
+ staging, lambdas git-870a7c2: re-encode under target + best-effort +
449
+ original-wins). AVIF encodes are slow, so the loop caps iterations (a
450
+ 6-iteration cap, ~18s worst case). Optimiser (same_format) route.
301
451
  target_size_bytes:
302
452
  type: integer
303
453
  min: 1024
304
- availability: planned
305
454
  depends_on: { encoding_mode: target_size }
306
455
  honored_on: [same_format]
307
456
  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.
457
+ Target output size in bytes (min 1024 = 1 KiB). The image encode-measure
458
+ loop binary-searches quality to land at or under the target; best-effort
459
+ if the target is unreachable at min quality (the result reports the chosen
460
+ quality + whether the target was met). STABLE (worker-proven, lambdas
461
+ git-870a7c2). Optimiser (same_format) route.
313
462
  metadata:
314
463
  type: enum
315
- values: [all]
316
- default: all
464
+ values: [strip, all]
465
+ default: strip
466
+ per_value_availability:
467
+ all: { availability: deprecated }
317
468
  honored_on: [same_format]
318
469
  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).
470
+ Metadata handling. `strip` = remove all EXIF/IPTC/XMP (default, the only
471
+ supported behaviour). `all` is a DEPRECATED alias of `strip` (migrate to
472
+ `strip`; the API lowers it at the worker boundary). `keep` is NOT offered
473
+ for AVIF — ravif re-encodes from pixels and cannot preserve metadata (the
474
+ worker rejects `keep` as invalid_options).
323
475
  avif_speed:
324
476
  type: integer
325
477
  min: 1
@@ -329,13 +481,21 @@ operation:
329
481
  description: "AVIF encode speed (1-10, ravif). Lower = smaller file, slower encode; higher = faster, larger. Default 4. Optimiser (same_format) route."
330
482
  output_format:
331
483
  type: enum
332
- values: [original, webp]
484
+ values: [original, webp, auto, smallest]
333
485
  default: original
486
+ per_value_availability:
487
+ auto: { availability: planned }
488
+ smallest: { availability: planned }
334
489
  description: >-
335
490
  Output format. original = keep input format (default); webp = recompress to
336
- WebP — the one live compress+format target (proven on staging). Other format
491
+ WebP — the one live compress+format target (proven on staging). Concrete format
337
492
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
338
- See FORMAT.md.
493
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
494
+ several candidate formats and returns the best (`auto` = the most suitable;
495
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
496
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
497
+ cannot express "pick the smallest"), so they live here and stay `planned` until
498
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
339
499
  width:
340
500
  type: integer
341
501
  min: 1
@@ -367,6 +527,33 @@ operation:
367
527
  worker has no such key). `crop`/`scale` = exact dimensions (`scale`
368
528
  deliberately enlarges past source). Applies only when width or height is
369
529
  set, on whichever Output route runs.
530
+ color_profile:
531
+ type: enum
532
+ values: [keep, srgb, strip]
533
+ default: keep
534
+ availability: planned
535
+ honored_on: [same_format, format_change]
536
+ description: >-
537
+ ICC colour-profile handling — its OWN control, DECOUPLED from `metadata`
538
+ (stripping metadata must NOT silently shift colours; that coupling is the
539
+ correctness bug this fixes). `keep` (default) = preserve the embedded
540
+ profile; `srgb` = convert to sRGB (also handles CMYK→sRGB); `strip` = drop
541
+ the profile (smallest — only when the consumer manages colour itself).
542
+ `planned` — the worker does not yet honour it (today the default strips ICC
543
+ during metadata-strip; the fix preserves it). Applies on BOTH Output routes
544
+ (optimiser preserves; transcoder preserves/converts). Worker-proven flip.
545
+ auto_orient:
546
+ type: boolean
547
+ default: true
548
+ availability: planned
549
+ honored_on: [same_format, format_change]
550
+ description: >-
551
+ Bake EXIF orientation into the pixels (honour the camera/device rotation
552
+ tag) so the output displays upright everywhere, then drop the now-redundant
553
+ orientation tag. `planned` — a restored control (was removed): the worker
554
+ must apply the EXIF-orientation transform before encode on both Output
555
+ routes. Default `true` (a behaviour change, proven planned-first). No-op for
556
+ inputs without an orientation tag.
370
557
 
371
558
  # webp split out of the former bundled image group: it is the one input that
372
559
  # carries BOTH Resize (raster, proven in thumbnail-images) AND the optimiser
@@ -392,45 +579,76 @@ operation:
392
579
  type: enum
393
580
  values: [quality, target_size]
394
581
  default: quality
395
- per_value_availability:
396
- target_size: { availability: planned }
397
582
  honored_on: [same_format]
398
583
  description: >-
399
584
  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.
585
+ slider drives the encode (default). `target_size` = hit a byte budget via
586
+ the worker's encode-measure-binary-search loop — STABLE (worker-proven on
587
+ staging, lambdas git-870a7c2: re-encode under target + best-effort below
588
+ floor + original-wins, all proven). Optimiser (same_format) route.
403
589
  target_size_bytes:
404
590
  type: integer
405
591
  min: 1024
406
- availability: planned
407
592
  depends_on: { encoding_mode: target_size }
408
593
  honored_on: [same_format]
409
594
  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.
595
+ Target output size in bytes (min 1024 = 1 KiB). The image encode-measure
596
+ loop binary-searches quality to land at or under the target; best-effort
597
+ if the target is unreachable at min quality (the result reports the chosen
598
+ quality + whether the target was met). STABLE (worker-proven, lambdas
599
+ git-870a7c2). Optimiser (same_format) route.
415
600
  metadata:
416
601
  type: enum
417
- values: [all, keep]
418
- default: all
602
+ values: [strip, keep, all]
603
+ default: strip
604
+ per_value_availability:
605
+ all: { availability: deprecated }
419
606
  honored_on: [same_format]
420
607
  description: >-
421
- Metadata handling (optimiser/same_format route). `all` = strip all
608
+ Metadata handling (optimiser/same_format route). `strip` = remove all
422
609
  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.
610
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
611
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
612
+ `all` reading as "strip all" was counterintuitive) — still accepted,
613
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
614
+ at the worker boundary. Any other value is rejected as invalid_options.
615
+ keep_metadata:
616
+ type: array
617
+ items:
618
+ # items.type is `string` (not `enum`) deliberately: the valid categories
619
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
620
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
621
+ # values:[copyright,gps,date] when that lands — likely at this option's
622
+ # stable-flip). Wire-identical either way (a JSON array of strings).
623
+ type: string
624
+ uniqueItems: true
625
+ availability: planned
626
+ depends_on: { metadata: strip }
627
+ honored_on: [same_format]
628
+ description: >-
629
+ Selective per-category metadata keep (optimiser/same_format route):
630
+ preserve ONLY these categories and strip the rest — refines the strip
631
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
632
+ `date` (capture time); combinable. `planned` — the worker does not yet
633
+ do selective keep (use `metadata: keep` to preserve everything), so the
634
+ API returns feature_not_available until lambdas proves it.
425
635
  output_format:
426
636
  type: enum
427
- values: [original, webp]
637
+ values: [original, webp, auto, smallest]
428
638
  default: original
639
+ per_value_availability:
640
+ auto: { availability: planned }
641
+ smallest: { availability: planned }
429
642
  description: >-
430
643
  Output format. original = keep input format (default); webp = recompress to
431
- WebP — the one live compress+format target (proven on staging). Other format
644
+ WebP — the one live compress+format target (proven on staging). Concrete format
432
645
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
433
- See FORMAT.md.
646
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
647
+ several candidate formats and returns the best (`auto` = the most suitable;
648
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
649
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
650
+ cannot express "pick the smallest"), so they live here and stay `planned` until
651
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
434
652
  lossless:
435
653
  type: boolean
436
654
  default: false
@@ -474,6 +692,33 @@ operation:
474
692
  worker has no such key). `crop`/`scale` = exact dimensions (`scale`
475
693
  deliberately enlarges past source). Applies only when width or height is
476
694
  set, on whichever Output route runs.
695
+ color_profile:
696
+ type: enum
697
+ values: [keep, srgb, strip]
698
+ default: keep
699
+ availability: planned
700
+ honored_on: [same_format, format_change]
701
+ description: >-
702
+ ICC colour-profile handling — its OWN control, DECOUPLED from `metadata`
703
+ (stripping metadata must NOT silently shift colours; that coupling is the
704
+ correctness bug this fixes). `keep` (default) = preserve the embedded
705
+ profile; `srgb` = convert to sRGB (also handles CMYK→sRGB); `strip` = drop
706
+ the profile (smallest — only when the consumer manages colour itself).
707
+ `planned` — the worker does not yet honour it (today the default strips ICC
708
+ during metadata-strip; the fix preserves it). Applies on BOTH Output routes
709
+ (optimiser preserves; transcoder preserves/converts). Worker-proven flip.
710
+ auto_orient:
711
+ type: boolean
712
+ default: true
713
+ availability: planned
714
+ honored_on: [same_format, format_change]
715
+ description: >-
716
+ Bake EXIF orientation into the pixels (honour the camera/device rotation
717
+ tag) so the output displays upright everywhere, then drop the now-redundant
718
+ orientation tag. `planned` — a restored control (was removed): the worker
719
+ must apply the EXIF-orientation transform before encode on both Output
720
+ routes. Default `true` (a behaviour change, proven planned-first). No-op for
721
+ inputs without an orientation tag.
477
722
 
478
723
  # svg is VECTOR: no raster resize (thumbnail-images does not list svg), and the
479
724
  # optimiser `lossless` knob does not apply. SVG compression is SVGO; only
@@ -491,20 +736,31 @@ operation:
491
736
  description: "Compression quality (1 = smallest file, 100 = best quality)."
492
737
  metadata:
493
738
  type: enum
494
- values: [all]
495
- default: all
739
+ values: [strip, all]
740
+ default: strip
741
+ per_value_availability:
742
+ all: { availability: deprecated }
496
743
  honored_on: [same_format]
497
744
  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).
745
+ Metadata handling. `strip` = remove all metadata (default, the only
746
+ supported behaviour). `all` is a DEPRECATED alias of `strip` (migrate to
747
+ `strip`; the API lowers it at the worker boundary). `keep` is NOT offered
748
+ for SVG — SVGO optimises the markup and cannot preserve a metadata block
749
+ (the worker rejects `keep` as invalid_options).
501
750
  output_format:
502
751
  type: enum
503
- values: [original, webp]
752
+ values: [original, webp, auto, smallest]
504
753
  default: original
754
+ per_value_availability:
755
+ auto: { availability: planned }
756
+ smallest: { availability: planned }
505
757
  description: >-
506
758
  Output format. original = keep input format (default); webp = recompress to
507
- WebP. Other format changes are the convert operation's job. See FORMAT.md.
759
+ WebP. Concrete format changes are the convert operation's job. `auto` /
760
+ `smallest` are PLANNED auto-format directives (server picks the best/smallest
761
+ candidate format, reported via the result `mime_type`) — selection strategies,
762
+ not concrete targets, planned until the API logic + worker proof land. See
763
+ FORMAT.md.
508
764
 
509
765
  # gif/tiff: raster Resize is engine-proven (both are in thumbnail-images), but
510
766
  # the optimiser `lossless` knob is WebP-only — not advertised here.
@@ -525,23 +781,56 @@ operation:
525
781
  GIF the worker honours this but real-world size reduction is typically small.
526
782
  metadata:
527
783
  type: enum
528
- values: [all, keep]
529
- default: all
784
+ values: [strip, keep, all]
785
+ default: strip
786
+ per_value_availability:
787
+ all: { availability: deprecated }
530
788
  honored_on: [same_format]
531
789
  description: >-
532
- Metadata handling (optimiser/same_format route). `all` = strip all
790
+ Metadata handling (optimiser/same_format route). `strip` = remove all
533
791
  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.
792
+ (worker-proven, libcaesium; lambdas PR #260, staging round-trip + unit
793
+ test). `all` is a DEPRECATED alias of `strip` (the pre-2026-06-23 token;
794
+ `all` reading as "strip all" was counterintuitive) — still accepted,
795
+ emits Deprecation/Sunset, migrate to `strip`. The API lowers `strip`→`all`
796
+ at the worker boundary. Any other value is rejected as invalid_options.
797
+ keep_metadata:
798
+ type: array
799
+ items:
800
+ # items.type is `string` (not `enum`) deliberately: the valid categories
801
+ # are listed below + enforced by the API at the stable-flip. SDK operation-
802
+ # schema codegen does not yet support typed array-of-enum (restore `enum` +
803
+ # values:[copyright,gps,date] when that lands — likely at this option's
804
+ # stable-flip). Wire-identical either way (a JSON array of strings).
805
+ type: string
806
+ uniqueItems: true
807
+ availability: planned
808
+ depends_on: { metadata: strip }
809
+ honored_on: [same_format]
810
+ description: >-
811
+ Selective per-category metadata keep (optimiser/same_format route):
812
+ preserve ONLY these categories and strip the rest — refines the strip
813
+ path (`metadata: strip`). Valid categories: `copyright`, `gps` (location),
814
+ `date` (capture time); combinable. `planned` — the worker does not yet
815
+ do selective keep (use `metadata: keep` to preserve everything), so the
816
+ API returns feature_not_available until lambdas proves it.
536
817
  output_format:
537
818
  type: enum
538
- values: [original, webp]
819
+ values: [original, webp, auto, smallest]
539
820
  default: original
821
+ per_value_availability:
822
+ auto: { availability: planned }
823
+ smallest: { availability: planned }
540
824
  description: >-
541
825
  Output format. original = keep input format (default); webp = recompress to
542
- WebP — the one live compress+format target (proven on staging). Other format
826
+ WebP — the one live compress+format target (proven on staging). Concrete format
543
827
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
544
- See FORMAT.md.
828
+ `auto` / `smallest` are PLANNED auto-format directives — the server encodes to
829
+ several candidate formats and returns the best (`auto` = the most suitable;
830
+ `smallest` = the absolute fewest bytes), reporting the chosen format via the
831
+ result `mime_type`. They are SELECTION STRATEGIES, not concrete targets (convert
832
+ cannot express "pick the smallest"), so they live here and stay `planned` until
833
+ the API try-all-return-smallest logic + worker proof land. See FORMAT.md.
545
834
  width:
546
835
  type: integer
547
836
  min: 1
@@ -573,6 +862,33 @@ operation:
573
862
  worker has no such key). `crop`/`scale` = exact dimensions (`scale`
574
863
  deliberately enlarges past source). Applies only when width or height is
575
864
  set, on whichever Output route runs.
865
+ color_profile:
866
+ type: enum
867
+ values: [keep, srgb, strip]
868
+ default: keep
869
+ availability: planned
870
+ honored_on: [same_format, format_change]
871
+ description: >-
872
+ ICC colour-profile handling — its OWN control, DECOUPLED from `metadata`
873
+ (stripping metadata must NOT silently shift colours; that coupling is the
874
+ correctness bug this fixes). `keep` (default) = preserve the embedded
875
+ profile; `srgb` = convert to sRGB (also handles CMYK→sRGB); `strip` = drop
876
+ the profile (smallest — only when the consumer manages colour itself).
877
+ `planned` — the worker does not yet honour it (today the default strips ICC
878
+ during metadata-strip; the fix preserves it). Applies on BOTH Output routes
879
+ (optimiser preserves; transcoder preserves/converts). Worker-proven flip.
880
+ auto_orient:
881
+ type: boolean
882
+ default: true
883
+ availability: planned
884
+ honored_on: [same_format, format_change]
885
+ description: >-
886
+ Bake EXIF orientation into the pixels (honour the camera/device rotation
887
+ tag) so the output displays upright everywhere, then drop the now-redundant
888
+ orientation tag. `planned` — a restored control (was removed): the worker
889
+ must apply the EXIF-orientation transform before encode on both Output
890
+ routes. Default `true` (a behaviour change, proven planned-first). No-op for
891
+ inputs without an orientation tag.
576
892
 
577
893
  audio:
578
894
  mimes: