@giveitsmaller/contracts 0.35.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 +263 -1
  2. package/accepted-options/image-output-routes.json +69 -17
  3. package/asyncapi/events.yaml +8 -4
  4. package/availability/availability.json +507 -51
  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 +60 -14
  406. package/dist/operations/compress.js +43 -4
  407. package/dist/operations/compress.metadata.js +111 -8
  408. package/dist/operations/convert.d.ts +54 -0
  409. package/dist/operations/convert.js +42 -0
  410. package/dist/operations/convert.metadata.js +65 -0
  411. package/openapi/api.yaml +23 -1
  412. package/operation-capabilities/operation-capabilities.json +19 -2
  413. package/operations/schemas/compress.yaml +384 -93
  414. package/operations/schemas/convert.yaml +190 -2
  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:
@@ -44,13 +57,16 @@ operation:
44
57
  # see FORMAT.md §"Route-aware Output model"). The derived per-(media, route,
45
58
  # output_format) projection is accepted-options/image-output-routes.json.
46
59
  #
47
- # RESIZE-INSIDE-OUTPUT ships STABLE (hub-directed fast-path, 2026-06-22):
48
- # width / height / fit + max_output_pixels — backed by the PROVEN image
49
- # resize engine (thumbnail-images Lanczos, 1-16384, 16MP cap; live), routed
50
- # onto the Output path. Resize is a REPLACE transform inside Output (ONE
51
- # transformed output) — NOT thumbnail's derivative/preview semantics;
52
- # thumbnail.yaml stays the preview op untouched. Flat keys keyed to the
53
- # Output (compress) op, matching thumbnail.yaml's resize shape.
60
+ # RESIZE-INSIDE-OUTPUT ships STABLE (hub-directed fast-path, 2026-06-22;
61
+ # engine corrected per API worker-verification n4CmaDE8, 2026-06-23):
62
+ # width / height / fit + max_output_pixels. The CONVERT worker is the image
63
+ # resize engine for the WHOLE Output op (image_convert.rs, Lanczos, 1-16384,
64
+ # 16MP cap, svg-reject; live #257) — the compress optimiser has NO resize.
65
+ # The API routes BOTH arms through convert (same_format = convert to the same
66
+ # token; format_change = convert to the target), so these keys are declared
67
+ # HERE (the facade entry) AND on convert.image (where the worker reads them +
68
+ # the API re-validates the rewritten op). REPLACE transform, ONE output —
69
+ # NOT thumbnail's derivative/preview semantics; thumbnail.yaml untouched.
54
70
  #
55
71
  # STABLE on the optimiser (same_format) route (all worker-proven 2026-06-23):
56
72
  # lossless (jpeg/webp) — worker honours the `lossless` bool, API emits it.
@@ -67,7 +83,7 @@ operation:
67
83
  image_jpeg:
68
84
  mimes:
69
85
  - image/jpeg
70
- # Resize-inside-Output (planned) shares thumbnail-image's 16MP output-area
86
+ # Resize-inside-Output shares the convert resize engine's 16MP output-area
71
87
  # wall — the per-axis 16384 cap can't express it (FORMAT.md §max_output_pixels).
72
88
  max_output_pixels: 16000000
73
89
  options:
@@ -76,42 +92,120 @@ operation:
76
92
  min: 1
77
93
  max: 100
78
94
  default: 80
95
+ depends_on: { encoding_mode: quality }
79
96
  honored_on: [same_format]
80
- description: "Compression quality (1 = smallest file, 100 = best quality)."
97
+ description: >-
98
+ Compression quality (1 = smallest file, 100 = best quality). Active in
99
+ `quality` mode (default); in `target_size` mode the encode-measure loop
100
+ owns quality, so this option is inactive.
101
+ encoding_mode:
102
+ type: enum
103
+ values: [quality, target_size]
104
+ default: quality
105
+ honored_on: [same_format]
106
+ description: >-
107
+ Compression mode (mirrors compress.video). `quality` = the `quality`
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.
112
+ target_size_bytes:
113
+ type: integer
114
+ min: 1024
115
+ depends_on: { encoding_mode: target_size }
116
+ honored_on: [same_format]
117
+ description: >-
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.
81
123
  metadata:
