Skip to content

Commit

Permalink
Merge pull request #12 from OmarMWarraich/11-trasnmit-data-to-stable-…
Browse files Browse the repository at this point in the history
…diffusion

11 transmit data to stable diffusion
  • Loading branch information
OmarMWarraich authored Jul 1, 2024
2 parents 9a4c69a + 777c489 commit 1f8ab81
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 13 deletions.
50 changes: 43 additions & 7 deletions app/controllers/txt2_imgs_controller.rb
Original file line number Diff line number Diff line change
@@ -1,35 +1,71 @@
class Txt2ImgsController < ApplicationController
before_action :authenticate_user!

def index

@styles = Styles.load

api_instance = RStableDiffusionAI::DefaultApi.new
config = RStableDiffusionAI::Configuration.new
config.host = ENV['SD_API_HOST']
config.scheme = ENV['SD_API_SCHEME']
config.debugging = true

client = RStableDiffusionAI::ApiClient.new(config)

api_instance = RStableDiffusionAI::DefaultApi.new(client)

result = api_instance.get_sd_models_sdapi_v1_sd_models_get
@models = result.map { |model| model.model_name }
end

def create
style = Styles.find_by_name(params[:style_template])
style = { name: '++ None', prompt: '{prompt}', negative_prompt: '' } if style.nil?
style = Styles.find_by_name(image_create_params[:style_template])
style ||= { name: 'default', prompt: '{prompt}', negative_prompt: '' }

prompt = params[:prompt]
prompt = image_create_params[:prompt]
merged_prompt = style[:prompt].gsub('{prompt}', prompt)
merged_negative_prompt = [style[:negative_prompt], image_maker_params[:negative_prompt]].compact.join(', ')
merged_negative_prompt = [style[:negative_prompt], image_create_params[:negative_prompt]].compact.join(', ')

aspect_ratios = {
'3:2' => { height: 682, width: 1024 },
'1:1' => { height: 1024, width: 1024 },
'2:3' => { height: 1024, width: 682 }
}

height, width = aspect_ratios.fetch(image_create_params[:aspect_ratio], { height: 1024, width: 1024 }).values_at(:height,
:width)

sd_settings = {
original_prompt: image_create_params[:prompt],
prompt: merged_prompt,
negative_prompt: merged_negative_prompt,
sampler_name: 'DPM++ 2M Karras',
width: width,
height: height,
steps: image_create_params[:steps],
override_settings: { sd_model_checkpoint: image_create_params.delete(:sd_model) }
}.deep_symbolize_keys

new_settings = image_create_params.to_h.deep_symbolize_keys.merge(sd_settings)
Rails.logger.info("sd_settings: #{sd_settings}")
# new_settings = image_create_params.to_h.deep_symbolize_keys.merge(sd_settings)
render_result = SdRenderJob.perform_now(sd_settings, current_user.id)

respond_to do |format|
format.turbo_stream do
render turbo_stream: turbo_stream.replace(
'image_maker',
partial: 'txt2_imgs/image_maker',
locals: {
render_result: render_result
}
)
end
end
end

private

def image_create_params
params.require(:image_maker).permit(:prompt, :style_template)
params.require(:image_maker).permit(:style_template, :prompt, :negative_prompt, :sd_model, :aspect_ratio, :steps)
end
end
20 changes: 20 additions & 0 deletions app/jobs/sd_render_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
class SdRenderJob < ApplicationJob
queue_as :default

def perform(render_settings, user_id)
original_prompt = render_settings.delete(:original_prompt)
style_template = render_settings.delete(:style_template)

config = RStableDiffusionAI::Configuration.new
config.host = ENV['SD_API_HOST']
config.scheme = ENV['SD_API_SCHEME']
config.debugging = true

client = RStableDiffusionAI::ApiClient.new(config)

api_instance = RStableDiffusionAI::DefaultApi.new(client)

result = api_instance.text2imgapi_sdapi_v1_txt2img_post(render_settings)

end
end
3 changes: 3 additions & 0 deletions app/views/txt2_imgs/_image_maker.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<turbo-frame id="image_maker" action="update">
<%= image_tag "data:image/png;base64,#{render_result.images[0]}", alt: "#{render_result.info}", class: "img-fluid thumbnail" %>
</turbo-frame>
38 changes: 34 additions & 4 deletions app/views/txt2_imgs/_settings.html.erb
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
<%= form_with(model: ImageMaker.new, url: txt2_imgs_path, method: :post) do |form|%>
<div class='row mb-2'>
<div class='col-2'>
<%= form.label :style_template, "Style", class: "form-label" %>
<strong>
<%= form.label :style_template, "Style", class: "form-label" %>
</strong>
</div>
<div class='col'>
<%= form.select :style_template, @styles.map { |s| [s[:name].titleize, s[:name]] }.sort, { include_blank: true }, {class: "form-select w-100"} %>
Expand All @@ -10,7 +12,9 @@

<div class='row mb-2'>
<div class='col-2'>
<%= form.label :sd_model, "Model", class: "form-label" %>
<strong>
<%= form.label :sd_model, "Model", class: "form-label" %>
</strong>
</div>
<div class='col'>
<%= form.select :sd_model, @models.sort, {}, {class: "form-select w-100"} %>
Expand All @@ -27,7 +31,7 @@

<div class='row mb-2'>
<div class='col'>
<div class="btn-group w-100 d-flex" role="group" aria-label="Basic radio toggle button group">
<div class="btn-group w-100 d-flex" role="group" aria-label="Choose aspect ratio">
<%= form.radio_button :aspect_ratio, "3:2", class: 'btn-check' %>
<%= form.label :aspect_ratio_32, class: "btn btn-outline-default" do %>
<i class='fas fa-regular fa-rectangle-wide'></i> 3:2
Expand All @@ -51,7 +55,9 @@
<div class="container" data-controller="random-seed toggle">
<div class="row mb-2">
<div class="col-3 pt-1">
<%= form.label :seed, "Seed", class: "form-label" %>
<strong>
<%= form.label :seed, "Seed", class: "form-label" %>
</strong>
</div>
<div class="col-9">
<%= form.number_field :seed, in: -1..9999999999, class: "form-control", data: { random_seed_target: "inputField", toggle_target: "inputField" } %>
Expand All @@ -70,4 +76,28 @@
</div>
</div>

<div class="mb-2 row">
<div class="col-1 pt-1">
<strong>
Q
</strong>
</div>
<div class="col">
<div class="btn-group w-100 d-flex" role="group" aria-label="Set image quality">
<%= form.radio_button :steps, "14", class: 'btn-check' %>
<%= form.label :steps_14, class: "btn btn-outline-default" do %>
Fast
<% end %>
<%= form.radio_button :steps, "32", class: 'btn-check', checked: true %>
<%= form.label :steps_32, class: "btn btn-outline-default" do %>
Medium
<% end %>
<%= form.radio_button :steps, "50", class: 'btn-check' %>
<%= form.label :steps_50, class: "btn btn-outline-default" do %>
High
<% end %>
</div>
</div>
</div>

<% end %>
9 changes: 7 additions & 2 deletions app/views/txt2_imgs/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,13 @@
</div>
</div>
<div class='col-md-7'>
<div id='image_holder' class='text-center card h-100 p-2 bg-dark'>

<div id='image_holder' class='text-center card h-100 p-2'>
<%# turbo_stream_from "#{dom_id(current_user)}_main_image" %>
<turbo-frame id="full_image_area">
<turbo-frame id="image_maker">
This will be replaced by the image maker
</turbo-frame>
</turbo-frame>
</div>
</div>
<div class='col-md-2'>
Expand Down
7 changes: 7 additions & 0 deletions test/jobs/sd_render_job_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
require "test_helper"

class SdRenderJobTest < ActiveJob::TestCase
# test "the truth" do
# assert true
# end
end

0 comments on commit 1f8ab81

Please sign in to comment.