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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +8 -0
- data/LICENSE +21 -0
- data/README.md +121 -0
- data/lib/ailabtools/api/background_api.rb +15 -0
- data/lib/ailabtools/api/common_api.rb +20 -0
- data/lib/ailabtools/api/cutout_api.rb +48 -0
- data/lib/ailabtools/api/image_api.rb +140 -0
- data/lib/ailabtools/api/portrait_api.rb +228 -0
- data/lib/ailabtools/client.rb +37 -0
- data/lib/ailabtools/errors.rb +21 -0
- data/lib/ailabtools/file_input.rb +27 -0
- data/lib/ailabtools/generated/params/common_query_async_task_result_params.rb +24 -0
- data/lib/ailabtools/generated/params/common_query_credits_params.rb +19 -0
- data/lib/ailabtools/generated/params/cutout_avatar_extraction_params.rb +26 -0
- data/lib/ailabtools/generated/params/cutout_clothing_background_removal_params.rb +30 -0
- data/lib/ailabtools/generated/params/cutout_food_background_removal_params.rb +26 -0
- data/lib/ailabtools/generated/params/cutout_hair_extraction_params.rb +24 -0
- data/lib/ailabtools/generated/params/cutout_hd_human_body_background_removal_params.rb +24 -0
- data/lib/ailabtools/generated/params/cutout_hd_universal_background_removal_params.rb +24 -0
- data/lib/ailabtools/generated/params/cutout_human_background_removal_params.rb +26 -0
- data/lib/ailabtools/generated/params/cutout_product_background_removal_params.rb +26 -0
- data/lib/ailabtools/generated/params/cutout_universal_background_removal_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_ai_cartoon_generator_params.rb +28 -0
- data/lib/ailabtools/generated/params/image_ai_emoji_generator_params.rb +32 -0
- data/lib/ailabtools/generated/params/image_ai_flower_wallpaper_params.rb +32 -0
- data/lib/ailabtools/generated/params/image_ai_image_cropping_params.rb +28 -0
- data/lib/ailabtools/generated/params/image_ai_image_extender_params.rb +48 -0
- data/lib/ailabtools/generated/params/image_ai_nail_art_params.rb +28 -0
- data/lib/ailabtools/generated/params/image_ai_nail_art_pro_params.rb +28 -0
- data/lib/ailabtools/generated/params/image_ai_object_replacer_params.rb +34 -0
- data/lib/ailabtools/generated/params/image_ai_photography_params.rb +30 -0
- data/lib/ailabtools/generated/params/image_clarity_enhancement_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_color_enhancement_params.rb +28 -0
- data/lib/ailabtools/generated/params/image_coloring_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_composition_aesthetics_score_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_contrast_enhancement_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_dehaze_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_distortion_correction_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_erasure_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_exposure_rating_params.rb +24 -0
- data/lib/ailabtools/generated/params/image_intelligent_composition_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_invisible_image_watermark_params.rb +34 -0
- data/lib/ailabtools/generated/params/image_invisible_text_watermark_params.rb +34 -0
- data/lib/ailabtools/generated/params/image_lossless_enlargement_params.rb +32 -0
- data/lib/ailabtools/generated/params/image_photo_editing_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_photo_to_coloring_page_params.rb +28 -0
- data/lib/ailabtools/generated/params/image_querying_async_task_results_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_remove_objects_advanced_params.rb +38 -0
- data/lib/ailabtools/generated/params/image_remove_objects_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_remove_objects_pro_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_style_migration_params.rb +26 -0
- data/lib/ailabtools/generated/params/image_style_transfer_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_ai_bald_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_beard_removal_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_beard_styling_params.rb +29 -0
- data/lib/ailabtools/generated/params/portrait_ai_big_head_effect_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_breast_expansion_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_ai_butt_enhancement_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_colored_contacts_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_ai_eyebrows_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_ai_eyelashes_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_ai_eyeshadow_try_on_params.rb +31 -0
- data/lib/ailabtools/generated/params/portrait_ai_face_rating_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_ai_face_swap_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_ai_fat_filter_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_hair_color_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_ai_hair_loss_simulation_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_ai_halloween_mask_params.rb +31 -0
- data/lib/ailabtools/generated/params/portrait_ai_lip_bite_expressions_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_ai_lip_enhancement_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_red_lip_gloss_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_skin_enhancement_advanced_params.rb +42 -0
- data/lib/ailabtools/generated/params/portrait_ai_square_face_filter_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_ai_waist_slimming_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_cartoon_yourself_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_expression_editing_advanced_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_expression_editing_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_face_analyzer_advanced_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_face_analyzer_params.rb +30 -0
- data/lib/ailabtools/generated/params/portrait_face_attribute_editing_params.rb +30 -0
- data/lib/ailabtools/generated/params/portrait_face_fusion_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_face_restoration_enhancement_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_facial_beautification_advanced_params.rb +32 -0
- data/lib/ailabtools/generated/params/portrait_facial_beautification_params.rb +30 -0
- data/lib/ailabtools/generated/params/portrait_facial_beautification_pro_params.rb +40 -0
- data/lib/ailabtools/generated/params/portrait_facial_blurring_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_facial_filters_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_facial_landmarks_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_hairstyle_editing_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_hairstyle_editing_premium_params.rb +31 -0
- data/lib/ailabtools/generated/params/portrait_hairstyle_editing_pro_params.rb +40 -0
- data/lib/ailabtools/generated/params/portrait_intelligent_beautification_params.rb +30 -0
- data/lib/ailabtools/generated/params/portrait_intelligent_face_slimming_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_intelligent_skin_retouching_params.rb +28 -0
- data/lib/ailabtools/generated/params/portrait_lips_color_changer_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_live_photos_params.rb +26 -0
- data/lib/ailabtools/generated/params/portrait_skin_analysis_advanced_params.rb +30 -0
- data/lib/ailabtools/generated/params/portrait_skin_analysis_basic_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_skin_analysis_professional_params.rb +36 -0
- data/lib/ailabtools/generated/params/portrait_skin_disease_detection_params.rb +24 -0
- data/lib/ailabtools/generated/params/portrait_try_on_clothes_params.rb +30 -0
- data/lib/ailabtools/generated/params/portrait_try_on_clothes_premium_params.rb +34 -0
- data/lib/ailabtools/generated/params/portrait_try_on_clothes_pro_params.rb +34 -0
- data/lib/ailabtools/generated/params/portrait_try_on_clothes_refiner_params.rb +34 -0
- data/lib/ailabtools/generated/responses/common_query_async_task_result_response.rb +35 -0
- data/lib/ailabtools/generated/responses/common_query_credits_response.rb +50 -0
- data/lib/ailabtools/generated/responses/cutout_avatar_extraction_response.rb +46 -0
- data/lib/ailabtools/generated/responses/cutout_clothing_background_removal_response.rb +58 -0
- data/lib/ailabtools/generated/responses/cutout_food_background_removal_response.rb +36 -0
- data/lib/ailabtools/generated/responses/cutout_hair_extraction_response.rb +46 -0
- data/lib/ailabtools/generated/responses/cutout_hd_human_body_background_removal_response.rb +51 -0
- data/lib/ailabtools/generated/responses/cutout_hd_universal_background_removal_response.rb +38 -0
- data/lib/ailabtools/generated/responses/cutout_human_background_removal_response.rb +36 -0
- data/lib/ailabtools/generated/responses/cutout_product_background_removal_response.rb +36 -0
- data/lib/ailabtools/generated/responses/cutout_universal_background_removal_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_ai_cartoon_generator_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_ai_emoji_generator_response.rb +42 -0
- data/lib/ailabtools/generated/responses/image_ai_flower_wallpaper_response.rb +42 -0
- data/lib/ailabtools/generated/responses/image_ai_image_cropping_response.rb +46 -0
- data/lib/ailabtools/generated/responses/image_ai_image_extender_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_ai_nail_art_pro_response.rb +42 -0
- data/lib/ailabtools/generated/responses/image_ai_nail_art_response.rb +42 -0
- data/lib/ailabtools/generated/responses/image_ai_object_replacer_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_ai_photography_response.rb +42 -0
- data/lib/ailabtools/generated/responses/image_clarity_enhancement_response.rb +35 -0
- data/lib/ailabtools/generated/responses/image_color_enhancement_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_coloring_response.rb +35 -0
- data/lib/ailabtools/generated/responses/image_composition_aesthetics_score_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_contrast_enhancement_response.rb +35 -0
- data/lib/ailabtools/generated/responses/image_dehaze_response.rb +35 -0
- data/lib/ailabtools/generated/responses/image_distortion_correction_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_erasure_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_exposure_rating_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_intelligent_composition_response.rb +46 -0
- data/lib/ailabtools/generated/responses/image_invisible_image_watermark_response.rb +38 -0
- data/lib/ailabtools/generated/responses/image_invisible_text_watermark_response.rb +38 -0
- data/lib/ailabtools/generated/responses/image_lossless_enlargement_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_photo_editing_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_photo_to_coloring_page_response.rb +42 -0
- data/lib/ailabtools/generated/responses/image_querying_async_task_results_response.rb +34 -0
- data/lib/ailabtools/generated/responses/image_remove_objects_advanced_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_remove_objects_pro_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_remove_objects_response.rb +36 -0
- data/lib/ailabtools/generated/responses/image_style_migration_response.rb +38 -0
- data/lib/ailabtools/generated/responses/image_style_transfer_response.rb +35 -0
- data/lib/ailabtools/generated/responses/portrait_ai_bald_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_beard_removal_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_beard_styling_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_big_head_effect_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_breast_expansion_response.rb +41 -0
- data/lib/ailabtools/generated/responses/portrait_ai_butt_enhancement_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_colored_contacts_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_eyebrows_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_eyelashes_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_eyeshadow_try_on_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_face_rating_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_face_swap_response.rb +42 -0
- data/lib/ailabtools/generated/responses/portrait_ai_fat_filter_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_hair_color_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_hair_loss_simulation_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_halloween_mask_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_lip_bite_expressions_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_lip_enhancement_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_red_lip_gloss_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_skin_enhancement_advanced_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_square_face_filter_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_ai_waist_slimming_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_cartoon_yourself_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_expression_editing_advanced_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_expression_editing_response.rb +35 -0
- data/lib/ailabtools/generated/responses/portrait_face_analyzer_advanced_response.rb +80 -0
- data/lib/ailabtools/generated/responses/portrait_face_analyzer_response.rb +116 -0
- data/lib/ailabtools/generated/responses/portrait_face_attribute_editing_response.rb +37 -0
- data/lib/ailabtools/generated/responses/portrait_face_fusion_response.rb +35 -0
- data/lib/ailabtools/generated/responses/portrait_face_restoration_enhancement_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_facial_beautification_advanced_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_facial_beautification_pro_response.rb +37 -0
- data/lib/ailabtools/generated/responses/portrait_facial_beautification_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_facial_blurring_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_facial_filters_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_facial_landmarks_response.rb +80 -0
- data/lib/ailabtools/generated/responses/portrait_hairstyle_editing_premium_response.rb +38 -0
- data/lib/ailabtools/generated/responses/portrait_hairstyle_editing_pro_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_hairstyle_editing_response.rb +35 -0
- data/lib/ailabtools/generated/responses/portrait_intelligent_beautification_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_intelligent_face_slimming_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_intelligent_skin_retouching_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_lips_color_changer_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_live_photos_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_skin_analysis_advanced_response.rb +130 -0
- data/lib/ailabtools/generated/responses/portrait_skin_analysis_basic_response.rb +98 -0
- data/lib/ailabtools/generated/responses/portrait_skin_analysis_professional_response.rb +42 -0
- data/lib/ailabtools/generated/responses/portrait_skin_disease_detection_response.rb +140 -0
- data/lib/ailabtools/generated/responses/portrait_try_on_clothes_premium_response.rb +42 -0
- data/lib/ailabtools/generated/responses/portrait_try_on_clothes_pro_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_try_on_clothes_refiner_response.rb +36 -0
- data/lib/ailabtools/generated/responses/portrait_try_on_clothes_response.rb +36 -0
- data/lib/ailabtools/params.rb +21 -0
- data/lib/ailabtools/requester.rb +108 -0
- data/lib/ailabtools/response_model.rb +49 -0
- data/lib/ailabtools/version.rb +5 -0
- data/lib/ailabtools.rb +18 -0
- 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
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,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
|