82
124
  type: enum
83
- values: [all, keep]
84
- default: all
125
+ values: [strip, keep, all]
126
+ default: strip
127
+ per_value_availability:
128
+ all: { availability: deprecated }
85
129
  honored_on: [same_format]
86
130
  description: >-
87
- Metadata handling (optimiser/same_format route). `all` = strip all
131
+ Metadata handling (optimiser/same_format route). `strip` = remove all
88
132
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
89
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
90
- 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.
91
158
  progressive:
92
159
  type: boolean
93
160
  default: true
94
161
  honored_on: [same_format]
95
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.
96
179
  output_format:
97
180
  type: enum
98
- values: [original, webp]
181
+ values: [original, webp, auto, smallest]
99
182
  default: original
183
+ per_value_availability:
184
+ auto: { availability: planned }
185
+ smallest: { availability: planned }
100
186
  description: >-
101
187
  Output format. original = keep input format (default); webp = recompress to
102
- 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
103
189
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
104
- 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.
105
196
  lossless:
106
197
  type: boolean
107
198
  default: false
199
+ depends_on: { encoding_mode: quality }
108
200
  honored_on: [same_format]
109
201
  description: >-
110
202
  Lossless JPEG re-optimisation (optimiser path): optimises the Huffman
111
203
  tables WITHOUT re-encoding pixels — bit-preserving on the pixel data,
112
204
  no quality loss (it cannot recover detail a lossy JPEG already lost).
113
205
  STABLE — the compress-image worker honours the `lossless` bool
114
- (un-parked 2026-06-23). Optimiser (same_format) route only.
206
+ (un-parked 2026-06-23). Only in `quality` mode — incompatible with
207
+ `target_size` (the byte-budget loop is inherently lossy). Optimiser
208
+ (same_format) route only.
115
209
  width:
116
210
  type: integer
117
211
  min: 1
@@ -120,8 +214,9 @@ operation:
120
214
  description: >-
121
215
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
122
216
  max_output_pixels). Resize the image as part of Output (replace semantics,
123
- ONE transformed output) using the proven image resize engine (Lanczos,
124
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
217
+ ONE transformed output) using the proven convert resize engine (Lanczos;
218
+ the API routes Output resize through the convert worker, BOTH routes —
219
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
125
220
  Optional; omit to keep the source dimensions.
126
221
  height:
127
222
  type: integer
@@ -136,9 +231,12 @@ operation:
136
231
  depends_on: { width: set, height: set, logic: or }
137
232
  honored_on: [same_format, format_change]
138
233
  description: >-
139
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
140
- crop/scale = exact dimensions. Applies only when width or height is set,
141
- on whichever Output route runs.
234
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
235
+ and NEVER upscaling — it caps at the source dimensions. This IS the
236
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
237
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
238
+ deliberately enlarges past source). Applies only when width or height is
239
+ set, on whichever Output route runs.
142
240
 
143
241
  image_png:
144
242
  mimes:
@@ -154,14 +252,39 @@ operation:
154
252
  description: "Compression quality (1 = smallest file, 100 = best quality)."
155
253
  metadata:
156
254
  type: enum
157
- values: [all, keep]
158
- default: all
255
+ values: [strip, keep, all]
256
+ default: strip
257
+ per_value_availability:
258
+ all: { availability: deprecated }
159
259
  honored_on: [same_format]
160
260
  description: >-
161
- Metadata handling (optimiser/same_format route). `all` = strip all
261
+ Metadata handling (optimiser/same_format route). `strip` = remove all
162
262
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
163
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
164
- 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.
165
288
  optimization_level:
166
289
  type: integer
167
290
  min: 0
@@ -171,13 +294,21 @@ operation:
171
294
  description: "PNG optimization effort (0-6, oxipng). Higher = smaller file, slower encode. Default 3. Optimiser (same_format) route."
172
295
  output_format:
173
296
  type: enum
174
- values: [original, webp]
297
+ values: [original, webp, auto, smallest]
175
298
  default: original
