Guest User

Untitled

a guest
May 13th, 2023
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.49 KB | None | 0 0
  1. import os.path
  2. import modules.scripts as scripts
  3. import gradio as gr
  4. from modules import sd_samplers, shared
  5. from modules.processing import Processed, process_images, StableDiffusionProcessing, create_infotext
  6. import modules.images as images
  7. from modules.shared import opts, cmd_opts, state
  8. from PIL import Image
  9. import os
  10.  
  11. class Script(scripts.Script):
  12.     def title(self):
  13.         return "GIF creator from Image Slice (multiple)"
  14.  
  15.     def show(self, is_txt2img):
  16.         return True
  17.  
  18.     def ui(self, is_txt2img):
  19.         num_cuts = gr.inputs.Slider(minimum=2, maximum=8, default=2, step=1, label="Number of cuts/slices")
  20.         gif_duration = gr.inputs.Slider(minimum=5, maximum=1000, default=150, step=5, label="GIF duration (ms)")
  21.         ping_pong_checkbox = gr.inputs.Checkbox(label="Ping-pong animation", default=True)
  22.         return [num_cuts, gif_duration, ping_pong_checkbox]
  23.    
  24.     def cut_image(self, image, num_cuts):
  25.         width, height = image.size
  26.         cut_width = width // num_cuts
  27.         cut_height = height // num_cuts
  28.         parts = []
  29.         for i in range(num_cuts):
  30.             for j in range(num_cuts):
  31.                 left = j * cut_width
  32.                 upper = i * cut_height
  33.                 right = left + cut_width
  34.                 lower = upper + cut_height
  35.                 parts.append(image.crop((left, upper, right, lower)))
  36.         return parts
  37.    
  38.     def run(self, p, num_cuts, gif_duration, ping_pong_animation):
  39.         proc = process_images(p)
  40.         gens = proc.images
  41.        
  42.         print("Start processing "+str(len(gens))+" gif(s)")
  43.         for image_index in range(len(gens)):
  44.             save_image_tuple = images.save_image(gens[image_index], p.outpath_samples, "", image_index, "-Original", opts.samples_format)
  45.             save_image = save_image_tuple[0]
  46.             image = Image.open(save_image) # Cut the image into equal parts and create a GIF with optional ping-pong animation
  47.             cut_parts = self.cut_image(image, num_cuts)
  48.             gif_filename = os.path.splitext(save_image)[0] + "_gif.gif"
  49.             if ping_pong_animation:
  50.                 cut_parts = cut_parts + cut_parts[-2:0:-1]  # Create a ping-pong sequence
  51.             cut_parts[0].save(gif_filename, format='GIF', append_images=cut_parts[1:], save_all=True, duration=gif_duration, loop=0)
  52.             print(f"GIF created: {gif_filename}")
  53.             os.remove(save_image) # Delete the original saved image
  54.        
  55.         return Processed(p, gens, 0, "")
Advertisement
Add Comment
Please, Sign In to add comment