getimg_client 0.1.2 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bebe5b9162ab45505ab6f74e4b816f9c14cee51734a12a8baf8e273824acae23
4
- data.tar.gz: 506ab1f2ff553a225dc93fd0e5bd039c68a574d7c6f6c2a2a7da819940358cf3
3
+ metadata.gz: df68c244073fbc74c6cb913c4b9208c40a2d136d226a1974dec6addae2bc4682
4
+ data.tar.gz: 641715c9f551b30eb44f06252be3ded05df990676e5260cff8e89893d3b0ca77
5
5
  SHA512:
6
- metadata.gz: 251e4fef81fbaa5a0c6bcb5d9b2bd5b26717db6b7af29df3208461041ad02d07b74539256c24dc2bb080afd354e5ba58f48e253896781d8e186e5cc34f8e7dcd
7
- data.tar.gz: 972aa553495c690c9e30d3eb45a1d86de972639235b3c4fa1e8916c635540b99ed662ac1579d8cb6e60a69326684541745e63184344647a1274475337bfaf62b
6
+ metadata.gz: 5249e227172db1f03aeced82d4a8f6429b1ad75c6eaa2c51d0285000e0f324b9b14ef833bc638949dd35e3aef03d1ab99c93049a0de65bebe57c58d8f9d35f97
7
+ data.tar.gz: dec0e93875f2d227ac3a7128b57d7e65f7f3d8b334f7f4c379f7a4cb87b1c6aa0672789979b950a65cd5f96bc6fabb2fb0cf9f613d8596147b8449dffbb7b9dd
data/README.md CHANGED
@@ -46,14 +46,14 @@ Fetch and cache the list of available models from the API.
46
46
  ### `models`
47
47
  Retrieve cached models or fetch them if not already retrieved.
48
48
 
49
- ### `generate_image(prompt, model:, **options)`
50
- Generate an image based on a text prompt and specified model. Supports various image manipulation methods such as image-to-image, inpainting, controlnet, face fixing, instruct and upscaling.
49
+ ### `generate_image(prompt, model: :essential, **options)`
50
+ Generate an image based on a text prompt and specified model. Supports various image manipulation methods such as image-to-image, inpainting, controlnet, face fixing, instruct, and upscaling. Specifying a model is optional; by default, it will invoke the Essential V1 endpoint.
51
51
 
52
52
  ### `get_balance`
53
53
  Retrieve the current account balance from the Getimg.ai API.
54
54
 
55
55
  ## Request Routing
56
- The `generate_image` method routes requests based on the provided options and the model's supported pipelines, sending it to its respective pipeline whether that's SD1.5, SDXL or LCM based:
56
+ The `generate_image` method routes requests based on the provided options and the model's supported pipelines, sending it to its respective pipeline whether that's SD1.5, SDXL, Essential, or LCM based:
57
57
  - **text-to-image**: Default if no images are provided.
58
58
  - **image-to-image**: Triggered if a base image is provided.
59
59
  - **inpaint**: Triggered if a mask image is provided.
@@ -82,8 +82,12 @@ If an HTTP error occurs, the error message will include both the HTTP status and
82
82
  ## Models
83
83
  The provided `model` option will determine the model use, and contribute to the client's inference of the desired endpoint. Models can be the string `id` listed online at [the GetImg dashboard](https://dashboard.getimg.ai/models) or retrieved using the `GetimgClient.models` method. Equally, you can use symbols instead. For example, `:realistic_vision_v5_1` will translate to `'realistic-vision-v5-1'`
84
84
 
85
+ ## Essential
86
+ Getimg offers the "essential" checkpoints, which perform more abstract Stable Diffusion operations based on the provided prompt. Note that *:essential* and *:essential_v2* will *not* be listed in the model listing, as these are not in fact actual models, nor valid "model" value at the API's end.
87
+ In order to route a request to Essential or Essential V2 however, you can provide *:essential* or *:essential_v2* as a model argument in *#generate_image*.
88
+
85
89
  ## Latent Consistency Models (LCM)
