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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e696c83015dc6e942b081f6544ad6317fc1f4d2d05b829a533a79846298a984b
4
+ data.tar.gz: f6de741108ab175212bf5f4beeb11deddb3bf760099e7e355b4d14a7ab0d18d8
5
+ SHA512:
6
+ metadata.gz: 6db742534d0fc3825a29da99a674a1e85b12a8943e94ea063ccba734acfe55983ae6e6ac3a9ed3b36b6ca480afb473ce40e31f5c32e9f94b56ba526543f98c1d
7
+ data.tar.gz: 3ed4834f782379c2b7eb90c42f90e76ed089c52361ebbac6255b2593a1f1f9120fa18513d3a8be1d58a3828832a157818cdc5bd86fda3fad808b62b2bfebe396
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ## 0.5.4
4
+
5
+ - Initial Ruby SDK release.
6
+ - Added all 93 AILabTools SDK endpoints.
7
+ - Added typed parameter and response objects.
8
+ - Added RubyGems packaging metadata.
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AILabTools
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # AILabTools SDK for Ruby
2
+
3
+ Official Ruby SDK for the [AILabTools AI image APIs](https://www.ailabtools.com/docs). It covers background removal, image upscaling, object removal, portrait retouching, hairstyle changes, virtual try-on, skin analysis, and other AI photo workflows.
4
+
5
+ ## Requirements
6
+
7
+ - Ruby 2.6 or later
8
+ - RubyGems
9
+
10
+ The SDK uses Ruby standard-library `net/http` and has no runtime gem dependencies.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ gem install ailabtools
16
+ ```
17
+
18
+ Bundler:
19
+
20
+ ```ruby
21
+ gem "ailabtools", "~> 0.5.4"
22
+ ```
23
+
24
+ ## Quick Start
25
+
26
+ Create an API key in the [AILabTools Developer Console](https://www.ailabtools.com/developer).
27
+
28
+ ```ruby
29
+ require "ailabtools"
30
+
31
+ client = AILabTools::Client.new(api_key: ENV.fetch("AILAB_API_KEY"))
32
+
33
+ params = AILabTools::Generated::Params::CutoutUniversalBackgroundRemovalParams.new(
34
+ image: AILabTools::FileInput.from_path("photo.jpg", content_type: "image/jpeg"),
35
+ return_form: "whiteBK"
36
+ )
37
+
38
+ result = client.background.remove(params)
39
+ puts result.data&.image_url
40
+ ```
41
+
42
+ ## File Uploads
43
+
44
+ ```ruby
45
+ AILabTools::FileInput.from_path("photo.jpg", content_type: "image/jpeg")
46
+ AILabTools::FileInput.from_bytes(bytes, filename: "photo.jpg", content_type: "image/jpeg")
47
+ AILabTools::FileInput.from_io(io, filename: "photo.jpg", content_type: "image/jpeg")
48
+ ```
49
+
50
+ ## Async Tasks
51
+
52
+ ```ruby
53
+ task = client.portrait.change_hairstyle(params)
54
+ task_id = task.task_id || task.data&.task_id
55
+ result = client.wait_for_task(task_id, interval: 5, timeout: 300)
56
+ puts result.data&.task_status
57
+ ```
58
+
59
+ ## Error Handling
60
+
61
+ ```ruby
62
+ begin
63
+ result = client.background.remove(params)
64
+ rescue AILabTools::APIError => error
65
+ warn error.message
66
+ warn error.request_id
67
+ warn error.log_id
68
+ warn error.error_code
69
+ end
70
+ ```
71
+
72
+ ## Client Configuration
73
+
74
+ ```ruby
75
+ client = AILabTools::Client.new(
76
+ api_key: ENV.fetch("AILAB_API_KEY"),
77
+ base_url: "https://www.ailabapi.com",
78
+ timeout: 120
79
+ )
80
+ ```
81
+
82
+ ## Popular Aliases
83
+
84
+ | Use case | Ruby method |
85
+ | --- | --- |
86
+ | Remove image background | `client.background.remove(params)` |
87
+ | Upscale an image | `client.image.upscale(params)` |
88
+ | Remove objects | `client.image.remove_objects(params)` |
89
+ | Change hairstyle | `client.portrait.change_hairstyle(params)` |
90
+ | Retouch portrait | `client.portrait.retouch(params)` |
91
+
92
+ ## Features
93
+
94
+ - Typed Ruby parameter and response classes for all 93 SDK endpoints
95
+ - Standard-library HTTP transport
96
+ - Path, byte-string, and IO file uploads
97
+ - Automatic snake_case-to-wire-name parameter mapping
98
+ - Structured API exceptions with request and log IDs
99
+ - Async task polling
100
+ - RubyGems-ready gemspec metadata
101
+
102
+ ## RubyGems Publishing
103
+
104
+ Before publishing:
105
+
106
+ 1. Create a RubyGems account and configure API credentials.
107
+ 2. Run `gem build ailabtools.gemspec`.
108
+ 3. Run `gem push ailabtools-0.5.4.gem`.
109
+
110
+ The gem name is `ailabtools` and the require name is `ailabtools`.
111
+
112
+ ## Links
113
+
114
+ - [Get an AILabTools API key](https://www.ailabtools.com/developer)
115
+ - [AILabTools API documentation](https://www.ailabtools.com/docs)
116
+ - [AILabTools SDK source code](https://github.com/ailabtools/ailabtools-sdk)
117
+ - [Report an SDK issue](https://github.com/ailabtools/ailabtools-sdk/issues)
118
+
119
+ ## License
120
+
121
+ [MIT](LICENSE)
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module API
5
+ class BackgroundAPI
6
+ def initialize(cutout)
7
+ @cutout = cutout
8
+ end
9
+
10
+ def remove(params)
11
+ @cutout.cutout_universal_background_removal(params)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module API
5
+ class CommonAPI
6
+ def initialize(requester)
7
+ @requester = requester
8
+ end
9
+
10
+ def common_query_async_task_result(params)
11
+ @requester.request("GET", "/api/common/query-async-task-result", params, AILabTools::Generated::Responses::CommonQueryAsyncTaskResultResponse)
12
+ end
13
+
14
+ def common_query_credits(params)
15
+ @requester.request("GET", "/api/common/query-credits", params, AILabTools::Generated::Responses::CommonQueryCreditsResponse)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module API
5
+ class CutoutAPI
6
+ def initialize(requester)
7
+ @requester = requester
8
+ end
9
+
10
+ def cutout_clothing_background_removal(params)
11
+ @requester.request("POST", "/api/cutout/general/apparel-background-removal", params, AILabTools::Generated::Responses::CutoutClothingBackgroundRemovalResponse)
12
+ end
13
+
14
+ def cutout_product_background_removal(params)
15
+ @requester.request("POST", "/api/cutout/general/commodity-background-removal", params, AILabTools::Generated::Responses::CutoutProductBackgroundRemovalResponse)
16
+ end
17
+
18
+ def cutout_food_background_removal(params)
19
+ @requester.request("POST", "/api/cutout/general/food-background-removal", params, AILabTools::Generated::Responses::CutoutFoodBackgroundRemovalResponse)
20
+ end
21
+
22
+ def cutout_universal_background_removal(params)
23
+ @requester.request("POST", "/api/cutout/general/universal-background-removal", params, AILabTools::Generated::Responses::CutoutUniversalBackgroundRemovalResponse)
24
+ end
25
+
26
+ def cutout_avatar_extraction(params)
27
+ @requester.request("POST", "/api/cutout/portrait/avatar-extraction", params, AILabTools::Generated::Responses::CutoutAvatarExtractionResponse)
28
+ end
29
+
30
+ def cutout_hair_extraction(params)
31
+ @requester.request("POST", "/api/cutout/portrait/hairstyle-extraction", params, AILabTools::Generated::Responses::CutoutHairExtractionResponse)
32
+ end
33
+
34
+ def cutout_human_background_removal(params)
35
+ @requester.request("POST", "/api/cutout/portrait/portrait-background-removal", params, AILabTools::Generated::Responses::CutoutHumanBackgroundRemovalResponse)
36
+ end
37
+
38
+ def cutout_hd_universal_background_removal(params)
39
+ @requester.request("POST", "/api/cutout/general/hd-universal-background-removal", params, AILabTools::Generated::Responses::CutoutHDUniversalBackgroundRemovalResponse)
40
+ end
41
+
42
+ def cutout_hd_human_body_background_removal(params)
43
+ @requester.request("POST", "/api/cutout/portrait/hd-portrait-background-removal", params, AILabTools::Generated::Responses::CutoutHdHumanBodyBackgroundRemovalResponse)
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module API
5
+ class ImageAPI
6
+ def initialize(requester)
7
+ @requester = requester
8
+ end
9
+
10
+ def image_querying_async_task_results(params)
11
+ @requester.request("GET", "/api/image/asyn-task-results", params, AILabTools::Generated::Responses::ImageQueryingAsyncTaskResultsResponse)
12
+ end
13
+
14
+ def image_ai_image_extender(params)
15
+ @requester.request("POST", "/api/image/editing/ai-image-extender", params, AILabTools::Generated::Responses::ImageAiImageExtenderResponse)
16
+ end
17
+
18
+ def image_ai_object_replacer(params)
19
+ @requester.request("POST", "/api/image/editing/ai-object-replacer", params, AILabTools::Generated::Responses::ImageAiObjectReplacerResponse)
20
+ end
21
+
22
+ def image_ai_image_cropping(params)
23
+ @requester.request("POST", "/api/image/editing/image-cropping", params, AILabTools::Generated::Responses::ImageAIImageCroppingResponse)
24
+ end
25
+
26
+ def image_erasure(params)
27
+ @requester.request("POST", "/api/image/editing/image-erase", params, AILabTools::Generated::Responses::ImageErasureResponse)
28
+ end
29
+
30
+ def image_invisible_image_watermark(params)
31
+ @requester.request("POST", "/api/image/editing/image-invisible-image-watermark", params, AILabTools::Generated::Responses::ImageInvisibleImageWatermarkResponse)
32
+ end
33
+
34
+ def image_invisible_text_watermark(params)
35
+ @requester.request("POST", "/api/image/editing/image-invisible-text-watermarking", params, AILabTools::Generated::Responses::ImageInvisibleTextWatermarkResponse)
36
+ end
37
+
38
+ def image_intelligent_composition(params)
39
+ @requester.request("POST", "/api/image/editing/intelligent-composition", params, AILabTools::Generated::Responses::ImageIntelligentCompositionResponse)
40
+ end
41
+
42
+ def image_photo_editing(params)
43
+ @requester.request("POST", "/api/image/editing/photo-retouching", params, AILabTools::Generated::Responses::ImagePhotoEditingResponse)
44
+ end
45
+
46
+ def image_remove_objects(params)
47
+ @requester.request("POST", "/api/image/editing/remove-objects", params, AILabTools::Generated::Responses::ImageRemoveObjectsResponse)
48
+ end
49
+
50
+ def remove_objects(params)
51
+ image_remove_objects(params)
52
+ end
53
+
54
+ def image_remove_objects_advanced(params)
55
+ @requester.request("POST", "/api/image/editing/remove-objects-advanced", params, AILabTools::Generated::Responses::ImageRemoveObjectsAdvancedResponse)
56
+ end
57
+
58
+ def image_remove_objects_pro(params)
59
+ @requester.request("POST", "/api/image/editing/remove-objects-pro", params, AILabTools::Generated::Responses::ImageRemoveObjectsProResponse)
60
+ end
61
+
62
+ def image_ai_cartoon_generator(params)
63
+ @requester.request("POST", "/api/image/effects/ai-anime-generator", params, AILabTools::Generated::Responses::ImageAICartoonGeneratorResponse)
64
+ end
65
+
66
+ def image_coloring(params)
67
+ @requester.request("POST", "/api/image/effects/image-colorization", params, AILabTools::Generated::Responses::ImageColoringResponse)
68
+ end
69
+
70
+ def image_style_transfer(params)
71
+ @requester.request("POST", "/api/image/effects/image-style-conversion", params, AILabTools::Generated::Responses::ImageStyleTransferResponse)
72
+ end
73
+
74
+ def image_style_migration(params)
75
+ @requester.request("POST", "/api/image/effects/image-style-migration", params, AILabTools::Generated::Responses::ImageStyleMigrationResponse)
76
+ end
77
+
78
+ def image_color_enhancement(params)
79
+ @requester.request("POST", "/api/image/enhance/image-color-enhancement", params, AILabTools::Generated::Responses::ImageColorEnhancementResponse)
80
+ end
81
+
82
+ def image_contrast_enhancement(params)
83
+ @requester.request("POST", "/api/image/enhance/image-contrast-enhancement", params, AILabTools::Generated::Responses::ImageContrastEnhancementResponse)
84
+ end
85
+
86
+ def image_dehaze(params)
87
+ @requester.request("POST", "/api/image/enhance/image-defogging", params, AILabTools::Generated::Responses::ImageDehazeResponse)
88
+ end
89
+
90
+ def image_lossless_enlargement(params)
91
+ @requester.request("POST", "/api/image/enhance/image-lossless-enlargement", params, AILabTools::Generated::Responses::ImageLosslessEnlargementResponse)
92
+ end
93
+
94
+ def upscale(params)
95
+ image_lossless_enlargement(params)
96
+ end
97
+
98
+ def image_clarity_enhancement(params)
99
+ @requester.request("POST", "/api/image/enhance/image-sharpness-enhancement", params, AILabTools::Generated::Responses::ImageClarityEnhancementResponse)
100
+ end
101
+
102
+ def image_distortion_correction(params)
103
+ @requester.request("POST", "/api/image/enhance/stretch-image-recovery", params, AILabTools::Generated::Responses::ImageDistortionCorrectionResponse)
104
+ end
105
+
106
+ def image_composition_aesthetics_score(params)
107
+ @requester.request("POST", "/api/image/rating/image-composition-aesthetics-scoring", params, AILabTools::Generated::Responses::ImageCompositionAestheticsScoreResponse)
108
+ end
109
+
110
+ def image_exposure_rating(params)
111
+ @requester.request("POST", "/api/image/rating/image-exposure-score", params, AILabTools::Generated::Responses::ImageExposureRatingResponse)
112
+ end
113
+
114
+ def image_ai_nail_art(params)
115
+ @requester.request("POST", "/api/image/editing/ai-nail-art", params, AILabTools::Generated::Responses::ImageAINailArtResponse)
116
+ end
117
+
118
+ def image_ai_nail_art_pro(params)
119
+ @requester.request("POST", "/api/image/editing/ai-nail-art-pro", params, AILabTools::Generated::Responses::ImageAINailArtProResponse)
120
+ end
121
+
122
+ def image_ai_photography(params)
123
+ @requester.request("POST", "/api/image/effects/ai-photography", params, AILabTools::Generated::Responses::ImageAIPhotographyResponse)
124
+ end
125
+
126
+ def image_ai_emoji_generator(params)
127
+ @requester.request("POST", "/api/image/effects/photo-to-emoji-grid", params, AILabTools::Generated::Responses::ImageAIEmojiGeneratorResponse)
128
+ end
129
+
130
+ def image_photo_to_coloring_page(params)
131
+ @requester.request("POST", "/api/image/effects/photo-to-line-art", params, AILabTools::Generated::Responses::ImagePhotoToColoringPageResponse)
132
+ end
133
+
134
+ def image_ai_flower_wallpaper(params)
135
+ @requester.request("POST", "/api/image/generation/ai-flower-wallpaper", params, AILabTools::Generated::Responses::ImageAIFlowerWallpaperResponse)
136
+ end
137
+
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,228 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ module API
5
+ class PortraitAPI
6
+ def initialize(requester)
7
+ @requester = requester
8
+ end
9
+
10
+ def portrait_face_analyzer(params)
11
+ @requester.request("POST", "/api/portrait/analysis/face-analyzer", params, AILabTools::Generated::Responses::PortraitFaceAnalyzerResponse)
12
+ end
13
+
14
+ def portrait_face_analyzer_advanced(params)
15
+ @requester.request("POST", "/api/portrait/analysis/face-analyzer-advanced", params, AILabTools::Generated::Responses::PortraitFaceAnalyzerAdvancedResponse)
16
+ end
17
+
18
+ def portrait_facial_landmarks(params)
19
+ @requester.request("POST", "/api/portrait/analysis/face-key-points", params, AILabTools::Generated::Responses::PortraitFacialLandmarksResponse)
20
+ end
21
+
22
+ def portrait_skin_analysis_basic(params)
23
+ @requester.request("POST", "/api/portrait/analysis/skin-analysis", params, AILabTools::Generated::Responses::PortraitSkinAnalysisBasicResponse)
24
+ end
25
+
26
+ def portrait_skin_analysis_advanced(params)
27
+ @requester.request("POST", "/api/portrait/analysis/skin-analysis-advanced", params, AILabTools::Generated::Responses::PortraitSkinAnalysisAdvancedResponse)
28
+ end
29
+
30
+ def portrait_skin_analysis_professional(params)
31
+ @requester.request("POST", "/api/portrait/analysis/skin-analysis-pro", params, AILabTools::Generated::Responses::PortraitSkinAnalysisProfessionalResponse)
32
+ end
33
+
34
+ def portrait_skin_disease_detection(params)
35
+ @requester.request("POST", "/api/portrait/analysis/skin-disease-detection", params, AILabTools::Generated::Responses::PortraitSkinDiseaseDetectionResponse)
36
+ end
37
+
38
+ def portrait_try_on_clothes(params)
39
+ @requester.request("POST", "/api/portrait/editing/try-on-clothes", params, AILabTools::Generated::Responses::PortraitTryOnClothesResponse)
40
+ end
41
+
42
+ def portrait_try_on_clothes_pro(params)
43
+ @requester.request("POST", "/api/portrait/editing/try-on-clothes-pro", params, AILabTools::Generated::Responses::PortraitTryOnClothesProResponse)
44
+ end
45
+
46
+ def portrait_facial_blurring(params)
47
+ @requester.request("POST", "/api/portrait/effects/blurred-faces", params, AILabTools::Generated::Responses::PortraitFacialBlurringResponse)
48
+ end
49
+
50
+ def portrait_expression_editing(params)
51
+ @requester.request("POST", "/api/portrait/effects/emotion-editor", params, AILabTools::Generated::Responses::PortraitExpressionEditingResponse)
52
+ end
53
+
54
+ def portrait_face_restoration_enhancement(params)
55
+ @requester.request("POST", "/api/portrait/effects/enhance-face", params, AILabTools::Generated::Responses::PortraitFaceRestorationEnhancementResponse)
56
+ end
57
+
58
+ def portrait_face_attribute_editing(params)
59
+ @requester.request("POST", "/api/portrait/effects/face-attribute-editing", params, AILabTools::Generated::Responses::PortraitFaceAttributeEditingResponse)
60
+ end
61
+
62
+ def portrait_facial_beautification(params)
63
+ @requester.request("POST", "/api/portrait/effects/face-beauty", params, AILabTools::Generated::Responses::PortraitFacialBeautificationResponse)
64
+ end
65
+
66
+ def portrait_facial_beautification_advanced(params)
67
+ @requester.request("POST", "/api/portrait/effects/face-beauty-advanced", params, AILabTools::Generated::Responses::PortraitFacialBeautificationAdvancedResponse)
68
+ end
69
+
70
+ def portrait_facial_beautification_pro(params)
71
+ @requester.request("POST", "/api/portrait/effects/face-beauty-pro", params, AILabTools::Generated::Responses::PortraitFacialBeautificationProResponse)
72
+ end
73
+
74
+ def portrait_facial_filters(params)
75
+ @requester.request("POST", "/api/portrait/effects/face-filter", params, AILabTools::Generated::Responses::PortraitFacialFiltersResponse)
76
+ end
77
+
78
+ def portrait_face_fusion(params)
79
+ @requester.request("POST", "/api/portrait/effects/face-fusion", params, AILabTools::Generated::Responses::PortraitFaceFusionResponse)
80
+ end
81
+
82
+ def portrait_hairstyle_editing(params)
83
+ @requester.request("POST", "/api/portrait/effects/hairstyle-editor", params, AILabTools::Generated::Responses::PortraitHairstyleEditingResponse)
84
+ end
85
+
86
+ def portrait_hairstyle_editing_pro(params)
87
+ @requester.request("POST", "/api/portrait/effects/hairstyle-editor-pro", params, AILabTools::Generated::Responses::PortraitHairstyleEditingProResponse)
88
+ end
89
+
90
+ def change_hairstyle(params)
91
+ portrait_hairstyle_editing_pro(params)
92
+ end
93
+
94
+ def portrait_lips_color_changer(params)
95
+ @requester.request("POST", "/api/portrait/effects/lips-color-changer", params, AILabTools::Generated::Responses::PortraitLipsColorChangerResponse)
96
+ end
97
+
98
+ def portrait_live_photos(params)
99
+ @requester.request("POST", "/api/portrait/effects/live-photo", params, AILabTools::Generated::Responses::PortraitLivePhotosResponse)
100
+ end
101
+
102
+ def portrait_cartoon_yourself(params)
103
+ @requester.request("POST", "/api/portrait/effects/portrait-animation", params, AILabTools::Generated::Responses::PortraitCartoonYourselfResponse)
104
+ end
105
+
106
+ def portrait_intelligent_beautification(params)
107
+ @requester.request("POST", "/api/portrait/effects/smart-beauty", params, AILabTools::Generated::Responses::PortraitIntelligentBeautificationResponse)
108
+ end
109
+
110
+ def retouch(params)
111
+ portrait_intelligent_beautification(params)
112
+ end
113
+
114
+ def portrait_intelligent_face_slimming(params)
115
+ @requester.request("POST", "/api/portrait/effects/smart-face-slimming", params, AILabTools::Generated::Responses::PortraitIntelligentFaceSlimmingResponse)
116
+ end
117
+
118
+ def portrait_intelligent_skin_retouching(params)
119
+ @requester.request("POST", "/api/portrait/effects/smart-skin", params, AILabTools::Generated::Responses::PortraitIntelligentSkinRetouchingResponse)
120
+ end
121
+
122
+ def portrait_try_on_clothes_refiner(params)
123
+ @requester.request("POST", "/api/portrait/enhance/try-on-clothes-refiner", params, AILabTools::Generated::Responses::PortraitTryOnClothesRefinerResponse)
124
+ end
125
+
126
+ def portrait_ai_face_rating(params)
127
+ @requester.request("POST", "/api/portrait/analysis/ai-face-rating", params, AILabTools::Generated::Responses::PortraitAIFaceRatingResponse)
128
+ end
129
+
130
+ def portrait_ai_bald(params)
131
+ @requester.request("POST", "/api/portrait/editing/ai-bald", params, AILabTools::Generated::Responses::PortraitAIBaldResponse)
132
+ end
133
+
134
+ def portrait_ai_beard_removal(params)
135
+ @requester.request("POST", "/api/portrait/editing/ai-beard-removal", params, AILabTools::Generated::Responses::PortraitAIBeardRemovalResponse)
136
+ end
137
+
138
+ def portrait_ai_beard_styling(params)
139
+ @requester.request("POST", "/api/portrait/editing/ai-beard-styling", params, AILabTools::Generated::Responses::PortraitAIBeardStylingResponse)
140
+ end
141
+
142
+ def portrait_ai_breast_expansion(params)
143
+ @requester.request("POST", "/api/portrait/editing/ai-big-tits", params, AILabTools::Generated::Responses::PortraitAIBreastExpansionResponse)
144
+ end
145
+
146
+ def portrait_ai_butt_enhancement(params)
147
+ @requester.request("POST", "/api/portrait/editing/ai-butt-enhancement", params, AILabTools::Generated::Responses::PortraitAIButtEnhancementResponse)
148
+ end
149
+
150
+ def portrait_ai_colored_contacts(params)
151
+ @requester.request("POST", "/api/portrait/editing/ai-colored-contacts", params, AILabTools::Generated::Responses::PortraitAIColoredContactsResponse)
152
+ end
153
+
154
+ def portrait_ai_eyebrows(params)
155
+ @requester.request("POST", "/api/portrait/editing/ai-eyebrows", params, AILabTools::Generated::Responses::PortraitAIEyebrowsResponse)
156
+ end
157
+
158
+ def portrait_ai_eyelashes(params)
159
+ @requester.request("POST", "/api/portrait/editing/ai-eyelashes", params, AILabTools::Generated::Responses::PortraitAIEyelashesResponse)
160
+ end
161
+
162
+ def portrait_ai_eyeshadow_try_on(params)
163
+ @requester.request("POST", "/api/portrait/editing/ai-eyeshadow", params, AILabTools::Generated::Responses::PortraitAIEyeshadowTryOnResponse)
164
+ end
165
+
166
+ def portrait_ai_face_swap(params)
167
+ @requester.request("POST", "/api/portrait/editing/ai-face-swap", params, AILabTools::Generated::Responses::PortraitAIFaceSwapResponse)
168
+ end
169
+
170
+ def portrait_ai_fat_filter(params)
171
+ @requester.request("POST", "/api/portrait/editing/ai-fat-filter", params, AILabTools::Generated::Responses::PortraitAIFatFilterResponse)
172
+ end
173
+
174
+ def portrait_ai_hair_color(params)
175
+ @requester.request("POST", "/api/portrait/editing/ai-hair-color", params, AILabTools::Generated::Responses::PortraitAIHairColorResponse)
176
+ end
177
+
178
+ def portrait_ai_hair_loss_simulation(params)
179
+ @requester.request("POST", "/api/portrait/editing/ai-hair-loss-simulation", params, AILabTools::Generated::Responses::PortraitAIHairLossSimulationResponse)
180
+ end
181
+
182
+ def portrait_ai_lip_enhancement(params)
183
+ @requester.request("POST", "/api/portrait/editing/ai-lip-enhancement", params, AILabTools::Generated::Responses::PortraitAILipEnhancementResponse)
184
+ end
185
+
186
+ def portrait_ai_waist_slimming(params)
187
+ @requester.request("POST", "/api/portrait/editing/ai-waist-slimming", params, AILabTools::Generated::Responses::PortraitAIWaistSlimmingResponse)
188
+ end
189
+
190
+ def portrait_try_on_clothes_premium(params)
191
+ @requester.request("POST", "/api/portrait/editing/try-on-clothes-premium", params, AILabTools::Generated::Responses::PortraitTryOnClothesPremiumResponse)
192
+ end
193
+
194
+ def portrait_ai_big_head_effect(params)
195
+ @requester.request("POST", "/api/portrait/effects/ai-big-head-effect", params, AILabTools::Generated::Responses::PortraitAIBigHeadEffectResponse)
196
+ end
197
+
198
+ def portrait_ai_halloween_mask(params)
199
+ @requester.request("POST", "/api/portrait/effects/ai-halloween-mask", params, AILabTools::Generated::Responses::PortraitAIHalloweenMaskResponse)
200
+ end
201
+
202
+ def portrait_ai_lip_bite_expressions(params)
203
+ @requester.request("POST", "/api/portrait/effects/ai-lip-bite-expressions", params, AILabTools::Generated::Responses::PortraitAILipBiteExpressionsResponse)
204
+ end
205
+
206
+ def portrait_ai_red_lip_gloss(params)
207
+ @requester.request("POST", "/api/portrait/effects/ai-red-lip-gloss", params, AILabTools::Generated::Responses::PortraitAIRedLipGlossResponse)
208
+ end
209
+
210
+ def portrait_ai_square_face_filter(params)
211
+ @requester.request("POST", "/api/portrait/effects/ai-square-face-filter", params, AILabTools::Generated::Responses::PortraitAISquareFaceFilterResponse)
212
+ end
213
+
214
+ def portrait_expression_editing_advanced(params)
215
+ @requester.request("POST", "/api/portrait/effects/emotion-editor-advanced", params, AILabTools::Generated::Responses::PortraitExpressionEditingAdvancedResponse)
216
+ end
217
+
218
+ def portrait_hairstyle_editing_premium(params)
219
+ @requester.request("POST", "/api/portrait/effects/hairstyle-editor-premium", params, AILabTools::Generated::Responses::PortraitHairstyleEditingPremiumResponse)
220
+ end
221
+
222
+ def portrait_ai_skin_enhancement_advanced(params)
223
+ @requester.request("POST", "/api/portrait/effects/smart-skin-advanced", params, AILabTools::Generated::Responses::PortraitAISkinEnhancementAdvancedResponse)
224
+ end
225
+
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ class Client
5
+ attr_reader :common, :cutout, :image, :portrait, :background
6
+
7
+ def initialize(api_key:, base_url: "https://www.ailabapi.com", timeout: 120)
8
+ requester = Requester.new(api_key: api_key, base_url: base_url, timeout: timeout)
9
+ @common = API::CommonAPI.new(requester)
10
+ @cutout = API::CutoutAPI.new(requester)
11
+ @image = API::ImageAPI.new(requester)
12
+ @portrait = API::PortraitAPI.new(requester)
13
+ @background = API::BackgroundAPI.new(@cutout)
14
+ end
15
+
16
+ def wait_for_task(task_id, interval: 5, timeout: 300, raise_on_failed: true)
17
+ deadline = Time.now + timeout
18
+ loop do
19
+ result = @common.common_query_async_task_result(
20
+ Generated::Params::CommonQueryAsyncTaskResultParams.new(task_id: task_id)
21
+ )
22
+ status = result.data && result.data.task_status || result.task_status
23
+ return result if status == 2
24
+ if status == 3
25
+ raise SDKError, "AILabTools task failed: #{task_id}" if raise_on_failed
26
+ return result
27
+ end
28
+ raise SDKError, "AILabTools task timed out: #{task_id}" if Time.now >= deadline
29
+ sleep interval if interval.positive?
30
+ end
31
+ end
32
+
33
+ def close
34
+ nil
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AILabTools
4
+ class Error < StandardError; end
5
+
6
+ class SDKError < Error; end
7
+
8
+ class APIError < Error
9
+ attr_reader :status_code, :request_id, :log_id, :error_code, :error_detail, :raw
10
+
11
+ def initialize(message, status_code:, request_id: nil, log_id: nil, error_code: nil, error_detail: nil, raw: nil)
12
+ super(message)
13
+ @status_code = status_code
14
+ @request_id = request_id
15
+ @log_id = log_id
16
+ @error_code = error_code
17
+ @error_detail = error_detail
18
+ @raw = raw
19
+ end
20
+ end
21
+ end