299
+ per_value_availability:
300
+ auto: { availability: planned }
301
+ smallest: { availability: planned }
176
302
  description: >-
177
303
  Output format. original = keep input format (default); webp = recompress to
178
- 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
179
305
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
180
- 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.
181
312
  lossy:
182
313
  type: boolean
183
314
  default: false
@@ -197,8 +328,9 @@ operation:
197
328
  description: >-
198
329
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
199
330
  max_output_pixels). Resize the image as part of Output (replace semantics,
200
- ONE transformed output) using the proven image resize engine (Lanczos,
201
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
331
+ ONE transformed output) using the proven convert resize engine (Lanczos;
332
+ the API routes Output resize through the convert worker, BOTH routes —
333
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
202
334
  Optional; omit to keep the source dimensions.
203
335
  height:
204
336
  type: integer
@@ -213,9 +345,12 @@ operation:
213
345
  depends_on: { width: set, height: set, logic: or }
214
346
  honored_on: [same_format, format_change]
215
347
  description: >-
216
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
217
- crop/scale = exact dimensions. Applies only when width or height is set,
218
- on whichever Output route runs.
348
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
349
+ and NEVER upscaling — it caps at the source dimensions. This IS the
350
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
351
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
352
+ deliberately enlarges past source). Applies only when width or height is
353
+ set, on whichever Output route runs.
219
354
 
220
355
  image_avif:
221
356
  availability: beta
@@ -237,18 +372,48 @@ operation:
237
372
  min: 1
238
373
  max: 100
239
374
  default: 80
375
+ depends_on: { encoding_mode: quality }
240
376
  honored_on: [same_format]
241
- description: "Compression quality (1 = smallest file, 100 = best quality)."
377
+ description: >-
378
+ Compression quality (1 = smallest file, 100 = best quality). Active in
379
+ `quality` mode (default); in `target_size` mode the encode-measure loop
380
+ owns quality, so this option is inactive.
381
+ encoding_mode:
382
+ type: enum
383
+ values: [quality, target_size]
384
+ default: quality
385
+ honored_on: [same_format]
386
+ description: >-
387
+ Compression mode (mirrors compress.video). `quality` = the `quality`
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.
393
+ target_size_bytes:
394
+ type: integer
395
+ min: 1024
396
+ depends_on: { encoding_mode: target_size }
397
+ honored_on: [same_format]
398
+ description: >-
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.
242
404
  metadata:
243
405
  type: enum
244
- values: [all]
245
- default: all
406
+ values: [strip, all]
407
+ default: strip
408
+ per_value_availability:
409
+ all: { availability: deprecated }
246
410
  honored_on: [same_format]
247
411
  description: >-
248
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (the only supported
249
- value). `keep` is NOT offered for AVIF — ravif re-encodes from pixels
250
- and cannot preserve metadata (the worker rejects `keep` as
251
- 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).
252
417
  avif_speed:
253
418
  type: integer
254
419
  min: 1
@@ -258,13 +423,21 @@ operation:
258
423
  description: "AVIF encode speed (1-10, ravif). Lower = smaller file, slower encode; higher = faster, larger. Default 4. Optimiser (same_format) route."
259
424
  output_format:
260
425
  type: enum
261
- values: [original, webp]
426
+ values: [original, webp, auto, smallest]
262
427
  default: original
428
+ per_value_availability:
429
+ auto: { availability: planned }
430
+ smallest: { availability: planned }
263
431
  description: >-
264
432
  Output format. original = keep input format (default); webp = recompress to
265
- 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
266
434
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
267
- 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.
268
441
  width:
269
442
  type: integer
270
443
  min: 1
@@ -273,8 +446,9 @@ operation:
273
446
  description: >-
274
447
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
275
448
  max_output_pixels). Resize the image as part of Output (replace semantics,
276
- ONE transformed output) using the proven image resize engine (Lanczos,
277
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
449
+ ONE transformed output) using the proven convert resize engine (Lanczos;
450
+ the API routes Output resize through the convert worker, BOTH routes —
451
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
278
452
  Optional; omit to keep the source dimensions.
279
453
  height:
280
454
  type: integer
@@ -289,9 +463,12 @@ operation:
289
463
  depends_on: { width: set, height: set, logic: or }
290
464
  honored_on: [same_format, format_change]
291
465
  description: >-
292
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
293
- crop/scale = exact dimensions. Applies only when width or height is set,
294
- on whichever Output route runs.
466
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
467
+ and NEVER upscaling — it caps at the source dimensions. This IS the
468
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
469
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
470
+ deliberately enlarges past source). Applies only when width or height is
471
+ set, on whichever Output route runs.
295
472
 
296
473
  # webp split out of the former bundled image group: it is the one input that
297
474
  # carries BOTH Resize (raster, proven in thumbnail-images) AND the optimiser
@@ -307,36 +484,98 @@ operation:
307
484
  min: 1
308
485
  max: 100
309
486
  default: 80
487
+ depends_on: { encoding_mode: quality }
310
488
  honored_on: [same_format]
311
- description: "Compression quality (1 = smallest file, 100 = best quality)."
489
+ description: >-
490
+ Compression quality (1 = smallest file, 100 = best quality). Active in
491
+ `quality` mode (default); in `target_size` mode the encode-measure loop
492
+ owns quality, so this option is inactive.
493
+ encoding_mode:
494
+ type: enum
495
+ values: [quality, target_size]
496
+ default: quality
497
+ honored_on: [same_format]
498
+ description: >-
499
+ Compression mode (mirrors compress.video). `quality` = the `quality`
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.
504
+ target_size_bytes:
505
+ type: integer
506
+ min: 1024
507
+ depends_on: { encoding_mode: target_size }
508
+ honored_on: [same_format]
509
+ description: >-
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.
312
515
  metadata:
313
516
  type: enum
314
- values: [all, keep]
315
- default: all
517
+ values: [strip, keep, all]
518
+ default: strip
519
+ per_value_availability:
520
+ all: { availability: deprecated }
316
521
  honored_on: [same_format]
317
522
  description: >-
318
- Metadata handling (optimiser/same_format route). `all` = strip all
523
+ Metadata handling (optimiser/same_format route). `strip` = remove all
319
524
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
320
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
321
- 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.
322
550
  output_format:
323
551
  type: enum
324
- values: [original, webp]
552
+ values: [original, webp, auto, smallest]
325
553
  default: original
554
+ per_value_availability:
555
+ auto: { availability: planned }
556
+ smallest: { availability: planned }
326
557
  description: >-
327
558
  Output format. original = keep input format (default); webp = recompress to
328
- 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
329
560
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
330
- 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.
331
567
  lossless:
332
568
  type: boolean
333
569
  default: false
570
+ depends_on: { encoding_mode: quality }
334
571
  honored_on: [same_format]
335
572
  description: >-
336
573
  Encode WebP losslessly (optimiser path): a genuine lossless WebP encode.
337
574
  STABLE — the compress-image worker honours the `lossless` bool (un-parked
338
575
  2026-06-23). Note a lossless encode can be LARGER than a lossy one at the
339
- same visual quality. Optimiser (same_format) route only.
576
+ same visual quality. Only in `quality` mode — incompatible with
577
+ `target_size` (the byte-budget loop is inherently lossy). Optimiser
578
+ (same_format) route only.
340
579
  width:
341
580
  type: integer
342
581
  min: 1
@@ -345,8 +584,9 @@ operation:
345
584
  description: >-
346
585
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
347
586
  max_output_pixels). Resize the image as part of Output (replace semantics,
348
- ONE transformed output) using the proven image resize engine (Lanczos,
349
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
587
+ ONE transformed output) using the proven convert resize engine (Lanczos;
588
+ the API routes Output resize through the convert worker, BOTH routes —
589
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
350
590
  Optional; omit to keep the source dimensions.
351
591
  height:
352
592
  type: integer
@@ -361,9 +601,12 @@ operation:
361
601
  depends_on: { width: set, height: set, logic: or }
362
602
  honored_on: [same_format, format_change]
363
603
  description: >-
364
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
365
- crop/scale = exact dimensions. Applies only when width or height is set,
366
- on whichever Output route runs.
604
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
605
+ and NEVER upscaling — it caps at the source dimensions. This IS the
606
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
607
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
608
+ deliberately enlarges past source). Applies only when width or height is
609
+ set, on whichever Output route runs.
367
610
 