86
- Latent consistency models are designed to speed up image generation by circumventing the iterative generation process of diffusion-based methods. Building on direct consistency models that operate on image pixels, latent consistency models operate in the latent (lower-dimensional) space. The client will automatically route requests to these models as needed.
90
+ Latent Consistency Models (LCM) are optimized for faster image generation and lower costs by avoiding the repetitive steps of traditional diffusion methods. They work in a lower-dimensional space, resulting in quicker outputs but with slightly less detail compared to standard models.
87
91
 
88
92
  ## Base Image Options
89
93
  The `base_image` option can be provided, which will automatically set the "image" property for image-to-image, controlnet, face-fix, upscale, inpaint and instruct calls, and can be either a file path or a base64 encoded string of the file contents.
@@ -98,7 +102,13 @@ If all went well and no errors were reported, the response will be equal to the
98
102
  GetimgClient.set_api_key('your_api_key')
99
103
  ```
100
104
 
101
- ### Generate Text-to-Image
105
+ ### Generate Text-to-Image using Essential V1 with default options
106
+ ```ruby
107
+ result = GetimgClient.generate_image("A city skyline at night")
108
+ puts result["image"]
109
+ ```
110
+
111
+ ### Generate Text-to-Image using Stable Diffusion 1.5
102
112
  ```ruby
103
113
  result = GetimgClient.generate_image("A scenic landscape", model: :stable_diffusion_v1_5, width: 512, height: 512)
104
114
  puts result["image"]
@@ -114,7 +124,7 @@ puts result["image"]
114
124
  ### Generate an image using Controlnet
115
125
  ```ruby
116
126
  base_image = "path/to/base_image.jpg"
117
- result = GetimgClient.generate_image("Enhance the scene", model: :stable_diffusion_v1_5, base_image:, strength: 0.7, controlnet: canny-1.1)
127
+ result = GetimgClient.generate_image("Enhance the scene", model: :stable_diffusion_v1_5, base_image:, strength: 0.7, controlnet: 'canny-1.1')
118
128
  puts result["image"]
119
129
  ```
120
130
 
data/lib/endpoints.json CHANGED
@@ -10,6 +10,7 @@
10
10
  "lcm_text_to_image": "https://api.getimg.ai/v1/latent-consistency/text-to-image",
11
11
  "lcm_image_to_image": "https://api.getimg.ai/v1/latent-consistency/image-to-image",
12
12
  "essential_text_to_image": "https://api.getimg.ai/v1/essential/text-to-image",
13
+ "essentialv2_text_to_image": "https://api.getimg.ai/v1/essential-v2/text-to-image",
13
14
  "face_fix": "https://api.getimg.ai/v1/enhancements/face-fix",
14
15
  "upscale": "https://api.getimg.ai/v1/enhancements/upscale",
15
16
  "models": "https://api.getimg.ai/v1/models",
data/lib/getimg_client.rb CHANGED
@@ -32,7 +32,7 @@ class GetimgClient
32
32
  end
33
33
 
34
34
  # Generate an image based on the prompt and model
35
- def self.generate_image(prompt, model:, **options)
35
+ def self.generate_image(prompt, model: :essential, **options)
36
36
  # Validate the prompt
37
37
  raise ArgumentError, 'Prompt is required' unless prompt.is_a?(String) && !prompt.strip.empty?
38
38
 
@@ -43,7 +43,11 @@ class GetimgClient
43
43
 
44
44
  # Convert model to appropriate ID format
45
45
  model_id = model.to_s.gsub('_', '-')
46
- model_info = models[model_id] || raise(ArgumentError, "Unknown model: #{model}")
46
+ if model_id === 'essential' || model_id === 'essential-v2'
47
+ model_info = models[model_id] || { name: model_id, pipelines: ['text-to-image'] }
48
+ else
49
+ model_info = models[model_id] || raise(ArgumentError, "Unknown model: #{model}")
50
+ end
47
51
 
