v2.1: clear Studio LoRA defaults; RiftCast fallback widgets hide when a Style node is wired
Browse files- riftcast_generator.py +32 -4
riftcast_generator.py
CHANGED
|
@@ -745,8 +745,18 @@ class RiftCast_CharacterDesigner:
|
|
| 745 |
"age": (AGE, {"default": "mid twenties"}),
|
| 746 |
"ethnicity": (ETHNICITY,),
|
| 747 |
"skin": (SKIN, {"default": "pale"}),
|
| 748 |
-
|
| 749 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 750 |
"height": (HEIGHT, {"default": "average height"}),
|
| 751 |
"build": (BUILD, {"default": "average build"}),
|
| 752 |
"voice": (VOICE, {"default": "a clear voice, natural and unforced"}),
|
|
@@ -755,10 +765,14 @@ class RiftCast_CharacterDesigner:
|
|
| 755 |
"24fps. British/Australian render natively at 25/30fps "
|
| 756 |
"(the fps-accent law) - or at 24fps they lean on the "
|
| 757 |
"wording alone."}),
|
| 758 |
-
"wardrobe": ("STRING", {"default": "a plain dark crewneck shirt"
|
|
|
|
|
|
|
| 759 |
"distinguishing": ("STRING", {"default": "", "tooltip":
|
| 760 |
"optional: thin-framed glasses, a small nose "
|
| 761 |
-
"stud, freckles across the nose..."
|
|
|
|
|
|
|
| 762 |
},
|
| 763 |
"optional": {
|
| 764 |
"style_block": ("STRING", {"forceInput": True, "tooltip":
|
|
@@ -799,6 +813,20 @@ class RiftCast_CharacterDesigner:
|
|
| 799 |
# makeup would contradict it in the same sentence
|
| 800 |
if _sb.get("has_makeup"):
|
| 801 |
realism = realism.replace(", no makeup", "")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 802 |
except Exception as _e:
|
| 803 |
print(f"[RiftCast] style_block unreadable ({_e}); using the "
|
| 804 |
f"Designer's own hair/wardrobe fields.", flush=True)
|
|
|
|
| 745 |
"age": (AGE, {"default": "mid twenties"}),
|
| 746 |
"ethnicity": (ETHNICITY,),
|
| 747 |
"skin": (SKIN, {"default": "pale"}),
|
| 748 |
+
# FALLBACK FOUR. These four duplicate widgets on the Style node and
|
| 749 |
+
# are used ONLY when style_block is unwired (Designer used alone).
|
| 750 |
+
# Wiring a Style node discards them - which was silent, and silent
|
| 751 |
+
# dead controls are the exact "dropdowns appear to do nothing" trap
|
| 752 |
+
# called out at AUDITION ISOLATION below. design() now says so out
|
| 753 |
+
# loud when a wired style overrides one you actually changed.
|
| 754 |
+
"hair_color": (HAIR_COLOR, {"default": "dark brown", "tooltip":
|
| 755 |
+
"FALLBACK - ignored when a Style node is wired to "
|
| 756 |
+
"style_block; set hair colour on the Style node."}),
|
| 757 |
+
"hair_style": (HAIR_STYLE, {"default": "long and loose", "tooltip":
|
| 758 |
+
"FALLBACK - ignored when a Style node is wired to "
|
| 759 |
+
"style_block; set hair shape on the Style node."}),
|
| 760 |
"height": (HEIGHT, {"default": "average height"}),
|
| 761 |
"build": (BUILD, {"default": "average build"}),
|
| 762 |
"voice": (VOICE, {"default": "a clear voice, natural and unforced"}),
|
|
|
|
| 765 |
"24fps. British/Australian render natively at 25/30fps "
|
| 766 |
"(the fps-accent law) - or at 24fps they lean on the "
|
| 767 |
"wording alone."}),
|
| 768 |
+
"wardrobe": ("STRING", {"default": "a plain dark crewneck shirt",
|
| 769 |
+
"tooltip": "FALLBACK - ignored when a Style node is "
|
| 770 |
+
"wired to style_block; set wardrobe on the Style node."}),
|
| 771 |
"distinguishing": ("STRING", {"default": "", "tooltip":
|
| 772 |
"optional: thin-framed glasses, a small nose "
|
| 773 |
+
"stud, freckles across the nose... FALLBACK - "
|
| 774 |
+
"ignored when a Style node is wired; the Style "
|
| 775 |
+
"node has its own distinguishing field."}),
|
| 776 |
},
|
| 777 |
"optional": {
|
| 778 |
"style_block": ("STRING", {"forceInput": True, "tooltip":
|
|
|
|
| 813 |
# makeup would contradict it in the same sentence
|
| 814 |
if _sb.get("has_makeup"):
|
| 815 |
realism = realism.replace(", no makeup", "")
|
| 816 |
+
# Say it out loud, but only when it MATTERS: a field left at its
|
| 817 |
+
# default was never a choice, so warning about it would be noise
|
| 818 |
+
# everyone learns to ignore.
|
| 819 |
+
_shadowed = [n for n, v, dflt in
|
| 820 |
+
(("hair_color", hair_color, "dark brown"),
|
| 821 |
+
("hair_style", hair_style, "long and loose"),
|
| 822 |
+
("wardrobe", wardrobe, "a plain dark crewneck shirt"),
|
| 823 |
+
("distinguishing", distinguishing, ""))
|
| 824 |
+
if (v or "").strip() != dflt]
|
| 825 |
+
if _shadowed:
|
| 826 |
+
print(f"[RiftCast] Style node is wired, so the Designer's "
|
| 827 |
+
f"{', '.join(_shadowed)} {'is' if len(_shadowed)==1 else 'are'} "
|
| 828 |
+
f"IGNORED. Set {'it' if len(_shadowed)==1 else 'them'} "
|
| 829 |
+
f"on the Style node instead.", flush=True)
|
| 830 |
except Exception as _e:
|
| 831 |
print(f"[RiftCast] style_block unreadable ({_e}); using the "
|
| 832 |
f"Designer's own hair/wardrobe fields.", flush=True)
|