ailabtools 0.5.4

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 (204) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +8 -0
  3. data/LICENSE +21 -0
  4. data/README.md +121 -0
  5. data/lib/ailabtools/api/background_api.rb +15 -0
  6. data/lib/ailabtools/api/common_api.rb +20 -0
  7. data/lib/ailabtools/api/cutout_api.rb +48 -0
  8. data/lib/ailabtools/api/image_api.rb +140 -0
  9. data/lib/ailabtools/api/portrait_api.rb +228 -0
  10. data/lib/ailabtools/client.rb +37 -0
  11. data/lib/ailabtools/errors.rb +21 -0
  12. data/lib/ailabtools/file_input.rb +27 -0
  13. data/lib/ailabtools/generated/params/common_query_async_task_result_params.rb +24 -0
  14. data/lib/ailabtools/generated/params/common_query_credits_params.rb +19 -0
  15. data/lib/ailabtools/generated/params/cutout_avatar_extraction_params.rb +26 -0
  16. data/lib/ailabtools/generated/params/cutout_clothing_background_removal_params.rb +30 -0
  17. data/lib/ailabtools/generated/params/cutout_food_background_removal_params.rb +26 -0
  18. data/lib/ailabtools/generated/params/cutout_hair_extraction_params.rb +24 -0
  19. data/lib/ailabtools/generated/params/cutout_hd_human_body_background_removal_params.rb +24 -0
  20. data/lib/ailabtools/generated/params/cutout_hd_universal_background_removal_params.rb +24 -0
  21. data/lib/ailabtools/generated/params/cutout_human_background_removal_params.rb +26 -0
  22. data/lib/ailabtools/generated/params/cutout_product_background_removal_params.rb +26 -0
  23. data/lib/ailabtools/generated/params/cutout_universal_background_removal_params.rb +26 -0
  24. data/lib/ailabtools/generated/params/image_ai_cartoon_generator_params.rb +28 -0
  25. data/lib/ailabtools/generated/params/image_ai_emoji_generator_params.rb +32 -0
  26. data/lib/ailabtools/generated/params/image_ai_flower_wallpaper_params.rb +32 -0
  27. data/lib/ailabtools/generated/params/image_ai_image_cropping_params.rb +28 -0
  28. data/lib/ailabtools/generated/params/image_ai_image_extender_params.rb +48 -0
  29. data/lib/ailabtools/generated/params/image_ai_nail_art_params.rb +28 -0
  30. data/lib/ailabtools/generated/params/image_ai_nail_art_pro_params.rb +28 -0
  31. data/lib/ailabtools/generated/params/image_ai_object_replacer_params.rb +34 -0
  32. data/lib/ailabtools/generated/params/image_ai_photography_params.rb +30 -0
  33. data/lib/ailabtools/generated/params/image_clarity_enhancement_params.rb +24 -0
  34. data/lib/ailabtools/generated/params/image_color_enhancement_params.rb +28 -0
  35. data/lib/ailabtools/generated/params/image_coloring_params.rb +24 -0
  36. data/lib/ailabtools/generated/params/image_composition_aesthetics_score_params.rb +24 -0
  37. data/lib/ailabtools/generated/params/image_contrast_enhancement_params.rb +24 -0
  38. data/lib/ailabtools/generated/params/image_dehaze_params.rb +24 -0
  39. data/lib/ailabtools/generated/params/image_distortion_correction_params.rb +24 -0
  40. data/lib/ailabtools/generated/params/image_erasure_params.rb +26 -0
  41. data/lib/ailabtools/generated/params/image_exposure_rating_params.rb +24 -0
  42. data/lib/ailabtools/generated/params/image_intelligent_composition_params.rb +26 -0
  43. data/lib/ailabtools/generated/params/image_invisible_image_watermark_params.rb +34 -0
  44. data/lib/ailabtools/generated/params/image_invisible_text_watermark_params.rb +34 -0
  45. data/lib/ailabtools/generated/params/image_lossless_enlargement_params.rb +32 -0
  46. data/lib/ailabtools/generated/params/image_photo_editing_params.rb +26 -0
  47. data/lib/ailabtools/generated/params/image_photo_to_coloring_page_params.rb +28 -0
  48. data/lib/ailabtools/generated/params/image_querying_async_task_results_params.rb +26 -0
  49. data/lib/ailabtools/generated/params/image_remove_objects_advanced_params.rb +38 -0
  50. data/lib/ailabtools/generated/params/image_remove_objects_params.rb +26 -0
  51. data/lib/ailabtools/generated/params/image_remove_objects_pro_params.rb +26 -0
  52. data/lib/ailabtools/generated/params/image_style_migration_params.rb +26 -0
  53. data/lib/ailabtools/generated/params/image_style_transfer_params.rb +26 -0
  54. data/lib/ailabtools/generated/params/portrait_ai_bald_params.rb +24 -0
  55. data/lib/ailabtools/generated/params/portrait_ai_beard_removal_params.rb +24 -0
  56. data/lib/ailabtools/generated/params/portrait_ai_beard_styling_params.rb +29 -0
  57. data/lib/ailabtools/generated/params/portrait_ai_big_head_effect_params.rb +24 -0
  58. data/lib/ailabtools/generated/params/portrait_ai_breast_expansion_params.rb +26 -0
  59. data/lib/ailabtools/generated/params/portrait_ai_butt_enhancement_params.rb +24 -0
  60. data/lib/ailabtools/generated/params/portrait_ai_colored_contacts_params.rb +28 -0
  61. data/lib/ailabtools/generated/params/portrait_ai_eyebrows_params.rb +28 -0
  62. data/lib/ailabtools/generated/params/portrait_ai_eyelashes_params.rb +28 -0
  63. data/lib/ailabtools/generated/params/portrait_ai_eyeshadow_try_on_params.rb +31 -0
  64. data/lib/ailabtools/generated/params/portrait_ai_face_rating_params.rb +26 -0
  65. data/lib/ailabtools/generated/params/portrait_ai_face_swap_params.rb +26 -0
  66. data/lib/ailabtools/generated/params/portrait_ai_fat_filter_params.rb +24 -0
  67. data/lib/ailabtools/generated/params/portrait_ai_hair_color_params.rb +28 -0
  68. data/lib/ailabtools/generated/params/portrait_ai_hair_loss_simulation_params.rb +26 -0
  69. data/lib/ailabtools/generated/params/portrait_ai_halloween_mask_params.rb +31 -0
  70. data/lib/ailabtools/generated/params/portrait_ai_lip_bite_expressions_params.rb +28 -0
  71. data/lib/ailabtools/generated/params/portrait_ai_lip_enhancement_params.rb +24 -0
  72. data/lib/ailabtools/generated/params/portrait_ai_red_lip_gloss_params.rb +24 -0
  73. data/lib/ailabtools/generated/params/portrait_ai_skin_enhancement_advanced_params.rb +42 -0
  74. data/lib/ailabtools/generated/params/portrait_ai_square_face_filter_params.rb +24 -0
  75. data/lib/ailabtools/generated/params/portrait_ai_waist_slimming_params.rb +24 -0
  76. data/lib/ailabtools/generated/params/portrait_cartoon_yourself_params.rb +26 -0
  77. data/lib/ailabtools/generated/params/portrait_expression_editing_advanced_params.rb +26 -0
  78. data/lib/ailabtools/generated/params/portrait_expression_editing_params.rb +26 -0
  79. data/lib/ailabtools/generated/params/portrait_face_analyzer_advanced_params.rb +24 -0
  80. data/lib/ailabtools/generated/params/portrait_face_analyzer_params.rb +30 -0
  81. data/lib/ailabtools/generated/params/portrait_face_attribute_editing_params.rb +30 -0
  82. data/lib/ailabtools/generated/params/portrait_face_fusion_params.rb +28 -0
  83. data/lib/ailabtools/generated/params/portrait_face_restoration_enhancement_params.rb +24 -0
  84. data/lib/ailabtools/generated/params/portrait_facial_beautification_advanced_params.rb +32 -0
  85. data/lib/ailabtools/generated/params/portrait_facial_beautification_params.rb +30 -0
  86. data/lib/ailabtools/generated/params/portrait_facial_beautification_pro_params.rb +40 -0
  87. data/lib/ailabtools/generated/params/portrait_facial_blurring_params.rb +24 -0
  88. data/lib/ailabtools/generated/params/portrait_facial_filters_params.rb +28 -0
  89. data/lib/ailabtools/generated/params/portrait_facial_landmarks_params.rb +28 -0
  90. data/lib/ailabtools/generated/params/portrait_hairstyle_editing_params.rb +26 -0
  91. data/lib/ailabtools/generated/params/portrait_hairstyle_editing_premium_params.rb +31 -0
  92. data/lib/ailabtools/generated/params/portrait_hairstyle_editing_pro_params.rb +40 -0
  93. data/lib/ailabtools/generated/params/portrait_intelligent_beautification_params.rb +30 -0
  94. data/lib/ailabtools/generated/params/portrait_intelligent_face_slimming_params.rb +26 -0
  95. data/lib/ailabtools/generated/params/portrait_intelligent_skin_retouching_params.rb +28 -0
  96. data/lib/ailabtools/generated/params/portrait_lips_color_changer_params.rb +26 -0
  97. data/lib/ailabtools/generated/params/portrait_live_photos_params.rb +26 -0
  98. data/lib/ailabtools/generated/params/portrait_skin_analysis_advanced_params.rb +30 -0
  99. data/lib/ailabtools/generated/params/portrait_skin_analysis_basic_params.rb +24 -0
  100. data/lib/ailabtools/generated/params/portrait_skin_analysis_professional_params.rb +36 -0
  101. data/lib/ailabtools/generated/params/portrait_skin_disease_detection_params.rb +24 -0
  102. data/lib/ailabtools/generated/params/portrait_try_on_clothes_params.rb +30 -0
  103. data/lib/ailabtools/generated/params/portrait_try_on_clothes_premium_params.rb +34 -0
  104. data/lib/ailabtools/generated/params/portrait_try_on_clothes_pro_params.rb +34 -0
  105. data/lib/ailabtools/generated/params/portrait_try_on_clothes_refiner_params.rb +34 -0
  106. data/lib/ailabtools/generated/responses/common_query_async_task_result_response.rb +35 -0
  107. data/lib/ailabtools/generated/responses/common_query_credits_response.rb +50 -0
  108. data/lib/ailabtools/generated/responses/cutout_avatar_extraction_response.rb +46 -0
  109. data/lib/ailabtools/generated/responses/cutout_clothing_background_removal_response.rb +58 -0
  110. data/lib/ailabtools/generated/responses/cutout_food_background_removal_response.rb +36 -0
  111. data/lib/ailabtools/generated/responses/cutout_hair_extraction_response.rb +46 -0
  112. data/lib/ailabtools/generated/responses/cutout_hd_human_body_background_removal_response.rb +51 -0
  113. data/lib/ailabtools/generated/responses/cutout_hd_universal_background_removal_response.rb +38 -0
  114. data/lib/ailabtools/generated/responses/cutout_human_background_removal_response.rb +36 -0
  115. data/lib/ailabtools/generated/responses/cutout_product_background_removal_response.rb +36 -0
  116. data/lib/ailabtools/generated/responses/cutout_universal_background_removal_response.rb +36 -0
  117. data/lib/ailabtools/generated/responses/image_ai_cartoon_generator_response.rb +36 -0
  118. data/lib/ailabtools/generated/responses/image_ai_emoji_generator_response.rb +42 -0
  119. data/lib/ailabtools/generated/responses/image_ai_flower_wallpaper_response.rb +42 -0
  120. data/lib/ailabtools/generated/responses/image_ai_image_cropping_response.rb +46 -0
  121. data/lib/ailabtools/generated/responses/image_ai_image_extender_response.rb +36 -0
  122. data/lib/ailabtools/generated/responses/image_ai_nail_art_pro_response.rb +42 -0
  123. data/lib/ailabtools/generated/responses/image_ai_nail_art_response.rb +42 -0
  124. data/lib/ailabtools/generated/responses/image_ai_object_replacer_response.rb +36 -0
  125. data/lib/ailabtools/generated/responses/image_ai_photography_response.rb +42 -0
  126. data/lib/ailabtools/generated/responses/image_clarity_enhancement_response.rb +35 -0
  127. data/lib/ailabtools/generated/responses/image_color_enhancement_response.rb +36 -0
  128. data/lib/ailabtools/generated/responses/image_coloring_response.rb +35 -0
  129. data/lib/ailabtools/generated/responses/image_composition_aesthetics_score_response.rb +36 -0
  130. data/lib/ailabtools/generated/responses/image_contrast_enhancement_response.rb +35 -0
  131. data/lib/ailabtools/generated/responses/image_dehaze_response.rb +35 -0
  132. data/lib/ailabtools/generated/responses/image_distortion_correction_response.rb +36 -0
  133. data/lib/ailabtools/generated/responses/image_erasure_response.rb +36 -0
  134. data/lib/ailabtools/generated/responses/image_exposure_rating_response.rb +36 -0
  135. data/lib/ailabtools/generated/responses/image_intelligent_composition_response.rb +46 -0
  136. data/lib/ailabtools/generated/responses/image_invisible_image_watermark_response.rb +38 -0
  137. data/lib/ailabtools/generated/responses/image_invisible_text_watermark_response.rb +38 -0
  138. data/lib/ailabtools/generated/responses/image_lossless_enlargement_response.rb +36 -0
  139. data/lib/ailabtools/generated/responses/image_photo_editing_response.rb +36 -0
  140. data/lib/ailabtools/generated/responses/image_photo_to_coloring_page_response.rb +42 -0
  141. data/lib/ailabtools/generated/responses/image_querying_async_task_results_response.rb +34 -0
  142. data/lib/ailabtools/generated/responses/image_remove_objects_advanced_response.rb +36 -0
  143. data/lib/ailabtools/generated/responses/image_remove_objects_pro_response.rb +36 -0
  144. data/lib/ailabtools/generated/responses/image_remove_objects_response.rb +36 -0
  145. data/lib/ailabtools/generated/responses/image_style_migration_response.rb +38 -0
  146. data/lib/ailabtools/generated/responses/image_style_transfer_response.rb +35 -0
  147. data/lib/ailabtools/generated/responses/portrait_ai_bald_response.rb +38 -0
  148. data/lib/ailabtools/generated/responses/portrait_ai_beard_removal_response.rb +38 -0
  149. data/lib/ailabtools/generated/responses/portrait_ai_beard_styling_response.rb +38 -0
  150. data/lib/ailabtools/generated/responses/portrait_ai_big_head_effect_response.rb +38 -0
  151. data/lib/ailabtools/generated/responses/portrait_ai_breast_expansion_response.rb +41 -0
  152. data/lib/ailabtools/generated/responses/portrait_ai_butt_enhancement_response.rb +38 -0
  153. data/lib/ailabtools/generated/responses/portrait_ai_colored_contacts_response.rb +38 -0
  154. data/lib/ailabtools/generated/responses/portrait_ai_eyebrows_response.rb +38 -0
  155. data/lib/ailabtools/generated/responses/portrait_ai_eyelashes_response.rb +38 -0
  156. data/lib/ailabtools/generated/responses/portrait_ai_eyeshadow_try_on_response.rb +38 -0
  157. data/lib/ailabtools/generated/responses/portrait_ai_face_rating_response.rb +38 -0
  158. data/lib/ailabtools/generated/responses/portrait_ai_face_swap_response.rb +42 -0
  159. data/lib/ailabtools/generated/responses/portrait_ai_fat_filter_response.rb +38 -0
  160. data/lib/ailabtools/generated/responses/portrait_ai_hair_color_response.rb +38 -0
  161. data/lib/ailabtools/generated/responses/portrait_ai_hair_loss_simulation_response.rb +38 -0
  162. data/lib/ailabtools/generated/responses/portrait_ai_halloween_mask_response.rb +38 -0
  163. data/lib/ailabtools/generated/responses/portrait_ai_lip_bite_expressions_response.rb +38 -0
  164. data/lib/ailabtools/generated/responses/portrait_ai_lip_enhancement_response.rb +38 -0
  165. data/lib/ailabtools/generated/responses/portrait_ai_red_lip_gloss_response.rb +38 -0
  166. data/lib/ailabtools/generated/responses/portrait_ai_skin_enhancement_advanced_response.rb +38 -0
  167. data/lib/ailabtools/generated/responses/portrait_ai_square_face_filter_response.rb +38 -0
  168. data/lib/ailabtools/generated/responses/portrait_ai_waist_slimming_response.rb +38 -0
  169. data/lib/ailabtools/generated/responses/portrait_cartoon_yourself_response.rb +36 -0
  170. data/lib/ailabtools/generated/responses/portrait_expression_editing_advanced_response.rb +38 -0
  171. data/lib/ailabtools/generated/responses/portrait_expression_editing_response.rb +35 -0
  172. data/lib/ailabtools/generated/responses/portrait_face_analyzer_advanced_response.rb +80 -0
  173. data/lib/ailabtools/generated/responses/portrait_face_analyzer_response.rb +116 -0
  174. data/lib/ailabtools/generated/responses/portrait_face_attribute_editing_response.rb +37 -0
  175. data/lib/ailabtools/generated/responses/portrait_face_fusion_response.rb +35 -0
  176. data/lib/ailabtools/generated/responses/portrait_face_restoration_enhancement_response.rb +36 -0
  177. data/lib/ailabtools/generated/responses/portrait_facial_beautification_advanced_response.rb +36 -0
  178. data/lib/ailabtools/generated/responses/portrait_facial_beautification_pro_response.rb +37 -0
  179. data/lib/ailabtools/generated/responses/portrait_facial_beautification_response.rb +36 -0
  180. data/lib/ailabtools/generated/responses/portrait_facial_blurring_response.rb +36 -0
  181. data/lib/ailabtools/generated/responses/portrait_facial_filters_response.rb +36 -0
  182. data/lib/ailabtools/generated/responses/portrait_facial_landmarks_response.rb +80 -0
  183. data/lib/ailabtools/generated/responses/portrait_hairstyle_editing_premium_response.rb +38 -0
  184. data/lib/ailabtools/generated/responses/portrait_hairstyle_editing_pro_response.rb +36 -0
  185. data/lib/ailabtools/generated/responses/portrait_hairstyle_editing_response.rb +35 -0
  186. data/lib/ailabtools/generated/responses/portrait_intelligent_beautification_response.rb +36 -0
  187. data/lib/ailabtools/generated/responses/portrait_intelligent_face_slimming_response.rb +36 -0
  188. data/lib/ailabtools/generated/responses/portrait_intelligent_skin_retouching_response.rb +36 -0
  189. data/lib/ailabtools/generated/responses/portrait_lips_color_changer_response.rb +36 -0
  190. data/lib/ailabtools/generated/responses/portrait_live_photos_response.rb +36 -0
  191. data/lib/ailabtools/generated/responses/portrait_skin_analysis_advanced_response.rb +130 -0
  192. data/lib/ailabtools/generated/responses/portrait_skin_analysis_basic_response.rb +98 -0
  193. data/lib/ailabtools/generated/responses/portrait_skin_analysis_professional_response.rb +42 -0
  194. data/lib/ailabtools/generated/responses/portrait_skin_disease_detection_response.rb +140 -0
  195. data/lib/ailabtools/generated/responses/portrait_try_on_clothes_premium_response.rb +42 -0
  196. data/lib/ailabtools/generated/responses/portrait_try_on_clothes_pro_response.rb +36 -0
  197. data/lib/ailabtools/generated/responses/portrait_try_on_clothes_refiner_response.rb +36 -0
  198. data/lib/ailabtools/generated/responses/portrait_try_on_clothes_response.rb +36 -0
  199. data/lib/ailabtools/params.rb +21 -0
  200. data/lib/ailabtools/requester.rb +108 -0
  201. data/lib/ailabtools/response_model.rb +49 -0
  202. data/lib/ailabtools/version.rb +5 -0
  203. data/lib/ailabtools.rb +18 -0
  204. metadata +250 -0
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module Generated
5
+ module Responses
6
+ class PortraitTryOnClothesRefinerResponseData
7
+ include AILabTools::ResponseModel
8
+ fields({
9
+ :task_type => "task_type",
10
+ :task_id => "task_id",
11
+ }, {
12
+ })
13
+ end
14
+
15
+ class PortraitTryOnClothesRefinerResponse
16
+ include AILabTools::ResponseModel
17
+ fields({
18
+ :request_id => "request_id",
19
+ :log_id => "log_id",
20
+ :error_code => "error_code",
21
+ :error_code_str => "error_code_str",
22
+ :error_msg => "error_msg",
23
+ :error_detail => "error_detail",
24
+ :data => "data",
25
+ :image => "image",
26
+ :ratio => "ratio",
27
+ :task_type => "task_type",
28
+ :task_id => "task_id",
29
+ :task_status => "task_status",
30
+ }, {
31
+ :data => PortraitTryOnClothesRefinerResponseData,
32
+ })
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module Generated
5
+ module Responses
6
+ class PortraitTryOnClothesResponseData
7
+ include AILabTools::ResponseModel
8
+ fields({
9
+ :task_type => "task_type",
10
+ :task_id => "task_id",
11
+ }, {
12
+ })
13
+ end
14
+
15
+ class PortraitTryOnClothesResponse
16
+ include AILabTools::ResponseModel
17
+ fields({
18
+ :request_id => "request_id",
19
+ :log_id => "log_id",
20
+ :error_code => "error_code",
21
+ :error_code_str => "error_code_str",
22
+ :error_msg => "error_msg",
23
+ :error_detail => "error_detail",
24
+ :data => "data",
25
+ :image => "image",
26
+ :ratio => "ratio",
27
+ :task_type => "task_type",
28
+ :task_id => "task_id",
29
+ :task_status => "task_status",
30
+ }, {
31
+ :data => PortraitTryOnClothesResponseData,
32
+ })
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ class Params
5
+ def query_fields
6
+ {}
7
+ end
8
+
9
+ def body_fields
10
+ {}
11
+ end
12
+
13
+ private
14
+
15
+ def compact_hash(hash)
16
+ hash.each_with_object({}) do |(key, value), result|
17
+ result[key] = value unless value.nil?
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "net/http"
5
+ require "securerandom"
6
+ require "uri"
7
+
8
+ module AILabTools
9
+ class Requester
10
+ def initialize(api_key:, base_url: "https://www.ailabapi.com", timeout: 120)
11
+ raise ArgumentError, "AILabTools API key must not be empty" if api_key.nil? || api_key.empty?
12
+
13
+ @api_key = api_key
14
+ @base_url = base_url.sub(%r{/+\z}, "")
15
+ @timeout = timeout
16
+ end
17
+
18
+ def request(method, path, params, response_class)
19
+ uri = URI(@base_url + "/" + path.sub(%r{\A/+}, ""))
20
+ query = params.query_fields
21
+ uri.query = URI.encode_www_form(stringify_hash(query)) unless query.empty?
22
+
23
+ http = Net::HTTP.new(uri.host, uri.port)
24
+ http.use_ssl = uri.scheme == "https"
25
+ http.open_timeout = @timeout
26
+ http.read_timeout = @timeout
27
+ http.write_timeout = @timeout if http.respond_to?(:write_timeout=)
28
+
29
+ request = build_request(method, uri, params.body_fields)
30
+ request["ailabapi-api-key"] = @api_key
31
+ response = http.request(request)
32
+ parse_response(response, response_class)
33
+ rescue APIError
34
+ raise
35
+ rescue StandardError => e
36
+ raise SDKError, "AILabTools request failed: #{e.message}"
37
+ end
38
+
39
+ private
40
+
41
+ def build_request(method, uri, body_fields)
42
+ if method.upcase == "GET"
43
+ Net::HTTP::Get.new(uri)
44
+ else
45
+ request = Net::HTTP.const_get(method.capitalize).new(uri)
46
+ request["Content-Type"] = "multipart/form-data; boundary=#{boundary}"
47
+ request.body = multipart_body(body_fields)
48
+ request
49
+ end
50
+ end
51
+
52
+ def boundary
53
+ @boundary ||= "----AILabTools-#{SecureRandom.hex(16)}"
54
+ end
55
+
56
+ def multipart_body(fields)
57
+ parts = []
58
+ fields.each do |name, value|
59
+ parts << "--#{boundary}\r\n"
60
+ if value.is_a?(FileInput)
61
+ parts << "Content-Disposition: form-data; name=\"#{escape(name)}\"; filename=\"#{escape(value.filename)}\"\r\n"
62
+ parts << "Content-Type: #{value.content_type}\r\n\r\n"
63
+ parts << value.bytes
64
+ parts << "\r\n"
65
+ else
66
+ parts << "Content-Disposition: form-data; name=\"#{escape(name)}\"\r\n\r\n"
67
+ parts << stringify(value)
68
+ parts << "\r\n"
69
+ end
70
+ end
71
+ parts << "--#{boundary}--\r\n"
72
+ parts.join.b
73
+ end
74
+
75
+ def parse_response(response, response_class)
76
+ payload = JSON.parse(response.body || "{}")
77
+ error_code = payload.fetch("error_code", 0)
78
+ if response.code.to_i != 200 || error_code != 0
79
+ detail = payload["error_detail"].is_a?(Hash) ? payload["error_detail"] : nil
80
+ message = detail && detail["message"] || payload["error_msg"] || "AILabTools API Error"
81
+ raise APIError.new(
82
+ message,
83
+ status_code: response.code.to_i,
84
+ request_id: payload["request_id"],
85
+ log_id: payload["log_id"],
86
+ error_code: error_code,
87
+ error_detail: detail,
88
+ raw: payload
89
+ )
90
+ end
91
+ response_class.from_hash(payload)
92
+ rescue JSON::ParserError
93
+ raise APIError.new("Invalid JSON response", status_code: response.code.to_i, raw: response.body)
94
+ end
95
+
96
+ def stringify_hash(hash)
97
+ hash.each_with_object({}) { |(key, value), out| out[key] = stringify(value) }
98
+ end
99
+
100
+ def stringify(value)
101
+ value.is_a?(Array) ? value.join(",") : value.to_s
102
+ end
103
+
104
+ def escape(value)
105
+ value.to_s.gsub("\\", "\\\\").gsub('"', '\\"')
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module ResponseModel
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+ attr_reader :field_map, :field_types
11
+
12
+ def fields(map, types = {})
13
+ @field_map = map
14
+ @field_types = types
15
+ attr_reader(*map.keys)
16
+ end
17
+
18
+ def from_hash(hash)
19
+ object = new
20
+ object.instance_variable_set(:@raw, hash)
21
+ (@field_map || {}).each do |attr, wire|
22
+ value = hash[wire]
23
+ value = convert_value(value, (@field_types || {})[attr])
24
+ object.instance_variable_set("@#{attr}", value)
25
+ end
26
+ object
27
+ end
28
+
29
+ private
30
+
31
+ def convert_value(value, type)
32
+ return value if value.nil? || type.nil?
33
+
34
+ if type.is_a?(Array)
35
+ klass = type.first
36
+ return value unless value.is_a?(Array)
37
+
38
+ value.map { |item| item.is_a?(Hash) ? klass.from_hash(item) : item }
39
+ elsif value.is_a?(Hash) && type.respond_to?(:from_hash)
40
+ type.from_hash(value)
41
+ else
42
+ value
43
+ end
44
+ end
45
+ end
46
+
47
+ attr_reader :raw
48
+ end
49
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ VERSION = "0.5.4"
5
+ end
data/lib/ailabtools.rb ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "ailabtools/version"
4
+ require_relative "ailabtools/errors"
5
+ require_relative "ailabtools/file_input"
6
+ require_relative "ailabtools/params"
7
+ require_relative "ailabtools/response_model"
8
+ require_relative "ailabtools/requester"
9
+
10
+ Dir[File.join(__dir__, "ailabtools", "generated", "params", "*.rb")].sort.each { |file| require file }
11
+ Dir[File.join(__dir__, "ailabtools", "generated", "responses", "*.rb")].sort.each { |file| require file }
12
+ Dir[File.join(__dir__, "ailabtools", "api", "*.rb")].sort.each { |file| require file }
13
+
14
+ require_relative "ailabtools/client"
15
+
16
+ module AILabTools
17
+ AILabClient = Client
18
+ end
metadata ADDED
@@ -0,0 +1,250 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ailabtools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.4
5
+ platform: ruby
6
+ authors:
7
+ - AILabTools
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-07-01 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ruby SDK for AILabTools background removal, image enhancement, portrait
14
+ editing, virtual try-on, and related AI image APIs.
15
+ email:
16
+ - support@ailabtools.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - CHANGELOG.md
22
+ - LICENSE
23
+ - README.md
24
+ - lib/ailabtools.rb
25
+ - lib/ailabtools/api/background_api.rb
26
+ - lib/ailabtools/api/common_api.rb
27
+ - lib/ailabtools/api/cutout_api.rb
28
+ - lib/ailabtools/api/image_api.rb
29
+ - lib/ailabtools/api/portrait_api.rb
30
+ - lib/ailabtools/client.rb
31
+ - lib/ailabtools/errors.rb
32
+ - lib/ailabtools/file_input.rb
33
+ - lib/ailabtools/generated/params/common_query_async_task_result_params.rb
34
+ - lib/ailabtools/generated/params/common_query_credits_params.rb
35
+ - lib/ailabtools/generated/params/cutout_avatar_extraction_params.rb
36
+ - lib/ailabtools/generated/params/cutout_clothing_background_removal_params.rb
37
+ - lib/ailabtools/generated/params/cutout_food_background_removal_params.rb
38
+ - lib/ailabtools/generated/params/cutout_hair_extraction_params.rb
39
+ - lib/ailabtools/generated/params/cutout_hd_human_body_background_removal_params.rb
40
+ - lib/ailabtools/generated/params/cutout_hd_universal_background_removal_params.rb
41
+ - lib/ailabtools/generated/params/cutout_human_background_removal_params.rb
42
+ - lib/ailabtools/generated/params/cutout_product_background_removal_params.rb
43
+ - lib/ailabtools/generated/params/cutout_universal_background_removal_params.rb
44
+ - lib/ailabtools/generated/params/image_ai_cartoon_generator_params.rb
45
+ - lib/ailabtools/generated/params/image_ai_emoji_generator_params.rb
46
+ - lib/ailabtools/generated/params/image_ai_flower_wallpaper_params.rb
47
+ - lib/ailabtools/generated/params/image_ai_image_cropping_params.rb
48
+ - lib/ailabtools/generated/params/image_ai_image_extender_params.rb
49
+ - lib/ailabtools/generated/params/image_ai_nail_art_params.rb
50
+ - lib/ailabtools/generated/params/image_ai_nail_art_pro_params.rb
51
+ - lib/ailabtools/generated/params/image_ai_object_replacer_params.rb
52
+ - lib/ailabtools/generated/params/image_ai_photography_params.rb
53
+ - lib/ailabtools/generated/params/image_clarity_enhancement_params.rb
54
+ - lib/ailabtools/generated/params/image_color_enhancement_params.rb
55
+ - lib/ailabtools/generated/params/image_coloring_params.rb
56
+ - lib/ailabtools/generated/params/image_composition_aesthetics_score_params.rb
57
+ - lib/ailabtools/generated/params/image_contrast_enhancement_params.rb
58
+ - lib/ailabtools/generated/params/image_dehaze_params.rb
59
+ - lib/ailabtools/generated/params/image_distortion_correction_params.rb
60
+ - lib/ailabtools/generated/params/image_erasure_params.rb
61
+ - lib/ailabtools/generated/params/image_exposure_rating_params.rb
62
+ - lib/ailabtools/generated/params/image_intelligent_composition_params.rb
63
+ - lib/ailabtools/generated/params/image_invisible_image_watermark_params.rb
64
+ - lib/ailabtools/generated/params/image_invisible_text_watermark_params.rb
65
+ - lib/ailabtools/generated/params/image_lossless_enlargement_params.rb
66
+ - lib/ailabtools/generated/params/image_photo_editing_params.rb
67
+ - lib/ailabtools/generated/params/image_photo_to_coloring_page_params.rb
68
+ - lib/ailabtools/generated/params/image_querying_async_task_results_params.rb
69
+ - lib/ailabtools/generated/params/image_remove_objects_advanced_params.rb
70
+ - lib/ailabtools/generated/params/image_remove_objects_params.rb
71
+ - lib/ailabtools/generated/params/image_remove_objects_pro_params.rb
72
+ - lib/ailabtools/generated/params/image_style_migration_params.rb
73
+ - lib/ailabtools/generated/params/image_style_transfer_params.rb
74
+ - lib/ailabtools/generated/params/portrait_ai_bald_params.rb
75
+ - lib/ailabtools/generated/params/portrait_ai_beard_removal_params.rb
76
+ - lib/ailabtools/generated/params/portrait_ai_beard_styling_params.rb
77
+ - lib/ailabtools/generated/params/portrait_ai_big_head_effect_params.rb
78
+ - lib/ailabtools/generated/params/portrait_ai_breast_expansion_params.rb
79
+ - lib/ailabtools/generated/params/portrait_ai_butt_enhancement_params.rb
80
+ - lib/ailabtools/generated/params/portrait_ai_colored_contacts_params.rb
81
+ - lib/ailabtools/generated/params/portrait_ai_eyebrows_params.rb
82
+ - lib/ailabtools/generated/params/portrait_ai_eyelashes_params.rb
83
+ - lib/ailabtools/generated/params/portrait_ai_eyeshadow_try_on_params.rb
84
+ - lib/ailabtools/generated/params/portrait_ai_face_rating_params.rb
85
+ - lib/ailabtools/generated/params/portrait_ai_face_swap_params.rb
86
+ - lib/ailabtools/generated/params/portrait_ai_fat_filter_params.rb
87
+ - lib/ailabtools/generated/params/portrait_ai_hair_color_params.rb
88
+ - lib/ailabtools/generated/params/portrait_ai_hair_loss_simulation_params.rb
89
+ - lib/ailabtools/generated/params/portrait_ai_halloween_mask_params.rb
90
+ - lib/ailabtools/generated/params/portrait_ai_lip_bite_expressions_params.rb
91
+ - lib/ailabtools/generated/params/portrait_ai_lip_enhancement_params.rb
92
+ - lib/ailabtools/generated/params/portrait_ai_red_lip_gloss_params.rb
93
+ - lib/ailabtools/generated/params/portrait_ai_skin_enhancement_advanced_params.rb
94
+ - lib/ailabtools/generated/params/portrait_ai_square_face_filter_params.rb
95
+ - lib/ailabtools/generated/params/portrait_ai_waist_slimming_params.rb
96
+ - lib/ailabtools/generated/params/portrait_cartoon_yourself_params.rb
97
+ - lib/ailabtools/generated/params/portrait_expression_editing_advanced_params.rb
98
+ - lib/ailabtools/generated/params/portrait_expression_editing_params.rb
99
+ - lib/ailabtools/generated/params/portrait_face_analyzer_advanced_params.rb
100
+ - lib/ailabtools/generated/params/portrait_face_analyzer_params.rb
101
+ - lib/ailabtools/generated/params/portrait_face_attribute_editing_params.rb
102
+ - lib/ailabtools/generated/params/portrait_face_fusion_params.rb
103
+ - lib/ailabtools/generated/params/portrait_face_restoration_enhancement_params.rb
104
+ - lib/ailabtools/generated/params/portrait_facial_beautification_advanced_params.rb
105
+ - lib/ailabtools/generated/params/portrait_facial_beautification_params.rb
106
+ - lib/ailabtools/generated/params/portrait_facial_beautification_pro_params.rb
107
+ - lib/ailabtools/generated/params/portrait_facial_blurring_params.rb
108
+ - lib/ailabtools/generated/params/portrait_facial_filters_params.rb
109
+ - lib/ailabtools/generated/params/portrait_facial_landmarks_params.rb
110
+ - lib/ailabtools/generated/params/portrait_hairstyle_editing_params.rb
111
+ - lib/ailabtools/generated/params/portrait_hairstyle_editing_premium_params.rb
112
+ - lib/ailabtools/generated/params/portrait_hairstyle_editing_pro_params.rb
113
+ - lib/ailabtools/generated/params/portrait_intelligent_beautification_params.rb
114
+ - lib/ailabtools/generated/params/portrait_intelligent_face_slimming_params.rb
115
+ - lib/ailabtools/generated/params/portrait_intelligent_skin_retouching_params.rb
116
+ - lib/ailabtools/generated/params/portrait_lips_color_changer_params.rb
117
+ - lib/ailabtools/generated/params/portrait_live_photos_params.rb
118
+ - lib/ailabtools/generated/params/portrait_skin_analysis_advanced_params.rb
119
+ - lib/ailabtools/generated/params/portrait_skin_analysis_basic_params.rb
120
+ - lib/ailabtools/generated/params/portrait_skin_analysis_professional_params.rb
121
+ - lib/ailabtools/generated/params/portrait_skin_disease_detection_params.rb
122
+ - lib/ailabtools/generated/params/portrait_try_on_clothes_params.rb
123
+ - lib/ailabtools/generated/params/portrait_try_on_clothes_premium_params.rb
124
+ - lib/ailabtools/generated/params/portrait_try_on_clothes_pro_params.rb
125
+ - lib/ailabtools/generated/params/portrait_try_on_clothes_refiner_params.rb
126
+ - lib/ailabtools/generated/responses/common_query_async_task_result_response.rb
127
+ - lib/ailabtools/generated/responses/common_query_credits_response.rb
128
+ - lib/ailabtools/generated/responses/cutout_avatar_extraction_response.rb
129
+ - lib/ailabtools/generated/responses/cutout_clothing_background_removal_response.rb
130
+ - lib/ailabtools/generated/responses/cutout_food_background_removal_response.rb
131
+ - lib/ailabtools/generated/responses/cutout_hair_extraction_response.rb
132
+ - lib/ailabtools/generated/responses/cutout_hd_human_body_background_removal_response.rb
133
+ - lib/ailabtools/generated/responses/cutout_hd_universal_background_removal_response.rb
134
+ - lib/ailabtools/generated/responses/cutout_human_background_removal_response.rb
135
+ - lib/ailabtools/generated/responses/cutout_product_background_removal_response.rb
136
+ - lib/ailabtools/generated/responses/cutout_universal_background_removal_response.rb
137
+ - lib/ailabtools/generated/responses/image_ai_cartoon_generator_response.rb
138
+ - lib/ailabtools/generated/responses/image_ai_emoji_generator_response.rb
139
+ - lib/ailabtools/generated/responses/image_ai_flower_wallpaper_response.rb
140
+ - lib/ailabtools/generated/responses/image_ai_image_cropping_response.rb
141
+ - lib/ailabtools/generated/responses/image_ai_image_extender_response.rb
142
+ - lib/ailabtools/generated/responses/image_ai_nail_art_pro_response.rb
143
+ - lib/ailabtools/generated/responses/image_ai_nail_art_response.rb
144
+ - lib/ailabtools/generated/responses/image_ai_object_replacer_response.rb
145
+ - lib/ailabtools/generated/responses/image_ai_photography_response.rb
146
+ - lib/ailabtools/generated/responses/image_clarity_enhancement_response.rb
147
+ - lib/ailabtools/generated/responses/image_color_enhancement_response.rb
148
+ - lib/ailabtools/generated/responses/image_coloring_response.rb
149
+ - lib/ailabtools/generated/responses/image_composition_aesthetics_score_response.rb
150
+ - lib/ailabtools/generated/responses/image_contrast_enhancement_response.rb
151
+ - lib/ailabtools/generated/responses/image_dehaze_response.rb
152
+ - lib/ailabtools/generated/responses/image_distortion_correction_response.rb
153
+ - lib/ailabtools/generated/responses/image_erasure_response.rb
154
+ - lib/ailabtools/generated/responses/image_exposure_rating_response.rb
155
+ - lib/ailabtools/generated/responses/image_intelligent_composition_response.rb
156
+ - lib/ailabtools/generated/responses/image_invisible_image_watermark_response.rb
157
+ - lib/ailabtools/generated/responses/image_invisible_text_watermark_response.rb
158
+ - lib/ailabtools/generated/responses/image_lossless_enlargement_response.rb
159
+ - lib/ailabtools/generated/responses/image_photo_editing_response.rb
160
+ - lib/ailabtools/generated/responses/image_photo_to_coloring_page_response.rb
161
+ - lib/ailabtools/generated/responses/image_querying_async_task_results_response.rb
162
+ - lib/ailabtools/generated/responses/image_remove_objects_advanced_response.rb
163
+ - lib/ailabtools/generated/responses/image_remove_objects_pro_response.rb
164
+ - lib/ailabtools/generated/responses/image_remove_objects_response.rb
165
+ - lib/ailabtools/generated/responses/image_style_migration_response.rb
166
+ - lib/ailabtools/generated/responses/image_style_transfer_response.rb
167
+ - lib/ailabtools/generated/responses/portrait_ai_bald_response.rb
168
+ - lib/ailabtools/generated/responses/portrait_ai_beard_removal_response.rb
169
+ - lib/ailabtools/generated/responses/portrait_ai_beard_styling_response.rb
170
+ - lib/ailabtools/generated/responses/portrait_ai_big_head_effect_response.rb
171
+ - lib/ailabtools/generated/responses/portrait_ai_breast_expansion_response.rb
172
+ - lib/ailabtools/generated/responses/portrait_ai_butt_enhancement_response.rb
173
+ - lib/ailabtools/generated/responses/portrait_ai_colored_contacts_response.rb
174
+ - lib/ailabtools/generated/responses/portrait_ai_eyebrows_response.rb
175
+ - lib/ailabtools/generated/responses/portrait_ai_eyelashes_response.rb
176
+ - lib/ailabtools/generated/responses/portrait_ai_eyeshadow_try_on_response.rb
177
+ - lib/ailabtools/generated/responses/portrait_ai_face_rating_response.rb
178
+ - lib/ailabtools/generated/responses/portrait_ai_face_swap_response.rb
179
+ - lib/ailabtools/generated/responses/portrait_ai_fat_filter_response.rb
180
+ - lib/ailabtools/generated/responses/portrait_ai_hair_color_response.rb
181
+ - lib/ailabtools/generated/responses/portrait_ai_hair_loss_simulation_response.rb
182
+ - lib/ailabtools/generated/responses/portrait_ai_halloween_mask_response.rb
183
+ - lib/ailabtools/generated/responses/portrait_ai_lip_bite_expressions_response.rb
184
+ - lib/ailabtools/generated/responses/portrait_ai_lip_enhancement_response.rb
185
+ - lib/ailabtools/generated/responses/portrait_ai_red_lip_gloss_response.rb
186
+ - lib/ailabtools/generated/responses/portrait_ai_skin_enhancement_advanced_response.rb
187
+ - lib/ailabtools/generated/responses/portrait_ai_square_face_filter_response.rb
188
+ - lib/ailabtools/generated/responses/portrait_ai_waist_slimming_response.rb
189
+ - lib/ailabtools/generated/responses/portrait_cartoon_yourself_response.rb
190
+ - lib/ailabtools/generated/responses/portrait_expression_editing_advanced_response.rb
191
+ - lib/ailabtools/generated/responses/portrait_expression_editing_response.rb
192
+ - lib/ailabtools/generated/responses/portrait_face_analyzer_advanced_response.rb
193
+ - lib/ailabtools/generated/responses/portrait_face_analyzer_response.rb
194
+ - lib/ailabtools/generated/responses/portrait_face_attribute_editing_response.rb
195
+ - lib/ailabtools/generated/responses/portrait_face_fusion_response.rb
196
+ - lib/ailabtools/generated/responses/portrait_face_restoration_enhancement_response.rb
197
+ - lib/ailabtools/generated/responses/portrait_facial_beautification_advanced_response.rb
198
+ - lib/ailabtools/generated/responses/portrait_facial_beautification_pro_response.rb
199
+ - lib/ailabtools/generated/responses/portrait_facial_beautification_response.rb
200
+ - lib/ailabtools/generated/responses/portrait_facial_blurring_response.rb
201
+ - lib/ailabtools/generated/responses/portrait_facial_filters_response.rb
202
+ - lib/ailabtools/generated/responses/portrait_facial_landmarks_response.rb
203
+ - lib/ailabtools/generated/responses/portrait_hairstyle_editing_premium_response.rb
204
+ - lib/ailabtools/generated/responses/portrait_hairstyle_editing_pro_response.rb
205
+ - lib/ailabtools/generated/responses/portrait_hairstyle_editing_response.rb
206
+ - lib/ailabtools/generated/responses/portrait_intelligent_beautification_response.rb
207
+ - lib/ailabtools/generated/responses/portrait_intelligent_face_slimming_response.rb
208
+ - lib/ailabtools/generated/responses/portrait_intelligent_skin_retouching_response.rb
209
+ - lib/ailabtools/generated/responses/portrait_lips_color_changer_response.rb
210
+ - lib/ailabtools/generated/responses/portrait_live_photos_response.rb
211
+ - lib/ailabtools/generated/responses/portrait_skin_analysis_advanced_response.rb
212
+ - lib/ailabtools/generated/responses/portrait_skin_analysis_basic_response.rb
213
+ - lib/ailabtools/generated/responses/portrait_skin_analysis_professional_response.rb
214
+ - lib/ailabtools/generated/responses/portrait_skin_disease_detection_response.rb
215
+ - lib/ailabtools/generated/responses/portrait_try_on_clothes_premium_response.rb
216
+ - lib/ailabtools/generated/responses/portrait_try_on_clothes_pro_response.rb
217
+ - lib/ailabtools/generated/responses/portrait_try_on_clothes_refiner_response.rb
218
+ - lib/ailabtools/generated/responses/portrait_try_on_clothes_response.rb
219
+ - lib/ailabtools/params.rb
220
+ - lib/ailabtools/requester.rb
221
+ - lib/ailabtools/response_model.rb
222
+ - lib/ailabtools/version.rb
223
+ homepage: https://www.ailabtools.com/
224
+ licenses:
225
+ - MIT
226
+ metadata:
227
+ homepage_uri: https://www.ailabtools.com/
228
+ documentation_uri: https://www.ailabtools.com/docs
229
+ source_code_uri: https://github.com/ailabtools/ailabtools-sdk
230
+ bug_tracker_uri: https://github.com/ailabtools/ailabtools-sdk/issues
231
+ post_install_message:
232
+ rdoc_options: []
233
+ require_paths:
234
+ - lib
235
+ required_ruby_version: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: '2.6'
240
+ required_rubygems_version: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ requirements: []
246
+ rubygems_version: 3.4.20
247
+ signing_key:
248
+ specification_version: 4
249
+ summary: Official Ruby SDK for AILabTools AI image APIs.
250
+ test_files: []