48
52
  # Determine the requested pipeline
49
53
  requested_pipeline = method_requested(base_image, mask_image_path, controlnet, model_info).to_s.gsub('_', '-')
@@ -54,7 +58,7 @@ class GetimgClient
54
58
  end
55
59
 
56
60
  # Determine the endpoint key based on the model family and pipeline
57
- endpoint_key = determine_endpoint_key(model_info, requested_pipeline)
61
+ endpoint_key = determine_endpoint_key(model_info, requested_pipeline, model_id)
58
62
  uri = URI(API_ENDPOINTS[endpoint_key.to_s])
59
63
 
60
64
  # Handle image to image, controlnet, instruct, inpaint, face-fix, and upscale pipelines
@@ -113,8 +117,12 @@ class GetimgClient
113
117
  end
114
118
 
115
119
  # Determine the appropriate endpoint key based on the model family and pipeline
116
- def self.determine_endpoint_key(model_info, requested_pipeline)
117
- if model_info[:family] == 'stable-diffusion-xl'
120
+ def self.determine_endpoint_key(model_info, requested_pipeline, model_id)
121
+ if model_id == 'essential'
122
+ return :essential_text_to_image
123
+ elsif model_id == 'essential-v2'
124
+ return :essentialv2_text_to_image
125
+ elsif model_info[:family] == 'stable-diffusion-xl'
118
126
  return :sdxl_image_to_image if requested_pipeline == 'image-to-image'
119
127
  return :sdxl_inpaint if requested_pipeline == 'inpaint'
120
128
  return :sdxl_text_to_image
@@ -133,10 +141,8 @@ class GetimgClient
133
141
  request['accept'] = 'application/json'
134
142
  request['content-type'] = 'application/json'
135
143
 
136
- body = {
137
- prompt: prompt,
138
- model: model
139
- }.merge(options)
144
+ body = { prompt: prompt }.merge(options)
145
+ body[:model] = model unless %w[essential essential-v2].include?(model)
140
146
 
141
147
  request.body = body.to_json
142
148
  request
@@ -3,9 +3,7 @@ require_relative "../test_helper"
3
3
  class GetimgClientIntegrationTest < Minitest::Test
4
4
  def setup
5
5
  @base_image = Base64.strict_encode64(File.read(File.join(__dir__, "sample_image.jpeg")))
6
-
7
6
  @small_image = Base64.strict_encode64(File.read(File.join(__dir__, "small_sample_image.jpeg")))
8
-
9
7
  @mask_image = Base64.strict_encode64(File.read(File.join(__dir__, "mask_image.jpeg")))
10
8
  end
11
9
 
@@ -58,6 +56,13 @@ class GetimgClientIntegrationTest < Minitest::Test
58
56
  save_image(result["image"], "test_upscale")
59
57
  end
60
58
 
59
+ def test_generate_text_to_image_essential
60
+ puts "-- Running test_generate_text_to_image_essential..."
61
+ result = GetimgClient.generate_image("A modern cityscape")
62
+ assert result["image"]
63
+ save_image(result["image"], "test_generate_text_to_image_essential")
64
+ end
65
+
61
66
  private
62
67
 
63
68
  def save_image(base64_image, filename)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: getimg_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Melvin Sommer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-15 00:00:00.000000000 Z
11
+ date: 2024-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -43,7 +43,8 @@ files:
43
43
  homepage: https://gitlab.com/coeusit/getimg_client
44
44
  licenses:
45
45
  - MIT
46
- metadata: {}
46
+ metadata:
47
+ source_code_uri: https://gitlab.com/coeusit/getimg_client
47
48
  post_install_message:
48
49
  rdoc_options: []
49
50
  require_paths: