@giveitsmaller/contracts 0.34.0 → 0.36.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 (414) hide show
  1. package/accepted-options/accepted-options.json +58 -1
  2. package/accepted-options/image-output-routes.json +41 -10
  3. package/availability/availability.json +218 -69
  4. package/dist/openapi/models/AccountLimitEntry.d.ts +1 -1
  5. package/dist/openapi/models/AccountLimitEntry.js +1 -1
  6. package/dist/openapi/models/AccountLimits.d.ts +1 -1
  7. package/dist/openapi/models/AccountLimits.js +1 -1
  8. package/dist/openapi/models/AccountLimitsLimits.d.ts +1 -1
  9. package/dist/openapi/models/AccountLimitsLimits.js +1 -1
  10. package/dist/openapi/models/AccountLimitsSuccessEnvelope.d.ts +1 -1
  11. package/dist/openapi/models/AccountLimitsSuccessEnvelope.js +1 -1
  12. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  13. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  14. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  15. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  16. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  17. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  18. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  19. package/dist/openapi/models/AuthErrorType.js +1 -1
  20. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +1 -1
  21. package/dist/openapi/models/AuthRejectionEnvelope.js +1 -1
  22. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  23. package/dist/openapi/models/AvailabilityValue.js +1 -1
  24. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  25. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  26. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  27. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  28. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  29. package/dist/openapi/models/CallbackEventType.js +1 -1
  30. package/dist/openapi/models/ChangePasswordRequest.d.ts +1 -1
  31. package/dist/openapi/models/ChangePasswordRequest.js +1 -1
  32. package/dist/openapi/models/CompositionPlan.d.ts +1 -1
  33. package/dist/openapi/models/CompositionPlan.js +1 -1
  34. package/dist/openapi/models/CompositionPlanJob.d.ts +1 -1
  35. package/dist/openapi/models/CompositionPlanJob.js +1 -1
  36. package/dist/openapi/models/CompositionPlanOperation.d.ts +1 -1
  37. package/dist/openapi/models/CompositionPlanOperation.js +1 -1
  38. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +1 -1
  39. package/dist/openapi/models/ConfirmEmailChange200Response.js +1 -1
  40. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +1 -1
  41. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +1 -1
  42. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +1 -1
  43. package/dist/openapi/models/ConfirmEmailChangeRequest.js +1 -1
  44. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  45. package/dist/openapi/models/ConnectionSource.js +1 -1
  46. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  47. package/dist/openapi/models/ContactRequest.js +1 -1
  48. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  49. package/dist/openapi/models/ContactSubject.js +1 -1
  50. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  51. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  52. package/dist/openapi/models/CreateApiKey201Response.d.ts +1 -1
  53. package/dist/openapi/models/CreateApiKey201Response.js +1 -1
  54. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +1 -1
  55. package/dist/openapi/models/CreateApiKey201ResponseData.js +1 -1
  56. package/dist/openapi/models/CreateApiKeyRequest.d.ts +1 -1
  57. package/dist/openapi/models/CreateApiKeyRequest.js +1 -1
  58. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  59. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  60. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  61. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  62. package/dist/openapi/models/CreateWorkflow422Response.d.ts +1 -1
  63. package/dist/openapi/models/CreateWorkflow422Response.js +1 -1
  64. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  65. package/dist/openapi/models/CreditTransaction.js +1 -1
  66. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  67. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  68. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  69. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  70. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  71. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  72. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  73. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  74. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  75. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  76. package/dist/openapi/models/Delivery.d.ts +1 -1
  77. package/dist/openapi/models/Delivery.js +1 -1
  78. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  79. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  80. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  81. package/dist/openapi/models/DeliveryPlan.js +1 -1
  82. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  83. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  84. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  85. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  86. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  87. package/dist/openapi/models/DeliverySelection.js +1 -1
  88. package/dist/openapi/models/DownloadBundle.d.ts +1 -1
  89. package/dist/openapi/models/DownloadBundle.js +1 -1
  90. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +1 -1
  91. package/dist/openapi/models/EmptySuccessEnvelope.js +1 -1
  92. package/dist/openapi/models/EndpointProjection.d.ts +1 -1
  93. package/dist/openapi/models/EndpointProjection.js +1 -1
  94. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  95. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  96. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  97. package/dist/openapi/models/EstimateQuality.js +1 -1
  98. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  99. package/dist/openapi/models/EstimateRange.js +1 -1
  100. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  101. package/dist/openapi/models/ExternalDestination.js +1 -1
  102. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  103. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  104. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  105. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  106. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  107. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  108. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  109. package/dist/openapi/models/ExternalImportToken.js +1 -1
  110. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  111. package/dist/openapi/models/ExternalSource.js +1 -1
  112. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  113. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  114. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  115. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  116. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  117. package/dist/openapi/models/FeatureViolation.js +1 -1
  118. package/dist/openapi/models/ForgotPasswordRequest.d.ts +1 -1
  119. package/dist/openapi/models/ForgotPasswordRequest.js +1 -1
  120. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +1 -1
  121. package/dist/openapi/models/ImageEncodeCapabilities.js +1 -1
  122. package/dist/openapi/models/JobDefinition.d.ts +1 -1
  123. package/dist/openapi/models/JobDefinition.js +1 -1
  124. package/dist/openapi/models/JobDownload.d.ts +1 -1
  125. package/dist/openapi/models/JobDownload.js +1 -1
  126. package/dist/openapi/models/JobInputV2.d.ts +1 -1
  127. package/dist/openapi/models/JobInputV2.js +1 -1
  128. package/dist/openapi/models/JobMediaClass.d.ts +1 -1
  129. package/dist/openapi/models/JobMediaClass.js +1 -1
  130. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  131. package/dist/openapi/models/JobOutputSource.js +1 -1
  132. package/dist/openapi/models/JobResponse.d.ts +1 -1
  133. package/dist/openapi/models/JobResponse.js +1 -1
  134. package/dist/openapi/models/JobStatus.d.ts +1 -1
  135. package/dist/openapi/models/JobStatus.js +1 -1
  136. package/dist/openapi/models/JobType.d.ts +1 -1
  137. package/dist/openapi/models/JobType.js +1 -1
  138. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  139. package/dist/openapi/models/LivenessResponse.js +1 -1
  140. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  141. package/dist/openapi/models/LoginUser200Response.js +1 -1
  142. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  143. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  144. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  145. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  146. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  147. package/dist/openapi/models/LoginUserRequest.js +1 -1
  148. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  149. package/dist/openapi/models/MetadataResponse.js +1 -1
  150. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  151. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  152. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  153. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  154. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  155. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  156. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  157. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  158. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  159. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  160. package/dist/openapi/models/MultiInputSource.d.ts +1 -1
  161. package/dist/openapi/models/MultiInputSource.js +1 -1
  162. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  163. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  164. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  165. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  166. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  167. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  168. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  169. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  170. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  171. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  172. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  173. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  174. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  175. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  176. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  177. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  178. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  179. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  180. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  181. package/dist/openapi/models/MultipartPartListing.js +1 -1
  182. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  183. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  184. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  185. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  186. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  187. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  188. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  189. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  190. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  191. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  192. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  193. package/dist/openapi/models/OperationDefinition.js +1 -1
  194. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  195. package/dist/openapi/models/OperationDownload.js +1 -1
  196. package/dist/openapi/models/OperationInputModel.d.ts +1 -1
  197. package/dist/openapi/models/OperationInputModel.js +1 -1
  198. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  199. package/dist/openapi/models/OperationResponse.js +1 -1
  200. package/dist/openapi/models/OperationResult.d.ts +1 -1
  201. package/dist/openapi/models/OperationResult.js +1 -1
  202. package/dist/openapi/models/OperationResultMetadata.d.ts +1 -1
  203. package/dist/openapi/models/OperationResultMetadata.js +1 -1
  204. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  205. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  206. package/dist/openapi/models/OperationSchemaDefinition.d.ts +1 -1
  207. package/dist/openapi/models/OperationSchemaDefinition.js +1 -1
  208. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  209. package/dist/openapi/models/OperationStatus.js +1 -1
  210. package/dist/openapi/models/OperationType.d.ts +1 -1
  211. package/dist/openapi/models/OperationType.js +1 -1
  212. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  213. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  214. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +1 -1
  215. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +1 -1
  216. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +1 -1
  217. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +1 -1
  218. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +1 -1
  219. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +1 -1
  220. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +1 -1
  221. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +1 -1
  222. package/dist/openapi/models/OptionSchema.d.ts +15 -1
  223. package/dist/openapi/models/OptionSchema.js +3 -1
  224. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +1 -1
  225. package/dist/openapi/models/PerRoleCardinalityEntry.js +1 -1
  226. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  227. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  228. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  229. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  230. package/dist/openapi/models/ProbePendingResponse.d.ts +1 -1
  231. package/dist/openapi/models/ProbePendingResponse.js +1 -1
  232. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  233. package/dist/openapi/models/ProcessingClass.js +1 -1
  234. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  235. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  236. package/dist/openapi/models/ProcessingClassConstraints.d.ts +1 -1
  237. package/dist/openapi/models/ProcessingClassConstraints.js +1 -1
  238. package/dist/openapi/models/ProcessingClassEntry.d.ts +1 -1
  239. package/dist/openapi/models/ProcessingClassEntry.js +1 -1
  240. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  241. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  242. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  243. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  244. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  245. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  246. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  247. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  248. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  249. package/dist/openapi/models/ProcessingPlan.js +1 -1
  250. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  251. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  252. package/dist/openapi/models/ReEncodeDecision.d.ts +1 -1
  253. package/dist/openapi/models/ReEncodeDecision.js +1 -1
  254. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  255. package/dist/openapi/models/ReadinessResponse.js +1 -1
  256. package/dist/openapi/models/RegisterUser422Response.d.ts +1 -1
  257. package/dist/openapi/models/RegisterUser422Response.js +1 -1
  258. package/dist/openapi/models/RegisterUserRequest.d.ts +1 -1
  259. package/dist/openapi/models/RegisterUserRequest.js +1 -1
  260. package/dist/openapi/models/ResetPasswordRequest.d.ts +1 -1
  261. package/dist/openapi/models/ResetPasswordRequest.js +1 -1
  262. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  263. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  264. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  265. package/dist/openapi/models/RetryResponse.js +1 -1
  266. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  267. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  268. package/dist/openapi/models/SseCompletionBase.d.ts +1 -1
  269. package/dist/openapi/models/SseCompletionBase.js +1 -1
  270. package/dist/openapi/models/SseEventType.d.ts +1 -1
  271. package/dist/openapi/models/SseEventType.js +1 -1
  272. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  273. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  274. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  275. package/dist/openapi/models/SseJobFailedData.js +1 -1
  276. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +1 -1
  277. package/dist/openapi/models/SseMultiOutputCompletion.js +1 -1
  278. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +1 -1
  279. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +1 -1
  280. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +1 -1
  281. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +1 -1
  282. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +1 -1
  283. package/dist/openapi/models/SseMultiOutputResultEntry.js +1 -1
  284. package/dist/openapi/models/SseOperationCompletedData.d.ts +1 -1
  285. package/dist/openapi/models/SseOperationCompletedData.js +1 -1
  286. package/dist/openapi/models/SseOperationCompletionResult.d.ts +1 -1
  287. package/dist/openapi/models/SseOperationCompletionResult.js +1 -1
  288. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  289. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  290. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  291. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  292. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +1 -1
  293. package/dist/openapi/models/SseSingleOutputCompletion.js +1 -1
  294. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  295. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  296. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  297. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  298. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  299. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  300. package/dist/openapi/models/UpdateProfile200Response.d.ts +1 -1
  301. package/dist/openapi/models/UpdateProfile200Response.js +1 -1
  302. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +1 -1
  303. package/dist/openapi/models/UpdateProfile200ResponseData.js +1 -1
  304. package/dist/openapi/models/UpdateProfile422Response.d.ts +1 -1
  305. package/dist/openapi/models/UpdateProfile422Response.js +1 -1
  306. package/dist/openapi/models/UpdateProfileRequest.d.ts +1 -1
  307. package/dist/openapi/models/UpdateProfileRequest.js +1 -1
  308. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  309. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  310. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  311. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  312. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  313. package/dist/openapi/models/UploadFile403Response.js +1 -1
  314. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  315. package/dist/openapi/models/UploadFile422Response.js +1 -1
  316. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  317. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  318. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  319. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  320. package/dist/openapi/models/UploadProbeResponse.d.ts +1 -1
  321. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  322. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  323. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  324. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +1 -1
  325. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +1 -1
  326. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  327. package/dist/openapi/models/UploadResponse.js +1 -1
  328. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  329. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  330. package/dist/openapi/models/UploadSource.d.ts +1 -1
  331. package/dist/openapi/models/UploadSource.js +1 -1
  332. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  333. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  334. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  335. package/dist/openapi/models/UploadThresholds.js +1 -1
  336. package/dist/openapi/models/UserTier.d.ts +1 -1
  337. package/dist/openapi/models/UserTier.js +1 -1
  338. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  339. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  340. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  341. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  342. package/dist/openapi/models/VerifyEmailRequest.d.ts +1 -1
  343. package/dist/openapi/models/VerifyEmailRequest.js +1 -1
  344. package/dist/openapi/models/WarningType.d.ts +1 -1
  345. package/dist/openapi/models/WarningType.js +1 -1
  346. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  347. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  348. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  349. package/dist/openapi/models/WebhookPayload.js +1 -1
  350. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  351. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  352. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  353. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  354. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  355. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  356. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  357. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  358. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  359. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  360. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  361. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  362. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  363. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  364. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  365. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  366. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  367. package/dist/openapi/models/WorkflowEdge.js +1 -1
  368. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  369. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  370. package/dist/openapi/models/WorkflowListResponse.d.ts +1 -1
  371. package/dist/openapi/models/WorkflowListResponse.js +1 -1
  372. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +1 -1
  373. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +1 -1
  374. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  375. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  376. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  377. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  378. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  379. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  380. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  381. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  382. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  383. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  384. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  385. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  386. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  387. package/dist/openapi/models/WorkflowSource.js +1 -1
  388. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  389. package/dist/openapi/models/WorkflowStatus.js +1 -1
  390. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  391. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  392. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  393. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  394. package/dist/openapi/models/WorkflowSummary.d.ts +1 -1
  395. package/dist/openapi/models/WorkflowSummary.js +1 -1
  396. package/dist/openapi/models/WorkflowSummaryJob.d.ts +1 -1
  397. package/dist/openapi/models/WorkflowSummaryJob.js +1 -1
  398. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  399. package/dist/openapi/models/WorkflowWarning.js +1 -1
  400. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  401. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  402. package/dist/openapi/runtime.d.ts +1 -1
  403. package/dist/openapi/runtime.js +1 -1
  404. package/dist/operations/compress.d.ts +20 -4
  405. package/dist/operations/compress.js +15 -2
  406. package/dist/operations/compress.metadata.js +30 -27
  407. package/dist/operations/convert.d.ts +21 -0
  408. package/dist/operations/convert.js +15 -0
  409. package/dist/operations/convert.metadata.js +25 -0
  410. package/openapi/api.yaml +13 -1
  411. package/operation-capabilities/operation-capabilities.json +28 -1
  412. package/operations/schemas/compress.yaml +217 -118
  413. package/operations/schemas/convert.yaml +89 -2
  414. package/package.json +1 -1
@@ -44,29 +44,33 @@ operation:
44
44
  # see FORMAT.md §"Route-aware Output model"). The derived per-(media, route,
45
45
  # output_format) projection is accepted-options/image-output-routes.json.
46
46
  #
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.
47
+ # RESIZE-INSIDE-OUTPUT ships STABLE (hub-directed fast-path, 2026-06-22;
48
+ # engine corrected per API worker-verification n4CmaDE8, 2026-06-23):
49
+ # width / height / fit + max_output_pixels. The CONVERT worker is the image
50
+ # resize engine for the WHOLE Output op (image_convert.rs, Lanczos, 1-16384,
51
+ # 16MP cap, svg-reject; live #257) — the compress optimiser has NO resize.
52
+ # The API routes BOTH arms through convert (same_format = convert to the same
53
+ # token; format_change = convert to the target), so these keys are declared
54
+ # HERE (the facade entry) AND on convert.image (where the worker reads them +
55
+ # the API re-validates the rewritten op). REPLACE transform, ONE output —
56
+ # NOT thumbnail's derivative/preview semantics; thumbnail.yaml untouched.
54
57
  #
55
- # The remaining PHASE 1 controls land availability:planned (ANTI-REGRESSION:
56
- # no stable-flip until the worker honours it + API proves representability —
57
- # plan §2.5; FE-hidden / API-422 until then). They are route-CONDITIONAL,
58
- # which is why they ride the route-aware honored_on model:
59
- # lossless (jpeg/webp) -> the worker `lossless` bool the API has never
60
- # emitted (product-parked); planned, optimiser (same_format) route only.
61
- # metadata: keep -> un-hardcode keep_metadata=false; planned value
62
- # on the existing `metadata` enum.
63
- # lossy (png) -> palette quantization (pngquant/imagequant-class);
64
- # planned + licensing-gated by the lambdas spike — do NOT stable-flip
65
- # until that confirms a permissive path.
58
+ # STABLE on the optimiser (same_format) route (all worker-proven 2026-06-23):
59
+ # lossless (jpeg/webp) — worker honours the `lossless` bool, API emits it.
60
+ # metadata: keep — preserve EXIF/ICC/XMP (libcaesium; lambdas PR #260). keep
61
+ # is honored on libcaesium (jpeg/png/webp/gif/tiff) ONLY; AVIF (ravif) +
62
+ # SVG (SVGO) re-encode from pixels so `keep` is NOT in their enum (worker
63
+ # would reject it). metadata `all` (strip) is the universal default.
64
+ #
65
+ # Still availability:planned (ANTI-REGRESSION — no stable-flip until worker-
66
+ # proven; plan §2.5):
67
+ # lossy (png) -> palette quantization (pngquant/imagequant-class); planned +
68
+ # licensing-gated by the lambdas spike — do NOT stable-flip until that
69
+ # confirms a permissive path.
66
70
  image_jpeg:
67
71
  mimes:
68
72
  - image/jpeg
69
- # Resize-inside-Output (planned) shares thumbnail-image's 16MP output-area
73
+ # Resize-inside-Output shares the convert resize engine's 16MP output-area
70
74
  # wall — the per-axis 16384 cap can't express it (FORMAT.md §max_output_pixels).
71
75
  max_output_pixels: 16000000
72
76
  options:
@@ -75,22 +79,46 @@ operation:
75
79
  min: 1
76
80
  max: 100
77
81
  default: 80
82
+ depends_on: { encoding_mode: quality }
78
83
  honored_on: [same_format]
79
- description: "Compression quality (1 = smallest file, 100 = best quality)."
84
+ description: >-
85
+ Compression quality (1 = smallest file, 100 = best quality). Active in
86
+ `quality` mode (default); in `target_size` mode the encode-measure loop
87
+ owns quality, so this option is inactive.
88
+ encoding_mode:
89
+ type: enum
90
+ values: [quality, target_size]
91
+ default: quality
92
+ per_value_availability:
93
+ target_size: { availability: planned }
94
+ honored_on: [same_format]
95
+ description: >-
96
+ 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.
100
+ target_size_bytes:
101
+ type: integer
102
+ min: 1024
103
+ availability: planned
104
+ depends_on: { encoding_mode: target_size }
105
+ honored_on: [same_format]
106
+ 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.
80
112
  metadata:
81
113
  type: enum
82
114
  values: [all, keep]
83
115
  default: all
84
- per_value_availability:
85
- keep: { availability: planned }
86
116
  honored_on: [same_format]
87
117
  description: >-
88
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only
89
- live behaviour — the compress worker hardcodes keep_metadata=false).
90
- `keep` = preserve metadata — `planned` (the worker cannot preserve it
91
- yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle).
92
- Optimiser (same_format) route — the format-change transcoder has no
93
- metadata-preservation control today.
118
+ Metadata handling (optimiser/same_format route). `all` = strip all
119
+ 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.
94
122
  progressive:
95
123
  type: boolean
96
124
  default: true
@@ -108,12 +136,16 @@ operation:
108
136
  lossless:
109
137
  type: boolean
110
138
  default: false
111
- availability: planned
139
+ depends_on: { encoding_mode: quality }
112
140
  honored_on: [same_format]
113
141
  description: >-
114
- Encode losslessly (JPEG optimiser path). `planned` — the worker carries
115
- a `lossless` bool the API has never emitted (product-parked: a lossless
116
- output can be LARGER than lossy). Optimiser (same_format) route only.
142
+ Lossless JPEG re-optimisation (optimiser path): optimises the Huffman
143
+ tables WITHOUT re-encoding pixels — bit-preserving on the pixel data,
144
+ no quality loss (it cannot recover detail a lossy JPEG already lost).
145
+ STABLE — the compress-image worker honours the `lossless` bool
146
+ (un-parked 2026-06-23). Only in `quality` mode — incompatible with
147
+ `target_size` (the byte-budget loop is inherently lossy). Optimiser
148
+ (same_format) route only.
117
149
  width:
118
150
  type: integer
119
151
  min: 1
@@ -122,8 +154,9 @@ operation:
122
154
  description: >-
123
155
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
124
156
  max_output_pixels). Resize the image as part of Output (replace semantics,
125
- ONE transformed output) using the proven image resize engine (Lanczos,
126
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
157
+ ONE transformed output) using the proven convert resize engine (Lanczos;
158
+ the API routes Output resize through the convert worker, BOTH routes —
159
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
127
160
  Optional; omit to keep the source dimensions.
128
161
  height:
129
162
  type: integer
@@ -138,9 +171,12 @@ operation:
138
171
  depends_on: { width: set, height: set, logic: or }
139
172
  honored_on: [same_format, format_change]
140
173
  description: >-
141
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
142
- crop/scale = exact dimensions. Applies only when width or height is set,
143
- on whichever Output route runs.
174
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
175
+ and NEVER upscaling — it caps at the source dimensions. This IS the
176
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
177
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
178
+ deliberately enlarges past source). Applies only when width or height is
179
+ set, on whichever Output route runs.
144
180
 
145
181
  image_png:
146
182
  mimes:
@@ -158,16 +194,12 @@ operation:
158
194
  type: enum
159
195
  values: [all, keep]
160
196
  default: all
161
- per_value_availability:
162
- keep: { availability: planned }
163
197
  honored_on: [same_format]
164
198
  description: >-
165
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only
166
- live behaviour — the compress worker hardcodes keep_metadata=false).
167
- `keep` = preserve metadata — `planned` (the worker cannot preserve it
168
- yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle).
169
- Optimiser (same_format) route — the format-change transcoder has no
170
- metadata-preservation control today.
199
+ Metadata handling (optimiser/same_format route). `all` = strip all
200
+ 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.
171
203
  optimization_level:
172
204
  type: integer
173
205
  min: 0
@@ -203,8 +235,9 @@ operation:
203
235
  description: >-
204
236
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
205
237
  max_output_pixels). Resize the image as part of Output (replace semantics,
206
- ONE transformed output) using the proven image resize engine (Lanczos,
207
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
238
+ ONE transformed output) using the proven convert resize engine (Lanczos;
239
+ the API routes Output resize through the convert worker, BOTH routes —
240
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
208
241
  Optional; omit to keep the source dimensions.
209
242
  height:
210
243
  type: integer
@@ -219,9 +252,12 @@ operation:
219
252
  depends_on: { width: set, height: set, logic: or }
220
253
  honored_on: [same_format, format_change]
221
254
  description: >-
222
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
223
- crop/scale = exact dimensions. Applies only when width or height is set,
224
- on whichever Output route runs.
255
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
256
+ and NEVER upscaling — it caps at the source dimensions. This IS the
257
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
258
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
259
+ deliberately enlarges past source). Applies only when width or height is
260
+ set, on whichever Output route runs.
225
261
 
226
262
  image_avif:
227
263
  availability: beta
@@ -243,22 +279,47 @@ operation:
243
279
  min: 1
244
280
  max: 100
245
281
  default: 80
282
+ depends_on: { encoding_mode: quality }
246
283
  honored_on: [same_format]
247
- description: "Compression quality (1 = smallest file, 100 = best quality)."
284
+ description: >-
285
+ Compression quality (1 = smallest file, 100 = best quality). Active in
286
+ `quality` mode (default); in `target_size` mode the encode-measure loop
287
+ owns quality, so this option is inactive.
288
+ encoding_mode:
289
+ type: enum
290
+ values: [quality, target_size]
291
+ default: quality
292
+ per_value_availability:
293
+ target_size: { availability: planned }
294
+ honored_on: [same_format]
295
+ description: >-
296
+ 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.
301
+ target_size_bytes:
302
+ type: integer
303
+ min: 1024
304
+ availability: planned
305
+ depends_on: { encoding_mode: target_size }
306
+ honored_on: [same_format]
307
+ 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.
248
313
  metadata:
249
314
  type: enum
250
- values: [all, keep]
315
+ values: [all]
251
316
  default: all
252
- per_value_availability:
253
- keep: { availability: planned }
254
317
  honored_on: [same_format]
255
318
  description: >-
256
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only
257
- live behaviour — the compress worker hardcodes keep_metadata=false).
258
- `keep` = preserve metadata — `planned` (the worker cannot preserve it
259
- yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle).
260
- Optimiser (same_format) route — the format-change transcoder has no
261
- metadata-preservation control today.
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).
262
323
  avif_speed:
263
324
  type: integer
264
325
  min: 1
@@ -283,8 +344,9 @@ operation:
283
344
  description: >-
284
345
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
285
346
  max_output_pixels). Resize the image as part of Output (replace semantics,
286
- ONE transformed output) using the proven image resize engine (Lanczos,
287
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
347
+ ONE transformed output) using the proven convert resize engine (Lanczos;
348
+ the API routes Output resize through the convert worker, BOTH routes —
349
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
288
350
  Optional; omit to keep the source dimensions.
289
351
  height:
290
352
  type: integer
@@ -299,9 +361,12 @@ operation:
299
361
  depends_on: { width: set, height: set, logic: or }
300
362
  honored_on: [same_format, format_change]
301
363
  description: >-
302
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
303
- crop/scale = exact dimensions. Applies only when width or height is set,
304
- on whichever Output route runs.
364
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
365
+ and NEVER upscaling — it caps at the source dimensions. This IS the
366
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
367
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
368
+ deliberately enlarges past source). Applies only when width or height is
369
+ set, on whichever Output route runs.
305
370
 
306
371
  # webp split out of the former bundled image group: it is the one input that
307
372
  # carries BOTH Resize (raster, proven in thumbnail-images) AND the optimiser
@@ -317,22 +382,46 @@ operation:
317
382
  min: 1
318
383
  max: 100
319
384
  default: 80
385
+ depends_on: { encoding_mode: quality }
320
386
  honored_on: [same_format]
321
- description: "Compression quality (1 = smallest file, 100 = best quality)."
387
+ description: >-
388
+ Compression quality (1 = smallest file, 100 = best quality). Active in
389
+ `quality` mode (default); in `target_size` mode the encode-measure loop
390
+ owns quality, so this option is inactive.
391
+ encoding_mode:
392
+ type: enum
393
+ values: [quality, target_size]
394
+ default: quality
395
+ per_value_availability:
396
+ target_size: { availability: planned }
397
+ honored_on: [same_format]
398
+ description: >-
399
+ 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.
403
+ target_size_bytes:
404
+ type: integer
405
+ min: 1024
406
+ availability: planned
407
+ depends_on: { encoding_mode: target_size }
408
+ honored_on: [same_format]
409
+ 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.
322
415
  metadata:
323
416
  type: enum
324
417
  values: [all, keep]
325
418
  default: all
326
- per_value_availability:
327
- keep: { availability: planned }
328
419
  honored_on: [same_format]
329
420
  description: >-
330
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only
331
- live behaviour — the compress worker hardcodes keep_metadata=false).
332
- `keep` = preserve metadata — `planned` (the worker cannot preserve it
333
- yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle).
334
- Optimiser (same_format) route — the format-change transcoder has no
335
- metadata-preservation control today.
421
+ Metadata handling (optimiser/same_format route). `all` = strip all
422
+ 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.
336
425
  output_format:
337
426
  type: enum
338
427
  values: [original, webp]
@@ -345,12 +434,15 @@ operation:
345
434
  lossless:
346
435
  type: boolean
347
436
  default: false
348
- availability: planned
437
+ depends_on: { encoding_mode: quality }
349
438
  honored_on: [same_format]
350
439
  description: >-
351
- Encode WebP losslessly (optimiser path). `planned` — the worker carries a
352
- `lossless` bool the API has never emitted (product-parked: lossless can be
353
- LARGER). Optimiser (same_format) route only.
440
+ Encode WebP losslessly (optimiser path): a genuine lossless WebP encode.
441
+ STABLE — the compress-image worker honours the `lossless` bool (un-parked
442
+ 2026-06-23). Note a lossless encode can be LARGER than a lossy one at the
443
+ same visual quality. Only in `quality` mode — incompatible with
444
+ `target_size` (the byte-budget loop is inherently lossy). Optimiser
445
+ (same_format) route only.
354
446
  width:
355
447
  type: integer
356
448
  min: 1
@@ -359,8 +451,9 @@ operation:
359
451
  description: >-
360
452
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
361
453
  max_output_pixels). Resize the image as part of Output (replace semantics,
362
- ONE transformed output) using the proven image resize engine (Lanczos,
363
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
454
+ ONE transformed output) using the proven convert resize engine (Lanczos;
455
+ the API routes Output resize through the convert worker, BOTH routes —
456
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
364
457
  Optional; omit to keep the source dimensions.
365
458
  height:
366
459
  type: integer
@@ -375,9 +468,12 @@ operation:
375
468
  depends_on: { width: set, height: set, logic: or }
376
469
  honored_on: [same_format, format_change]
377
470
  description: >-
378
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
379
- crop/scale = exact dimensions. Applies only when width or height is set,
380
- on whichever Output route runs.
471
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
472
+ and NEVER upscaling — it caps at the source dimensions. This IS the
473
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
474
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
475
+ deliberately enlarges past source). Applies only when width or height is
476
+ set, on whichever Output route runs.
381
477
 
382
478
  # svg is VECTOR: no raster resize (thumbnail-images does not list svg), and the
383
479
  # optimiser `lossless` knob does not apply. SVG compression is SVGO; only
@@ -395,15 +491,13 @@ operation:
395
491
  description: "Compression quality (1 = smallest file, 100 = best quality)."
396
492
  metadata:
397
493
  type: enum
398
- values: [all, keep]
494
+ values: [all]
399
495
  default: all
400
- per_value_availability:
401
- keep: { availability: planned }
402
496
  honored_on: [same_format]
403
497
  description: >-
404
- Metadata handling. `all` = strip all metadata (default, live). `keep` =
405
- preserve metadata — `planned` (worker cannot preserve yet). Optimiser
406
- (same_format) route.
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).
407
501
  output_format:
408
502
  type: enum
409
503
  values: [original, webp]
@@ -433,16 +527,12 @@ operation:
433
527
  type: enum
434
528
  values: [all, keep]
435
529
  default: all
436
- per_value_availability:
437
- keep: { availability: planned }
438
530
  honored_on: [same_format]
439
531
  description: >-
440
- Metadata handling. `all` = strip all EXIF/IPTC/XMP (default, the only
441
- live behaviour — the compress worker hardcodes keep_metadata=false).
442
- `keep` = preserve metadata — `planned` (the worker cannot preserve it
443
- yet; un-hardcoding keep_metadata is the Phase 1 keep/strip toggle).
444
- Optimiser (same_format) route — the format-change transcoder has no
445
- metadata-preservation control today.
532
+ Metadata handling (optimiser/same_format route). `all` = strip all
533
+ 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.
446
536
  output_format:
447
537
  type: enum
448
538
  values: [original, webp]
@@ -460,8 +550,9 @@ operation:
460
550
  description: >-
461
551
  Resize-inside-Output: target width in pixels (1-16384; width*height <=
462
552
  max_output_pixels). Resize the image as part of Output (replace semantics,
463
- ONE transformed output) using the proven image resize engine (Lanczos,
464
- shared with thumbnail-images) — it is NOT the derivative `thumbnail` op.
553
+ ONE transformed output) using the proven convert resize engine (Lanczos;
554
+ the API routes Output resize through the convert worker, BOTH routes —
555
+ the compress optimiser has no resize) — it is NOT the derivative `thumbnail` op.
465
556
  Optional; omit to keep the source dimensions.
466
557
  height:
467
558
  type: integer
@@ -476,9 +567,12 @@ operation:
476
567
  depends_on: { width: set, height: set, logic: or }
477
568
  honored_on: [same_format, format_change]
478
569
  description: >-
479
- Resize mode. max = fit within bounds (preserves aspect ratio, no crop),
480
- crop/scale = exact dimensions. Applies only when width or height is set,
481
- on whichever Output route runs.
570
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
571
+ and NEVER upscaling — it caps at the source dimensions. This IS the
572
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
573
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
574
+ deliberately enlarges past source). Applies only when width or height is
575
+ set, on whichever Output route runs.
482
576
 
483
577
  audio:
484
578
  mimes:
@@ -542,18 +636,19 @@ operation:
542
636
  trim_start:
543
637
  type: float
544
638
  min: 0
545
- availability: planned
546
639
  description: >
547
- Trim from beginning in seconds. Gated `planned` (qZI5EK9j):
548
- no compression worker implements per-clip trim yet, so the
549
- server returns `feature_not_available` rather than accepting
550
- and silently ignoring it. Flips to `stable` when a worker
551
- lands; to trim today, chain a `split` op.
640
+ Trim from beginning in seconds (absent = from the start). STABLE
641
+ (qZI5EK9j) — the compress-audio worker cuts the clip before encoding
642
+ (input-side ffmpeg `-ss`/`-t`; lambdas PR #259), SAME FROM-END
643
+ semantic as compress.video / convert / merge: the kept clip is
644
+ [`trim_start`, input_duration − `trim_end`].
552
645
  trim_end:
553
646
  type: float
554
647
  min: 0
555
- availability: planned
556
- description: "Trim from end in seconds. Gated `planned` (qZI5EK9j) — see `trim_start`."
648
+ description: >
649
+ Trim from end in seconds (absent = to the end). Removes this many
650
+ seconds from the end; with `trim_start` the kept clip is
651
+ [`trim_start`, input_duration − `trim_end`]. STABLE — see `trim_start`.
557
652
 
558
653
  video:
559
654
  mimes:
@@ -749,18 +844,22 @@ operation:
749
844
  trim_start:
750
845
  type: float
751
846
  min: 0
752
- availability: planned
753
847
  description: >
754
- Trim from beginning in seconds. Gated `planned` (qZI5EK9j):
755
- no compression worker implements per-clip trim yet, so the
756
- server returns `feature_not_available` rather than accepting
757
- and silently ignoring it. Flips to `stable` when a worker
758
- lands; to trim today, chain a `split` op.
848
+ Trim from beginning in seconds (absent = from the start). STABLE
849
+ (qZI5EK9j) — the compress-video worker cuts the clip before encoding
850
+ (input-side ffmpeg `-ss`/`-t`; lambdas PR #258), SAME FROM-END
851
+ semantic as convert/merge: the kept clip is [`trim_start`,
852
+ input_duration − `trim_end`]. SHORT-FORM only — for long-form video
853
+ the server returns `feature_not_available` (trim a short clip, or
854
+ chain a `split`); see the compress.video.trim.longform constraint.
759
855
  trim_end:
760
856
  type: float
761
857
  min: 0
762
- availability: planned
763
- description: "Trim from end in seconds. Gated `planned` (qZI5EK9j) — see `trim_start`."
858
+ description: >
859
+ Trim from end in seconds (absent = to the end). Removes this many
860
+ seconds from the end; with `trim_start` the kept clip is
861
+ [`trim_start`, input_duration − `trim_end`]. STABLE — see
862
+ `trim_start` (short-form only; long-form → `feature_not_available`).
764
863
 
765
864
  document_pdf:
766
865
  mimes:
@@ -8,12 +8,16 @@ operation:
8
8
 
9
9
  mime_groups:
10
10
  image:
11
+ # svg is split into convert.image_svg (below): it rasterises to raster
12
+ # formats but CANNOT be raster-resized (worker rejects svg resize), so it
13
+ # must NOT sit in a group that declares width/height/fit — else the raw
14
+ # schema / availability / accepted-options advertise svg resize. Mirrors
15
+ # compress.image_svg.
11
16
  mimes:
12
17
  - image/jpeg
13
18
  - image/png
14
19
  - image/gif
15
20
  - image/webp
16
- - image/svg+xml
17
21
  - image/tiff
18
22
  - image/bmp
19
23
  - image/vnd.microsoft.icon
@@ -33,6 +37,20 @@ operation:
33
37
  # output_format) projection (accepted-options/image-output-routes.json)
34
38
  # attributes them to the transcoder path — `background` is the canonical
35
39
  # transparency→JPEG fill on format-change-to-jpeg, already live + stable.
40
+ #
41
+ # RESIZE: convert is the image resize ENGINE for the WHOLE Output op (both
42
+ # routes) — the compress optimiser has NO resize code (it never reads
43
+ # width/height/fit). The API carries width/height/fit onto the convert op
44
+ # for BOTH arms: format_change = convert to the requested format; same_format
45
+ # = convert to the SAME format token (the optimiser leg delegates resize to
46
+ # the transcoder — see compress.image resize comments). So width/height/fit
47
+ # are declared HERE (the worker reads them: image_convert.rs ->
48
+ # shared::image::resize_request_from_job, full validation + 16MP cap + svg
49
+ # REJECT + animation preserve; live #257). svg INPUT cannot be raster-resized
50
+ # (worker rejects as invalid_options) — the output-keyed projection lists
51
+ # resize on every format_change target, so it is INPUT-GATED: consumers
52
+ # cross-ref same_format[input] (svg has no resize) before offering it.
53
+ max_output_pixels: 16000000 # worker MAX_OUTPUT_PIXELS; parity with compress.image
36
54
  options:
37
55
  output_format:
38
56
  type: enum
@@ -49,9 +67,78 @@ operation:
49
67
  description: "Output quality for lossy formats"
50
68
  background:
51
69
  type: string
70
+ pattern: "^#[0-9a-fA-F]{6}$"
71
+ depends_on: { output_format: jpeg }
72
+ honored_on: [format_change]
73
+ description: >-
74
+ Background colour as a 6-digit hex (`#RRGGBB`, e.g. `#ffffff`) for
75
+ transparent images converted to JPEG (the format-change→JPEG
76
+ alpha-flatten — Output's transparency fill control). HEX ONLY: the
77
+ worker honours only `#RRGGBB` and silently drops a CSS named colour
78
+ (e.g. `magenta`) to the white default, so the `pattern` rejects a
79
+ non-hex value as `invalid_options` rather than advertising an inert
80
+ free-form string (e2e staging-verified 2026-06-22).
81
+ width:
82
+ type: integer
83
+ min: 1
84
+ max: 16384
85
+ honored_on: [format_change]
86
+ description: >-
87
+ Resize-inside-Output: target width in pixels (1-16384; width*height <=
88
+ max_output_pixels). The convert worker resizes (Lanczos) before encode;
89
+ single transformed output. NOT honored for SVG input (the worker
90
+ rejects svg resize). Input-gated — see the resize comment above.
91
+ height:
92
+ type: integer
93
+ min: 1
94
+ max: 16384
95
+ honored_on: [format_change]
96
+ description: "Resize-inside-Output: target height in pixels (1-16384; width*height <= max_output_pixels). Not honored for SVG input. See `width`."
97
+ fit:
98
+ type: enum
99
+ values: [max, crop, scale]
100
+ default: max
101
+ depends_on: { width: set, height: set, logic: or }
102
+ honored_on: [format_change]
103
+ description: >-
104
+ Resize mode. `max` (default) = fit within bounds, preserving aspect ratio
105
+ and NEVER upscaling — it caps at the source dimensions. This IS the
106
+ "no-enlarge" behaviour (there is no separate `no_enlarge` flag — the
107
+ worker has no such key). `crop`/`scale` = exact dimensions (`scale`
108
+ deliberately enlarges past source). Applies only when width or height is set.
109
+
110
+ # svg is VECTOR: it converts (rasterises) to a raster format, but CANNOT be
111
+ # raster-resized — the convert worker rejects svg resize. Split out of
112
+ # convert.image so width/height/fit are STRUCTURALLY absent for svg input:
113
+ # the API validates an svg op against THIS group + rejects resize at create
114
+ # (not prose), and raw schema / availability / accepted-options never
115
+ # advertise svg resize. Mirrors compress.image_svg. NO resize, NO area cap.
116
+ image_svg:
117
+ mimes:
118
+ - image/svg+xml
119
+ options:
120
+ output_format:
121
+ type: enum
122
+ values: [jpeg, png, webp, avif, gif, tiff]
123
+ required: true
124
+ description: "Target raster format (SVG is rasterised, then encoded)."
125
+ quality:
126
+ type: integer
127
+ min: 1
128
+ max: 100
129
+ default: 85
130
+ depends_on: { output_format: [jpeg, webp, avif] }
131
+ honored_on: [format_change]
132
+ description: "Output quality for lossy formats"
133
+ background:
134
+ type: string
135
+ pattern: "^#[0-9a-fA-F]{6}$"
52
136
  depends_on: { output_format: jpeg }
53
137
  honored_on: [format_change]
54
- description: "Background colour (hex, e.g. '#ffffff') for transparent images converted to JPEG (the format-change→JPEG alpha-flatten — Output's transparency fill control)."
138
+ description: >-
139
+ Background colour as a 6-digit hex (`#RRGGBB`) for transparent SVG
140
+ rasterised to JPEG (alpha-flatten). HEX ONLY — non-hex is rejected as
141
+ `invalid_options` (see convert.image.background).
55
142
 
56
143
  video:
57
144
  mimes: