Haoming02 / sd-forge-couple

An Extension for Forge Webui that implements Attention Couple
GNU General Public License v3.0
160 stars 8 forks source link

Suggestion: Try to imitate (or 100% copy) Regional draw mode from Multidiffusion #15

Closed altoiddealer closed 2 months ago

altoiddealer commented 2 months ago

Heya, I've been meaning to suggest this... and I was reminded by the fact that you actually just pushed a "Draw the regions" update.

The Multidiffusion extension for A1111 has a very sweet "draw your regions" feature in its Regional Prompt Control panel.

I'm just mentioning this in case you haven't seen it before... if you have not, I strongly recommend you check it out.

Screenshot 2024-04-10 223204
Haoming02 commented 2 months ago

Guess I really should merge #14

Haoming02 commented 2 months ago

Please give the draggable-regions branch a try

Implementation is not exactly the same as MultiDiffusion for better or for worse

altoiddealer commented 2 months ago

Please give the draggable-regions branch a try

Implementation is not exactly the same as MultiDiffusion ~for better or for worse~

Unfortunately, it seems quite buggy, and I much prefer the current implementation in the main branch.

Haoming02 commented 2 months ago

I suggest checking the document first, since well, all of what you said are already mentioned https://github.com/Haoming02/sd-forge-couple/tree/draggable-regions?tab=readme-ov-file#advanced-mapping

altoiddealer commented 2 months ago

I suggest checking the document first, since well, all of what you said are already mentioned https://github.com/Haoming02/sd-forge-couple/tree/draggable-regions?tab=readme-ov-file#advanced-mapping

Read the Readme!? haha

Welp, you got me there. And Now that I understand the usage, it is very nice.

You should add those very important control details in the UI somewhere... otherwise, people like me who think this stuff is all self-explanatory will be scratching their heads

Haoming02 commented 2 months ago

You should add those very important control details in the UI somewhere

Though yeah, I'll probably add like a triangle or something at the bottom right corner

arcusmaximus commented 2 months ago

If a UI has up and down arrows above a grid, I think most users will assume they mean "move row up/down" and not even bother looking at the tooltips. Instead, they'll wonder why there's no "add" button :p

Also, there's no reason for only allowing resize using the bottom right corner. Imagine if windows in an operating system worked that way - would be pretty annoying, no? MultiDiffusion (and my fork) let you drag any corner and any side.

@altoiddealer: I invite you to try my version of a draggable box UI as well. It should be understandable without reading a manual, and makes it easier to see which prompt belongs to which region (screenshot). In addition, it doesn't require you to cover the whole image with regions.

(I previously created a pull request to make this UI official, but Haoming02 sadly doesn't want to merge it. Maybe you can still convince him otherwise heh)

Haoming02 commented 2 months ago

At least the main feature, the actual mapping, works now, while those can be added/changed in later versions. :P

Btw, the last time I tried it, both your fork and MultiDiffusion suffer from the same problem: When 2 masks are on top of each other, you can't really choose which one to move, right?

And ah yes, TypeScript, the language where you need thousands of lines across muiltiple files just to do something that, realistically, only requires few hundred lines in JavaScript... I'll learn TS someday, but that day is not today. (esp. when my main job isn't even web dev) Sorry.

altoiddealer commented 2 months ago

I didn’t try that fork yet (been busy today) but I can see that it really simplifies the complexity of this. I think I phrased that appropriately...

Definitely pros and cons.

Haoming02 commented 2 months ago

Full 8 Directional Resizing has been implemented~

Haoming02 commented 2 months ago

Hints for the corresponding prompt has been implemented~

arcusmaximus commented 2 months ago

If you click a prompt textbox in my fork, the corresponding region will be brought to the front. If you click a partially overlapped region, it will be brought to the front. And if the corner/side you want to drag isn't overlapped, you can immediately start dragging without having to select anything.

What's more, if you click a region, it'll automatically put focus on the corresponding prompt textbox. No need to count rows and find the matching line in the main prompt.

Region prompts are stored in the infotext together with the positions/sizes. There's a small bug where you first have to switch to the Advanced tab and only then load the infotext into the UI - but other than that, you can restore all the information from both an image and from your last generation. The latter doesn't work in the current official version btw.

Typescript isn't hard, and the main reason my fork contains more code is that it does more. And sure, type annotations aren't needed for a small project like this, but they still save you both time and frustration.

Anyway, good to see improvements being made, even if it's just replicating what's already there.

altoiddealer commented 2 months ago

EDIT sorry, just read your reply again and overlooked something you said. That all sounds very good!

MoreColors123 commented 2 months ago

I don't really want to chime in on the language topic because i'm not by any means a dev but just your casual tester :D I just tested the draggable-regions branch for a bit and it works well. (SDXL Lightning)

grafik 00013-3988159980

MoreColors123 commented 2 months ago

What i just found out is that you always need an extra generation for it to apply the last change in a regional prompt. So i think something is gone wrong. For example: i change the prompt from "jungle" to "desert" and it doesn't apply it in the next generation, only in the one afterwards.

Haoming02 commented 2 months ago

If the problem is about their fork, please open an issue on their fork instead :) If the problem also happens here, do open a new issue~

MoreColors123 commented 2 months ago

Oh god i totally mixed them up, all those branches :] Sorry and thanks for your work

arcusmaximus commented 2 months ago

@MoreColors123 That's because the canvas only got updated with the new prompt when clicking outside the textbox. I made it update on every keypress instead, which fixes the problem.