368
611
  # svg is VECTOR: no raster resize (thumbnail-images does not list svg), and the
369
612
  # optimiser `lossless` knob does not apply. SVG compression is SVGO; only
@@ -381,20 +624,31 @@ operation:
381
624
  description: "Compression quality (1 = smallest file, 100 = best quality)."
382
625
  metadata:
383
626
  type: enum
384
- values: [all]
385
- default: all
627
+ values: [strip, all]
628
+ default: strip
629
+ per_value_availability:
630
+ all: { availability: deprecated }
386
631
  honored_on: [same_format]
387
632
  description: >-
388
- Metadata handling. `all` = strip all metadata (the only supported value).
389
- `keep` is NOT offered for SVG — SVGO optimises the markup and cannot
390
- 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).
391
638
  output_format:
392
639
  type: enum
393
- values: [original, webp]
640
+ values: [original, webp, auto, smallest]
394
641
  default: original
642
+ per_value_availability:
643
+ auto: { availability: planned }
644
+ smallest: { availability: planned }
395
645
  description: >-
396
646
  Output format. original = keep input format (default); webp = recompress to
397
- 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.
398
652
 
399
653
  # gif/tiff: raster Resize is engine-proven (both are in thumbnail-images), but
400
654
  # the optimiser `lossless` knob is WebP-only — not advertised here.
@@ -415,23 +669,56 @@ operation:
415
669
  GIF the worker honours this but real-world size reduction is typically small.
416
670
  metadata:
417
671
  type: enum
418
- values: [all, keep]
419
- default: all
672
+ values: [strip, keep, all]
673
+ default: strip
674
+ per_value_availability:
675
+ all: { availability: deprecated }
420
676
  honored_on: [same_format]
421
677
  description: >-
422
- Metadata handling (optimiser/same_format route). `all` = strip all
678
+ Metadata handling (optimiser/same_format route). `strip` = remove all
423
679
  EXIF/IPTC/XMP (default). `keep` = preserve EXIF/ICC/XMP — STABLE
424
- (worker-proven, libcaesium; lambdas PR #260, staging round-trip +
425
- 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.
426
705
  output_format:
427
706
  type: enum
428
- values: [original, webp]
707
+ values: [original, webp, auto, smallest]
429
708
  default: original
709
+ per_value_availability:
710
+ auto: { availability: planned }
711
+ smallest: { availability: planned }
430
712
  description: >-
431
713
  Output format. original = keep input format (default); webp = recompress to
432
- 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
433
715
  changes (jpeg/png/avif/gif/tiff) are the convert operation's job, not compress.
434
- 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.
435
722
  width:
436
723
  type: integer
437
724
  min: 1
@@ -440,8 +727,9 @@ operation:
440
727
  description: >-
441
728
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
442
729
  max_output_pixels). Resize the image as part of Output (replace semantics,
443
- ONE transformed output) using the proven image resize engine (Lanczos,
444
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
730
+ ONE transformed output) using the proven convert resize engine (Lanczos;
731
+ the API routes Output resize through the convert worker, BOTH routes —
732
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
445
733
  Optional; omit to keep the source dimensions.
446
734
  height:
447
735
  type: integer
@@ -456,9 +744,12 @@ operation:
456
744
  depends_on: { width: set, height: set, logic: or }
457
745
  honored_on: [same_format, format_change]
458
746
  description: >-
459
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
460
- crop/scale = exact dimensions. Applies only when width or height is set,
461
- on whichever Output route runs.
747
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
748
+ and NEVER upscaling — it caps at the source dimensions. This IS the
749
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
750
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
751
+ deliberately enlarges past source). Applies only when width or height is
752
+ set, on whichever Output route runs.
462
753
 
463
754
  audio:
464
755
  mimes: