imagekitio 4.0.0 → 4.1.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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +1 -1
  4. data/lib/imagekitio/client.rb +4 -0
  5. data/lib/imagekitio/helpers/helper.rb +4 -0
  6. data/lib/imagekitio/helpers/transformation_utils.rb +7 -0
  7. data/lib/imagekitio/internal/transport/base_client.rb +7 -1
  8. data/lib/imagekitio/internal/transport/pooled_net_requester.rb +17 -24
  9. data/lib/imagekitio/internal/type/base_model.rb +1 -0
  10. data/lib/imagekitio/internal/type/union.rb +20 -8
  11. data/lib/imagekitio/internal/util.rb +7 -2
  12. data/lib/imagekitio/models/base_overlay.rb +73 -3
  13. data/lib/imagekitio/models/beta/v2/file_upload_params.rb +2 -2
  14. data/lib/imagekitio/models/beta/v2/file_upload_response.rb +21 -1
  15. data/lib/imagekitio/models/extension_config.rb +674 -0
  16. data/lib/imagekitio/models/extensions.rb +559 -1
  17. data/lib/imagekitio/models/file_update_response.rb +21 -1
  18. data/lib/imagekitio/models/file_upload_params.rb +2 -2
  19. data/lib/imagekitio/models/file_upload_response.rb +21 -1
  20. data/lib/imagekitio/models/image_overlay.rb +12 -0
  21. data/lib/imagekitio/models/saved_extension.rb +62 -0
  22. data/lib/imagekitio/models/saved_extension_create_params.rb +42 -0
  23. data/lib/imagekitio/models/saved_extension_delete_params.rb +14 -0
  24. data/lib/imagekitio/models/saved_extension_get_params.rb +14 -0
  25. data/lib/imagekitio/models/saved_extension_list_params.rb +14 -0
  26. data/lib/imagekitio/models/saved_extension_list_response.rb +8 -0
  27. data/lib/imagekitio/models/saved_extension_update_params.rb +42 -0
  28. data/lib/imagekitio/models/solid_color_overlay_transformation.rb +24 -12
  29. data/lib/imagekitio/models/subtitle_overlay.rb +12 -0
  30. data/lib/imagekitio/models/subtitle_overlay_transformation.rb +4 -3
  31. data/lib/imagekitio/models/text_overlay.rb +6 -0
  32. data/lib/imagekitio/models/text_overlay_transformation.rb +35 -19
  33. data/lib/imagekitio/models/transformation.rb +62 -12
  34. data/lib/imagekitio/models/unsafe_unwrap_webhook_event.rb +2 -0
  35. data/lib/imagekitio/models/unwrap_webhook_event.rb +2 -0
  36. data/lib/imagekitio/models/update_file_request.rb +2 -2
  37. data/lib/imagekitio/models/upload_pre_transform_success_event.rb +21 -1
  38. data/lib/imagekitio/models/video_overlay.rb +12 -0
  39. data/lib/imagekitio/models.rb +14 -0
  40. data/lib/imagekitio/resources/beta/v2/files.rb +1 -1
  41. data/lib/imagekitio/resources/files/metadata.rb +1 -1
  42. data/lib/imagekitio/resources/files.rb +1 -1
  43. data/lib/imagekitio/resources/saved_extensions.rb +146 -0
  44. data/lib/imagekitio/version.rb +1 -1
  45. data/lib/imagekitio.rb +11 -1
  46. data/manifest.yaml +2 -0
  47. data/rbi/imagekitio/client.rbi +3 -0
  48. data/rbi/imagekitio/internal/transport/base_client.rbi +5 -0
  49. data/rbi/imagekitio/internal/transport/pooled_net_requester.rbi +6 -2
  50. data/rbi/imagekitio/internal/type/base_model.rbi +8 -4
  51. data/rbi/imagekitio/models/base_overlay.rbi +110 -1
  52. data/rbi/imagekitio/models/beta/v2/file_upload_params.rbi +8 -0
  53. data/rbi/imagekitio/models/beta/v2/file_upload_response.rbi +61 -0
  54. data/rbi/imagekitio/models/extension_config.rbi +1403 -0
  55. data/rbi/imagekitio/models/extensions.rbi +1159 -0
  56. data/rbi/imagekitio/models/file_update_response.rbi +61 -0
  57. data/rbi/imagekitio/models/file_upload_params.rbi +8 -0
  58. data/rbi/imagekitio/models/file_upload_response.rbi +61 -0
  59. data/rbi/imagekitio/models/image_overlay.rbi +18 -0
  60. data/rbi/imagekitio/models/saved_extension.rbi +114 -0
  61. data/rbi/imagekitio/models/saved_extension_create_params.rbi +85 -0
  62. data/rbi/imagekitio/models/saved_extension_delete_params.rbi +30 -0
  63. data/rbi/imagekitio/models/saved_extension_get_params.rbi +30 -0
  64. data/rbi/imagekitio/models/saved_extension_list_params.rbi +30 -0
  65. data/rbi/imagekitio/models/saved_extension_list_response.rbi +11 -0
  66. data/rbi/imagekitio/models/saved_extension_update_params.rbi +106 -0
  67. data/rbi/imagekitio/models/solid_color_overlay_transformation.rbi +33 -18
  68. data/rbi/imagekitio/models/subtitle_overlay.rbi +18 -0
  69. data/rbi/imagekitio/models/subtitle_overlay_transformation.rbi +6 -4
  70. data/rbi/imagekitio/models/text_overlay.rbi +9 -0
  71. data/rbi/imagekitio/models/text_overlay_transformation.rbi +47 -26
  72. data/rbi/imagekitio/models/transformation.rbi +99 -18
  73. data/rbi/imagekitio/models/update_file_request.rbi +8 -0
  74. data/rbi/imagekitio/models/upload_pre_transform_success_event.rbi +61 -0
  75. data/rbi/imagekitio/models/video_overlay.rbi +18 -0
  76. data/rbi/imagekitio/models.rbi +14 -0
  77. data/rbi/imagekitio/resources/beta/v2/files.rbi +2 -0
  78. data/rbi/imagekitio/resources/files.rbi +2 -0
  79. data/rbi/imagekitio/resources/saved_extensions.rbi +114 -0
  80. data/sig/imagekitio/client.rbs +2 -0
  81. data/sig/imagekitio/internal/transport/base_client.rbs +2 -0
  82. data/sig/imagekitio/internal/transport/pooled_net_requester.rbs +4 -1
  83. data/sig/imagekitio/models/base_overlay.rbs +22 -0
  84. data/sig/imagekitio/models/beta/v2/file_upload_response.rbs +21 -0
  85. data/sig/imagekitio/models/extension_config.rbs +604 -0
  86. data/sig/imagekitio/models/extensions.rbs +489 -0
  87. data/sig/imagekitio/models/file_update_response.rbs +21 -0
  88. data/sig/imagekitio/models/file_upload_response.rbs +21 -0
  89. data/sig/imagekitio/models/saved_extension.rbs +59 -0
  90. data/sig/imagekitio/models/saved_extension_create_params.rbs +36 -0
  91. data/sig/imagekitio/models/saved_extension_delete_params.rbs +15 -0
  92. data/sig/imagekitio/models/saved_extension_get_params.rbs +15 -0
  93. data/sig/imagekitio/models/saved_extension_list_params.rbs +15 -0
  94. data/sig/imagekitio/models/saved_extension_list_response.rbs +7 -0
  95. data/sig/imagekitio/models/saved_extension_update_params.rbs +44 -0
  96. data/sig/imagekitio/models/solid_color_overlay_transformation.rbs +1 -1
  97. data/sig/imagekitio/models/text_overlay_transformation.rbs +1 -1
  98. data/sig/imagekitio/models/transformation.rbs +15 -1
  99. data/sig/imagekitio/models/upload_pre_transform_success_event.rbs +21 -0
  100. data/sig/imagekitio/models.rbs +14 -0
  101. data/sig/imagekitio/resources/saved_extensions.rbs +33 -0
  102. metadata +43 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dceef4a09889f51f86bee19828978c7abed42adbd5e8c538b0d12127c47b8537
4
- data.tar.gz: cefed9c3863102011bb13414b9484f7aff33fde88c663f24d59e6c04a591b5b2
3
+ metadata.gz: 6717d24cd84488c01c7393c38be3ac3c51ef9f217b4d9492f32c68eb6d3df003
4
+ data.tar.gz: 919ade7e57e4398449e88960776149fba5330d6372bcdda23c565d0611cbd575
5
5
  SHA512:
6
- metadata.gz: 537fc82f6b32dfc0c143e2e534e08e631892ade9382cb6142a9575d8a4da5c4a5c04df5429fc9e724f8bdd12457c3b14a705b5910f2859bf1b68543804bf8dbe
7
- data.tar.gz: 8d70ce2f62eb84f4b95303421706f573f5b146aba67e819c458fb592a9458ae6da58993386f54cc7f107acdefa17b343ae9c7d4a927e5c08ada7e0652d2ef2ab
6
+ metadata.gz: 1253e7406eab7e10d9433e87a5b09bc5bcd6949650cfd9c8780a8ebf0e21972fb31817825dec837e86dc43acfb14af3a2cd53fb04f3f35d9e3643e2510f992fd
7
+ data.tar.gz: 30dd22521808a03e97eb958ffdde26953606a3203af915dbfab69f7413c7f9ee5dd9aca905ffed50f7c9d4d06c777d893a2ce81b0af95e0374c8333d996f4d27
data/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.1.0 (2026-01-16)
4
+
5
+ Full Changelog: [v4.0.0...v4.1.0](https://github.com/imagekit-developer/imagekit-ruby/compare/v4.0.0...v4.1.0)
6
+
7
+ ### Features
8
+
9
+ * add layer_mode property to overlays and new transformation options ([97042ce](https://github.com/imagekit-developer/imagekit-ruby/commit/97042ce9bffaf101ab98dd7394caaf4df9a873ea))
10
+ * **api:** Add saved extensions API and enhance transformation options ([f1dc75e](https://github.com/imagekit-developer/imagekit-ruby/commit/f1dc75ecbe0a4a39472fdc10e9dc8f02e75ddc07))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * add ai-tasks property to response schemas with enum values ([aad5e54](https://github.com/imagekit-developer/imagekit-ruby/commit/aad5e5413676af916e8149f07ae78aaff7c5c313))
16
+ * better thread safety via early initializing SSL store during HTTP client creation ([2bc0835](https://github.com/imagekit-developer/imagekit-ruby/commit/2bc0835981c29b717f0ad3a7d78c3c78027874e0))
17
+ * calling `break` out of streams should be instantaneous ([55bf4a9](https://github.com/imagekit-developer/imagekit-ruby/commit/55bf4a9b768f18f4adad903b2c9d93178a670151))
18
+ * issue where json.parse errors when receiving HTTP 204 with nobody ([dd32cb1](https://github.com/imagekit-developer/imagekit-ruby/commit/dd32cb1572bc155db85ed898011374889996b3fd))
19
+ * remove redundant base64 require statement ([4c73b42](https://github.com/imagekit-developer/imagekit-ruby/commit/4c73b425564e980b21dfd1f3554f8a2e45aaeecf))
20
+
21
+
22
+ ### Chores
23
+
24
+ * bump dependency version and update sorbet types ([8d89fb2](https://github.com/imagekit-developer/imagekit-ruby/commit/8d89fb2c1654420f83bb7efedcc9056c5a7e3c79))
25
+ * **client:** send user-agent header ([796027d](https://github.com/imagekit-developer/imagekit-ruby/commit/796027d185c93067c32bac98323d8a82aeaf9bfe))
26
+ * explicitly require "base64" gem ([1b4181d](https://github.com/imagekit-developer/imagekit-ruby/commit/1b4181d4e57d2c12306f6d3f43b832f63ab68053))
27
+ * **internal:** codegen related update ([3a93def](https://github.com/imagekit-developer/imagekit-ruby/commit/3a93def2d09609b359824a627183833ae59d74e1))
28
+ * **internal:** codegen related update ([4c161f0](https://github.com/imagekit-developer/imagekit-ruby/commit/4c161f048927df137a12d33a5a1b79af1c561b8b))
29
+ * move `cgi` into dependencies for ruby 4 ([54261ef](https://github.com/imagekit-developer/imagekit-ruby/commit/54261ef9f24e206d2180dc0a205464154af4c3ed))
30
+
31
+
32
+ ### Documentation
33
+
34
+ * prominently feature MCP server setup in root SDK readmes ([777f8cf](https://github.com/imagekit-developer/imagekit-ruby/commit/777f8cf5cc692eed3e8f6217caf25a85d17201f7))
35
+ * remove MCP Server section from README ([db0f71c](https://github.com/imagekit-developer/imagekit-ruby/commit/db0f71cce159f4c395fe8c7c0526d4108934fc6b))
36
+
3
37
  ## 4.0.0 (2025-11-03)
4
38
 
5
39
  Full Changelog: [v0.0.1...v4.0.0](https://github.com/imagekit-developer/imagekit-ruby/compare/v0.0.1...v4.0.0)
data/README.md CHANGED
@@ -45,7 +45,7 @@ To use this gem, install via Bundler by adding the following to your application
45
45
  <!-- x-release-please-start-version -->
46
46
 
47
47
  ```ruby
48
- gem "imagekitio", "~> 4.0.0"
48
+ gem "imagekitio", "~> 4.1.0"
49
49
  ```
50
50
 
51
51
  <!-- x-release-please-end -->
@@ -31,6 +31,9 @@ module Imagekitio
31
31
  # @return [Imagekitio::Resources::Files]
32
32
  attr_reader :files
33
33
 
34
+ # @return [Imagekitio::Resources::SavedExtensions]
35
+ attr_reader :saved_extensions
36
+
34
37
  # @return [Imagekitio::Resources::Assets]
35
38
  attr_reader :assets
36
39
 
@@ -117,6 +120,7 @@ module Imagekitio
117
120
 
118
121
  @custom_metadata_fields = Imagekitio::Resources::CustomMetadataFields.new(client: self)
119
122
  @files = Imagekitio::Resources::Files.new(client: self)
123
+ @saved_extensions = Imagekitio::Resources::SavedExtensions.new(client: self)
120
124
  @assets = Imagekitio::Resources::Assets.new(client: self)
121
125
  @cache = Imagekitio::Resources::Cache.new(client: self)
122
126
  @folders = Imagekitio::Resources::Folders.new(client: self)
@@ -626,6 +626,10 @@ module Imagekitio
626
626
 
627
627
  # Add overlay properties like position, timing, transformations (matching Node.js)
628
628
  def add_overlay_properties(parts, overlay)
629
+ # Add layer_mode property
630
+ layer_mode = safe_get(overlay, :layer_mode)
631
+ parts << "lm-#{layer_mode}" if layer_mode
632
+
629
633
  # Add position properties
630
634
  position = safe_get(overlay, :position)
631
635
  if position
@@ -82,6 +82,9 @@ module Imagekitio
82
82
  "unsharp_mask" => "e-usm",
83
83
  "unsharpMask" => "e-usm",
84
84
  "gradient" => "e-gradient",
85
+ "color_replace" => "cr",
86
+ "colorReplace" => "cr",
87
+ "distort" => "e-distort",
85
88
 
86
89
  # Other flags & finishing
87
90
  "progressive" => "pr",
@@ -109,6 +112,10 @@ module Imagekitio
109
112
  "line_height" => "lh",
110
113
  "lineHeight" => "lh",
111
114
 
115
+ # Overlay transformations
116
+ "layer_mode" => "lm",
117
+ "layerMode" => "lm",
118
+
112
119
  # Subtitles transformations
113
120
  "font_outline" => "fol",
114
121
  "fontOutline" => "fol",
@@ -201,7 +201,8 @@ module Imagekitio
201
201
  self.class::PLATFORM_HEADERS,
202
202
  {
203
203
  "accept" => "application/json",
204
- "content-type" => "application/json"
204
+ "content-type" => "application/json",
205
+ "user-agent" => user_agent
205
206
  },
206
207
  headers
207
208
  )
@@ -219,6 +220,11 @@ module Imagekitio
219
220
  # @return [Hash{String=>String}]
220
221
  private def auth_headers = {}
221
222
 
223
+ # @api private
224
+ #
225
+ # @return [String]
226
+ private def user_agent = "#{self.class.name}/Ruby #{Imagekitio::VERSION}"
227
+
222
228
  # @api private
223
229
  #
224
230
  # @return [String]
@@ -16,10 +16,11 @@ module Imagekitio
16
16
  class << self
17
17
  # @api private
18
18
  #
19
+ # @param cert_store [OpenSSL::X509::Store]
19
20
  # @param url [URI::Generic]
20
21
  #
21
22
  # @return [Net::HTTP]
22
- def connect(url)
23
+ def connect(cert_store:, url:)
23
24
  port =
24
25
  case [url.port, url.scheme]
25
26
  in [Integer, _]
@@ -34,18 +35,7 @@ module Imagekitio
34
35
  _1.use_ssl = %w[https wss].include?(url.scheme)
35
36
  _1.max_retries = 0
36
37
 
37
- # Temporary workaround for SSL verification issue on some
38
- # platforms. Similar to: https://github.com/stripe/stripe-ruby/pull/397
39
- # Without this fix you may see errors like:
40
- # .rbenv/versions/3.2.0/lib/ruby/3.2.0/net/protocol.rb:46:in `connect_nonblock':
41
- # SSL_connect returned=1 errno=0 peeraddr=52.23.130.57:443 state=error:
42
- # certificate verify failed (unable to get certificate CRL) (OpenSSL::SSL::SSLError)
43
- if _1.use_ssl?
44
- cert_store = OpenSSL::X509::Store.new
45
- cert_store.set_default_paths
46
- _1.cert_store = cert_store
47
- _1.verify_mode = OpenSSL::SSL::VERIFY_PEER
48
- end
38
+ (_1.cert_store = cert_store) if _1.use_ssl?
49
39
  end
50
40
  end
51
41
 
@@ -115,7 +105,7 @@ module Imagekitio
115
105
  pool =
116
106
  @mutex.synchronize do
117
107
  @pools[origin] ||= ConnectionPool.new(size: @size) do
118
- self.class.connect(url)
108
+ self.class.connect(cert_store: @cert_store, url: url)
119
109
  end
120
110
  end
121
111
 
@@ -163,17 +153,19 @@ module Imagekitio
163
153
  end
164
154
 
165
155
  self.class.calibrate_socket_timeout(conn, deadline)
166
- conn.request(req) do |rsp|
167
- y << [req, rsp]
168
- break if finished
169
-
170
- rsp.read_body do |bytes|
171
- y << bytes.force_encoding(Encoding::BINARY)
172
- break if finished
173
-
174
- self.class.calibrate_socket_timeout(conn, deadline)
156
+ ::Kernel.catch(:jump) do
157
+ conn.request(req) do |rsp|
158
+ y << [req, rsp]
159
+ ::Kernel.throw(:jump) if finished
160
+
161
+ rsp.read_body do |bytes|
162
+ y << bytes.force_encoding(Encoding::BINARY)
163
+ ::Kernel.throw(:jump) if finished
164
+
165
+ self.class.calibrate_socket_timeout(conn, deadline)
166
+ end
167
+ eof = true
175
168
  end
176
- eof = true
177
169
  end
178
170
  end
179
171
  ensure
@@ -205,6 +197,7 @@ module Imagekitio
205
197
  def initialize(size: self.class::DEFAULT_MAX_CONNECTIONS)
206
198
  @mutex = Mutex.new
207
199
  @size = size
200
+ @cert_store = OpenSSL::X509::Store.new.tap(&:set_default_paths)
208
201
  @pools = {}
209
202
  end
210
203
 
@@ -440,6 +440,7 @@ module Imagekitio
440
440
  # @example
441
441
  # # `base_overlay` is a `Imagekitio::BaseOverlay`
442
442
  # base_overlay => {
443
+ # layer_mode: layer_mode,
443
444
  # position: position,
444
445
  # timing: timing
445
446
  # }
@@ -6,16 +6,28 @@ module Imagekitio
6
6
  # @api private
7
7
  #
8
8
  # @example
9
- # # `overlay` is a `Imagekitio::Overlay`
10
- # case overlay
11
- # when Imagekitio::TextOverlay
12
- # # ...
13
- # when Imagekitio::ImageOverlay
14
- # # ...
15
- # when Imagekitio::VideoOverlay
9
+ # # `extension_config` is a `Imagekitio::ExtensionConfig`
10
+ # case extension_config
11
+ # when Imagekitio::ExtensionConfig::RemoveBg
12
+ # puts(extension_config.name)
13
+ # when Imagekitio::ExtensionConfig::AIAutoDescription
14
+ # puts(extension_config.name)
15
+ # when Imagekitio::ExtensionConfig::AITasks
16
+ # puts(extension_config.tasks)
17
+ # else
18
+ # puts(extension_config)
19
+ # end
20
+ #
21
+ # @example
22
+ # case extension_config
23
+ # in {name: :"remove-bg", options: options}
24
+ # puts(options)
25
+ # in {name: :"ai-auto-description"}
16
26
  # # ...
27
+ # in {name: :"ai-tasks", tasks: tasks}
28
+ # puts(tasks)
17
29
  # else
18
- # puts(overlay)
30
+ # puts(extension_config)
19
31
  # end
20
32
  module Union
21
33
  include Imagekitio::Internal::Type::Converter
@@ -657,7 +657,8 @@ module Imagekitio
657
657
  def decode_content(headers, stream:, suppress_error: false)
658
658
  case (content_type = headers["content-type"])
659
659
  in Imagekitio::Internal::Util::JSON_CONTENT
660
- json = stream.to_a.join
660
+ return nil if (json = stream.to_a.join).empty?
661
+
661
662
  begin
662
663
  JSON.parse(json, symbolize_names: true)
663
664
  rescue JSON::ParserError => e
@@ -667,7 +668,11 @@ module Imagekitio
667
668
  in Imagekitio::Internal::Util::JSONL_CONTENT
668
669
  lines = decode_lines(stream)
669
670
  chain_fused(lines) do |y|
670
- lines.each { y << JSON.parse(_1, symbolize_names: true) }
671
+ lines.each do
672
+ next if _1.empty?
673
+
674
+ y << JSON.parse(_1, symbolize_names: true)
675
+ end
671
676
  end
672
677
  in %r{^text/event-stream}
673
678
  lines = decode_lines(stream)
@@ -3,19 +3,89 @@
3
3
  module Imagekitio
4
4
  module Models
5
5
  class BaseOverlay < Imagekitio::Internal::Type::BaseModel
6
+ # @!attribute layer_mode
7
+ # Controls how the layer blends with the base image or underlying content. Maps to
8
+ # `lm` in the URL. By default, layers completely cover the base image beneath
9
+ # them. Layer modes change this behavior:
10
+ #
11
+ # - `multiply`: Multiplies the pixel values of the layer with the base image. The
12
+ # result is always darker than the original images. This is ideal for applying
13
+ # shadows or color tints.
14
+ # - `displace`: Uses the layer as a displacement map to distort pixels in the base
15
+ # image. The red channel controls horizontal displacement, and the green channel
16
+ # controls vertical displacement. Requires `x` or `y` parameter to control
17
+ # displacement magnitude.
18
+ # - `cutout`: Acts as an inverse mask where opaque areas of the layer turn the
19
+ # base image transparent, while transparent areas leave the base image
20
+ # unchanged. This mode functions like a hole-punch, effectively cutting the
21
+ # shape of the layer out of the underlying image.
22
+ # - `cutter`: Acts as a shape mask where only the parts of the base image that
23
+ # fall inside the opaque area of the layer are preserved. This mode functions
24
+ # like a cookie-cutter, trimming the base image to match the specific dimensions
25
+ # and shape of the layer. See
26
+ # [Layer modes](https://imagekit.io/docs/add-overlays-on-images#layer-modes).
27
+ #
28
+ # @return [Symbol, Imagekitio::Models::BaseOverlay::LayerMode, nil]
29
+ optional :layer_mode, enum: -> { Imagekitio::BaseOverlay::LayerMode }, api_name: :layerMode
30
+
6
31
  # @!attribute position
32
+ # Specifies the overlay's position relative to the parent asset. See
33
+ # [Position of Layer](https://imagekit.io/docs/transformations#position-of-layer).
7
34
  #
8
35
  # @return [Imagekitio::Models::OverlayPosition, nil]
9
36
  optional :position, -> { Imagekitio::OverlayPosition }
10
37
 
11
38
  # @!attribute timing
39
+ # Specifies timing information for the overlay (only applicable if the base asset
40
+ # is a video). See
41
+ # [Position of Layer](https://imagekit.io/docs/transformations#position-of-layer).
12
42
  #
13
43
  # @return [Imagekitio::Models::OverlayTiming, nil]
14
44
  optional :timing, -> { Imagekitio::OverlayTiming }
15
45
 
16
- # @!method initialize(position: nil, timing: nil)
17
- # @param position [Imagekitio::Models::OverlayPosition]
18
- # @param timing [Imagekitio::Models::OverlayTiming]
46
+ # @!method initialize(layer_mode: nil, position: nil, timing: nil)
47
+ # Some parameter documentations has been truncated, see
48
+ # {Imagekitio::Models::BaseOverlay} for more details.
49
+ #
50
+ # @param layer_mode [Symbol, Imagekitio::Models::BaseOverlay::LayerMode] Controls how the layer blends with the base image or underlying content. Maps to
51
+ #
52
+ # @param position [Imagekitio::Models::OverlayPosition] Specifies the overlay's position relative to the parent asset.
53
+ #
54
+ # @param timing [Imagekitio::Models::OverlayTiming] Specifies timing information for the overlay (only applicable if the base asset
55
+
56
+ # Controls how the layer blends with the base image or underlying content. Maps to
57
+ # `lm` in the URL. By default, layers completely cover the base image beneath
58
+ # them. Layer modes change this behavior:
59
+ #
60
+ # - `multiply`: Multiplies the pixel values of the layer with the base image. The
61
+ # result is always darker than the original images. This is ideal for applying
62
+ # shadows or color tints.
63
+ # - `displace`: Uses the layer as a displacement map to distort pixels in the base
64
+ # image. The red channel controls horizontal displacement, and the green channel
65
+ # controls vertical displacement. Requires `x` or `y` parameter to control
66
+ # displacement magnitude.
67
+ # - `cutout`: Acts as an inverse mask where opaque areas of the layer turn the
68
+ # base image transparent, while transparent areas leave the base image
69
+ # unchanged. This mode functions like a hole-punch, effectively cutting the
70
+ # shape of the layer out of the underlying image.
71
+ # - `cutter`: Acts as a shape mask where only the parts of the base image that
72
+ # fall inside the opaque area of the layer are preserved. This mode functions
73
+ # like a cookie-cutter, trimming the base image to match the specific dimensions
74
+ # and shape of the layer. See
75
+ # [Layer modes](https://imagekit.io/docs/add-overlays-on-images#layer-modes).
76
+ #
77
+ # @see Imagekitio::Models::BaseOverlay#layer_mode
78
+ module LayerMode
79
+ extend Imagekitio::Internal::Type::Enum
80
+
81
+ MULTIPLY = :multiply
82
+ CUTTER = :cutter
83
+ CUTOUT = :cutout
84
+ DISPLACE = :displace
85
+
86
+ # @!method self.values
87
+ # @return [Array<Symbol>]
88
+ end
19
89
  end
20
90
  end
21
91
  end
@@ -149,7 +149,7 @@ module Imagekitio
149
149
  # Array of extensions to be applied to the asset. Each extension can be configured
150
150
  # with specific parameters based on the extension type.
151
151
  #
152
- # @return [Array<Imagekitio::Models::ExtensionItem::RemoveBg, Imagekitio::Models::ExtensionItem::AIAutoDescription, Imagekitio::Models::ExtensionItem::AutoTaggingExtension>, nil]
152
+ # @return [Array<Imagekitio::Models::ExtensionItem::RemoveBg, Imagekitio::Models::ExtensionItem::AIAutoDescription, Imagekitio::Models::ExtensionItem::AITasks, Imagekitio::Models::ExtensionItem::SavedExtension, Imagekitio::Models::ExtensionItem::AutoTaggingExtension>, nil]
153
153
  optional :extensions, -> { Imagekitio::Internal::Type::ArrayOf[union: Imagekitio::ExtensionItem] }
154
154
 
155
155
  # @!attribute folder
@@ -286,7 +286,7 @@ module Imagekitio
286
286
  #
287
287
  # @param description [String] Optional text to describe the contents of the file.
288
288
  #
289
- # @param extensions [Array<Imagekitio::Models::ExtensionItem::RemoveBg, Imagekitio::Models::ExtensionItem::AIAutoDescription, Imagekitio::Models::ExtensionItem::AutoTaggingExtension>] Array of extensions to be applied to the asset. Each extension can be configured
289
+ # @param extensions [Array<Imagekitio::Models::ExtensionItem::RemoveBg, Imagekitio::Models::ExtensionItem::AIAutoDescription, Imagekitio::Models::ExtensionItem::AITasks, Imagekitio::Models::ExtensionItem::SavedExtension, Imagekitio::Models::ExtensionItem::AutoTaggingExtension>] Array of extensions to be applied to the asset. Each extension can be configured
290
290
  #
291
291
  # @param folder [String] The folder path in which the image has to be uploaded. If the folder(s) didn't e
292
292
  #
@@ -299,6 +299,13 @@ module Imagekitio
299
299
  enum: -> { Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AIAutoDescription },
300
300
  api_name: :"ai-auto-description"
301
301
 
302
+ # @!attribute ai_tasks
303
+ #
304
+ # @return [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AITasks, nil]
305
+ optional :ai_tasks,
306
+ enum: -> { Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AITasks },
307
+ api_name: :"ai-tasks"
308
+
302
309
  # @!attribute aws_auto_tagging
303
310
  #
304
311
  # @return [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AwsAutoTagging, nil]
@@ -320,7 +327,7 @@ module Imagekitio
320
327
  enum: -> { Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::RemoveBg },
321
328
  api_name: :"remove-bg"
322
329
 
323
- # @!method initialize(ai_auto_description: nil, aws_auto_tagging: nil, google_auto_tagging: nil, remove_bg: nil)
330
+ # @!method initialize(ai_auto_description: nil, ai_tasks: nil, aws_auto_tagging: nil, google_auto_tagging: nil, remove_bg: nil)
324
331
  # Extension names with their processing status at the time of completion of the
325
332
  # request. It could have one of the following status values:
326
333
  #
@@ -332,6 +339,7 @@ module Imagekitio
332
339
  # If no extension was requested, then this parameter is not returned.
333
340
  #
334
341
  # @param ai_auto_description [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AIAutoDescription]
342
+ # @param ai_tasks [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AITasks]
335
343
  # @param aws_auto_tagging [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::AwsAutoTagging]
336
344
  # @param google_auto_tagging [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::GoogleAutoTagging]
337
345
  # @param remove_bg [Symbol, Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus::RemoveBg]
@@ -348,6 +356,18 @@ module Imagekitio
348
356
  # @return [Array<Symbol>]
349
357
  end
350
358
 
359
+ # @see Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus#ai_tasks
360
+ module AITasks
361
+ extend Imagekitio::Internal::Type::Enum
362
+
363
+ SUCCESS = :success
364
+ PENDING = :pending
365
+ FAILED = :failed
366
+
367
+ # @!method self.values
368
+ # @return [Array<Symbol>]
369
+ end
370
+
351
371
  # @see Imagekitio::Models::Beta::V2::FileUploadResponse::ExtensionStatus#aws_auto_tagging
352
372
  module AwsAutoTagging
353
373
  extend Imagekitio::Internal::Type::Enum