Spaces:
Running
on
CPU Upgrade
Post Process of Comic Panels
Perhaps others might get a kick out of seeing a little of the process of editing panels created with AI Comic Factory both inside and outside of the program.
I'm still experimenting with various ways to get more control over the images and to push the narrative of the story especially to gain continuity as well as to drive the readers movement from panel to panel and page to page.
Here's where I left off with this particular set of panels where I've annotted some things I'd like want to do to refine each panel further.
The basic story as it exists right now is that the girl is visiting the location of where her true love fought and died only to be attacked by a giant spider (and many smaller spiders).
The spider story is actually a side story that I've been chasing after originally having AI Comic Factory generate a story about the girl evading forest and mountain trolls. An generated image had a spider in it so I decided to chase after that story...
A few of the (many) other images generated from other storyline:
Fantastic! But I'm also interested in the individual prompts, what differences did you make to tweek the various simulations
@Tobivanderjagt
I do apologize.
I just spent some extensive time answering your question only to somehow navigate away from the page and lose it all.
I'll try to rewrite it but need to get some sleep.
The short of it is... keep your prompts short and put the important prompt text first.
Remove text that isn't necessary to generate the image or that is unnecessarily vague and not precise.
The panel prompts are autogenerated based off of the story prompt and they might not contain hardly anything of what you'd like to see in the panel.
Remove things you don't want.
Keep the style prompts as those are added from the 2nd (style) prompt at the top right of the program.
I had to add "girl with long black hair' to almost all panel prompts as it kept wanting to change the look of the character.
After the style and the specific character traits consider what the action in the panel needs to display.
Can placing it in front of other text improve the result?
Sometimes it might not be worth spending time refining the prompts.
Here's a case where I like the general panel but there was a lot that needed to be fixed (extra legs anyone?) I also extended the girl's skirt for a tad bit more modesty:
The hardest part here was adjusting the man's head to look at the girl because I had to invent parts of him that weren't there in the original.
I would still like to revist the look of the girl but... for now... my curiosity is satisfied.
For editing of images I tend to just Right Click and Save the panel images.
This might not be high enough rez for many cases but for my explorations it's fine.
For higher rez I export to PDF but intercept that process and have the pages save to an image instead.
I use Opentoonz for editing and updating pages (but any good image editing program will do).
One of these days I'll record a session or two and share that on youtube.
That will allow everyone to see my (fuller) approach to using AI Comics Factory.
Here's something interesting...
I used ChatGPT's new GPT apps to create an app that (attempts to) analyze the differences between two (or more) images.
Given the two images I posted in my last post it originally identified differences in file format JFIF vs PNG and RGB vs RGBA.
Then I went further (after converting the images to be the same format and resolution) and asked it to create an image that graphically showed the differences:
The brighter the pixel in the difference image, the greater the difference between the corresponding pixels in the original images.
GPT Builder suggested the name of the app be 'Images Insight' but I decided on a play on words of that 'Images in Sight'.
You can probably do this directly in ChatGPT without the extra app but I'm experimenting...
Interesting :)
Love those watercolor drawing, is that a custom model or prompt?
You said the magic word... 'watercolor'.
The original prompt should be no surprise: "Frank Frazetta water color painting".
The output is the result of the prompt but I'm definitely trying to angle the prompt as a style... even sometimes adding the word 'style'.
Try that with the neural style as the other styles will tend to exert influence over that prompting.
Here's a random prompt thrown into one of the (randomly picked) Stable Diffusion spaces here on Hugging Face:
The prompt: Extreme Long Shot, frank frazetta watercolor painting style, robot exiting dark tunnel
(I should add here that I just tested this on chatGPT with it's new DallE generation powers and it considers specifically mentioned artists active after 1912 to be off limits according to its policy... and therefore won't generate the image.)
Here's an image generated by prompting without use of Frank Frazetta and focusing more on general watercolor style:
Returning to this topic to reveal a little more of the process behind the difference generation my GPT app used.
It's response allows me to see 'behind the curtain' the code being used to generate the diff (via a little icon designed for that purpose).
Namely the section of python code used for that diff:
diff_image_array = np.abs(np.array(newly_adjusted_images[0]) - np.array(newly_adjusted_images[1]))
# Create an image from the difference array
diff_image = Image.fromarray(diff_image_array.astype('uint8'))
# Save the difference image
diff_image_path = "/mnt/data/difference_image.png"
diff_image.save(diff_image_path)
diff_image_path, diff_image.show()
This building upon code used in previous promptings where I supplied the two images (as attachments):
from PIL import Image
import numpy as np
# Load the images uploaded by the user
image_paths = ["/mnt/data/image - 2023-10-09T021700.618.jfif", "/mnt/data/image - 2023-10-09T021805.962.jfif"]
images = [Image.open(path) for path in image_paths]
# Function to analyze differences between two images
def analyze_images(img1, img2):
# Basic properties
properties = {
'format': [img1.format, img2.format],
'mode': [img1.mode, img2.mode],
'size': [img1.size, img2.size]
}
# Checking if the size is the same for both images
# to allow pixel by pixel comparison
if img1.size == img2.size:
# Convert images to numpy arrays
img1_array = np.array(img1)
img2_array = np.array(img2)
# Calculate the absolute difference between the images
diff_array = np.abs(img1_array - img2_array)
# Calculate the mean difference to get an average change per pixel
mean_diff = np.mean(diff_array)
# Include mean difference in the properties
properties['mean_pixel_difference'] = mean_diff
else:
properties['mean_pixel_difference'] = "N/A - Sizes differ"
return properties
# Analyze the two images
image_analysis = analyze_images(images[0], images[1])
image_analysis
I suppose what excites me about this the most is the opportunity for learning... how to code... how to manipulate imagery... how to approach... to think...
It's been over 10 years since I messed with python and while rusty some of that is coming back to me.