From 844520629cc911eba49977d38157ecd611bb6ad9 Mon Sep 17 00:00:00 2001 From: Fu Lin Date: Sun, 24 Mar 2024 02:20:05 +0800 Subject: [PATCH] node: add prompt node for the default prompt The prompt is from https://huggingface.co/spaces/InstantX/InstantID/blob/main/style_template.py Signed-off-by: Fu Lin --- InstantID.py | 33 +++++++++++++++++++++++++++++ style_template.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 style_template.py diff --git a/InstantID.py b/InstantID.py index fa30b6f..17a8afc 100644 --- a/InstantID.py +++ b/InstantID.py @@ -8,6 +8,7 @@ import PIL.Image from comfy.ldm.modules.attention import optimized_attention from .resampler import Resampler +from .style_template import styles from insightface.app import FaceAnalysis @@ -23,6 +24,9 @@ INSIGHTFACE_DIR = os.path.join(folder_paths.models_dir, "insightface") +STYLE_NAMES = list(styles.keys()) +DEFAULT_STYLE_NAME = "(No style)" + def draw_kps(image_pil, kps, color_list=[(255,0,0), (0,255,0), (0,0,255), (255,255,0), (255,0,255)]): stickwidth = 4 limbSeq = np.array([[0, 2], [1, 2], [3, 2], [4, 2]]) @@ -766,6 +770,33 @@ def apply_controlnet(self, face_embeds, control_net, image_kps, positive, negati return(cond_uncond[0], cond_uncond[1]) +class InstantIDPrompt: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "prompt": ("STRING", {"default": "a woman, retro futurism, retro game", "multiline": True}), + "negative_prompt": ("STRING", {"default": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, painting, drawing, illustration, glitch, deformed, mutated, cross-eyed, ugly", "multiline": True}), + "style_name": (STYLE_NAMES, {"default": DEFAULT_STYLE_NAME}) + } + } + + RETURN_TYPES = ('STRING','STRING',) + RETURN_NAMES = ('positive_prompt','negative_negative',) + FUNCTION = "id_prompt_style" + CATEGORY = "InstantID" + + def apply_style(self, style_name: str, positive: str, negative: str = "") -> tuple[str, str]: + p, n = styles.get(style_name, styles[DEFAULT_STYLE_NAME]) + return p.replace("{prompt}", positive), n + ' ' + negative + + def id_prompt_style(self, style_name, prompt, negative_prompt): + prompt, negative_prompt = self.apply_style(style_name, prompt, negative_prompt) + + return prompt, negative_prompt NODE_CLASS_MAPPINGS = { "InstantIDModelLoader": InstantIDModelLoader, @@ -776,6 +807,7 @@ def apply_controlnet(self, face_embeds, control_net, image_kps, positive, negati "InstantIDAttentionPatch": InstantIDAttentionPatch, "ApplyInstantIDControlNet": ApplyInstantIDControlNet, + "InstantIDPrompt": InstantIDPrompt, } NODE_DISPLAY_NAME_MAPPINGS = { @@ -787,4 +819,5 @@ def apply_controlnet(self, face_embeds, control_net, image_kps, positive, negati "InstantIDAttentionPatch": "InstantID Patch Attention", "ApplyInstantIDControlNet": "InstantID Apply ControlNet", + "InstantIDPrompt": "InstantID Prompt", } diff --git a/style_template.py b/style_template.py new file mode 100644 index 0000000..4375dcc --- /dev/null +++ b/style_template.py @@ -0,0 +1,54 @@ +style_list = [ + { + "name": "(No style)", + "prompt": "{prompt}", + "negative_prompt": "", + }, + { + "name": "Spring Festival", + "prompt": "Flat illustration, a Chinese {prompt}, ancient style, wearing a red cloth, smile face, white skin, clean background, fireworks blooming, red lanterns", + "negative_prompt": "photo, deformed, black and white, realism, disfigured, low contrast, realistic, cropped, worst quality, missing fingers, extra digit, jpeg artifacts, signature, multiple, (lowres, low quality, worst quality:1.2)", + }, + { + "name": "Watercolor", + "prompt": "watercolor painting, {prompt}. vibrant, beautiful, painterly, detailed, textural, artistic", + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, anime, photorealistic, 35mm film, deformed, glitch, low contrast, noisy", + }, + { + "name": "Film Noir", + "prompt": "film noir style, ink sketch|vector, {prompt} highly detailed, sharp focus, ultra sharpness, monochrome, high contrast, dramatic shadows, 1940s style, mysterious, cinematic", + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, photo, pet collar, gun, weapon, blue, 3d, drones, drone, buildings in background, green", + }, + { + "name": "Neon", + "prompt": "masterpiece painting, buildings in the backdrop, kaleidoscope, lilac orange blue cream fuchsia bright vivid gradient colors, the scene is cinematic, {prompt}, emotional realism, double exposure, watercolor ink pencil, graded wash, color layering, magic realism, figurative painting, intricate motifs, organic tracery, polished", + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, photo, pet collar, gun, weapon, blue, 3d, drones, drone, buildings in background, green", + }, + { + "name": "Jungle", + "prompt": 'waist-up "{prompt} in a Jungle" by Syd Mead, tangerine cold color palette, muted colors, detailed, 8k,photo r3al,dripping paint,3d toon style,3d style,Movie Still', + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, photo, pet collar, gun, weapon, blue, 3d, drones, drone, buildings in background, green", + }, + { + "name": "Mars", + "prompt": "{prompt}, Post-apocalyptic. Mars Colony, Scavengers roam the wastelands searching for valuable resources, rovers, bright morning sunlight shining, (detailed) (intricate) (8k) (HDR) (cinematic lighting) (sharp focus)", + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, photo, pet collar, gun, weapon, blue, 3d, drones, drone, buildings in background, green", + }, + { + "name": "Vibrant Color", + "prompt": "vibrant colorful, ink sketch|vector|2d colors, at nightfall, sharp focus, {prompt}, highly detailed, sharp focus, the clouds,colorful,ultra sharpness", + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, photo, pet collar, gun, weapon, blue, 3d, drones, drone, buildings in background, green", + }, + { + "name": "Snow", + "prompt": "cinema 4d render, {prompt}, high contrast, vibrant and saturated, sico style, surrounded by magical glow,floating ice shards, snow crystals, cold, windy background, frozen natural landscape in background cinematic atmosphere,highly detailed, sharp focus, intricate design, 3d, unreal engine, octane render, CG best quality, highres, photorealistic, dramatic lighting, artstation, concept art, cinematic, epic Steven Spielberg movie still, sharp focus, smoke, sparks, art by pascal blanche and greg rutkowski and repin, trending on artstation, hyperrealism painting, matte painting, 4k resolution", + "negative_prompt": "(lowres, low quality, worst quality:1.2), (text:1.2), watermark, (frame:1.2), deformed, ugly, deformed eyes, blur, out of focus, blurry, deformed cat, deformed, photo, anthropomorphic cat, monochrome, photo, pet collar, gun, weapon, blue, 3d, drones, drone, buildings in background, green", + }, + { + "name": "Line art", + "prompt": "line art drawing {prompt} . professional, sleek, modern, minimalist, graphic, line art, vector graphics", + "negative_prompt": "anime, photorealistic, 35mm film, deformed, glitch, blurry, noisy, off-center, deformed, cross-eyed, closed eyes, bad anatomy, ugly, disfigured, mutated, realism, realistic, impressionism, expressionism, oil, acrylic", + }, +] + +styles = {k["name"]: (k["prompt"], k["negative_prompt"]) for k in style_list} \ No newline at end of file