| import os |
| import random |
| import time |
| import json |
| import shutil |
| from datetime import datetime |
|
|
| class ZImageJSONPrompting: |
| |
| OPTION_DATA = { |
| "scene": { |
| "scene_description.txt": [ |
| "霓虹閃爍的賽博朋克街道 | Neon-lit cyberpunk street", |
| "寧靜的日式庭院 | Tranquil Japanese garden", |
| "繁忙的現代都市街頭 | Busy modern city street", |
| "神秘的遠古遺跡 | Mysterious ancient ruins", |
| "夢幻的童話森林 | Enchanted fairy tale forest", |
| "科幻的太空站內景 | Sci-fi space station interior", |
| "古典的歐洲城堡大廳 | Classical European castle hall", |
| "炎熱的沙漠綠洲 | Hot desert oasis", |
| "寒冷的北極冰川 | Cold arctic glacier", |
| "雨後的都市夜景 | City night scene after rain", |
| "霧氣瀰漫的山林小徑 | Misty mountain forest path", |
| "繁華的夜市小吃街 | Bustling night market street", |
| "廢棄的工業廠房 | Abandoned industrial factory", |
| "未來主義的實驗室 | Futuristic laboratory", |
| "熱帶海島沙灘 | Tropical island beach", |
| "秋天的楓葉公園 | Autumn maple leaf park", |
| "星空下的草原 | Grassland under starry sky", |
| "水下珊瑚礁世界 | Underwater coral reef world", |
| "蒸汽龐克風格城市 | Steampunk-style city", |
| "末日後的廢墟都市 | Post-apocalyptic ruined city", |
| "魔幻的空中浮島 | Magical floating island in sky", |
| "傳統的中式古鎮 | Traditional Chinese ancient town", |
| "現代的購物中心 | Modern shopping mall", |
| "寧靜的圖書館內景 | Quiet library interior", |
| "熱鬧的音樂節現場 | Lively music festival scene" |
| ], |
| "time_atmosphere.txt": [ |
| "黃金時刻的溫暖陽光 | Warm sunlight during golden hour", |
| "深夜的神秘月光 | Mysterious moonlight late at night", |
| "午後的柔和光線 | Soft afternoon light", |
| "黎明的曙光微露 | First light of dawn", |
| "黃昏的浪漫餘暉 | Romantic glow of dusk", |
| "正午的強烈陽光 | Strong midday sunlight", |
| "暴風雨前的壓抑氛圍 | Oppressive atmosphere before storm", |
| "霧氣瀰漫的清晨 | Misty morning", |
| "晴朗無雲的藍天 | Clear cloudless blue sky", |
| "多雲的陰天光線 | Cloudy overcast light", |
| "暴雨中的模糊景象 | Blurred scene in heavy rain", |
| "薄霧籠罩的夜晚 | Thin fog shrouded night", |
| "夕陽西下的剪影 | Silhouette at sunset", |
| "月光如水灑落 | Moonlight shining like water", |
| "清晨露珠晶瑩 | Morning dew sparkling", |
| "午後雷陣雨後 | Afternoon after thunderstorm", |
| "深夜街燈昏黃 | Late night street lamps dim yellow", |
| "極光舞動的天空 | Aurora dancing in the sky", |
| "煙火綻放的夜晚 | Fireworks blooming night", |
| "燭光搖曳的室內 | Candlelight flickering indoors", |
| "霓虹燈閃爍的雨夜 | Neon lights flickering on rainy night", |
| "日出時分的寧靜 | Peaceful at sunrise", |
| "日落時分的溫暖 | Warm at sunset", |
| "午夜的神秘時刻 | Mysterious midnight moment", |
| "午夜的寂靜時刻 | Silent midnight moment" |
| ], |
| "environment_setting.txt": [ |
| "潮濕的街道反射燈光 | Wet streets reflecting lights", |
| "乾燥的沙漠風吹沙粒 | Dry desert with blowing sand", |
| "綠意盎然的自然環境 | Lush green natural environment", |
| "鋼筋混凝土的都市叢林 | Concrete jungle of the city", |
| "水晶般清澈的水下世界 | Crystal clear underwater world", |
| "煙霧繚繞的神秘空間 | Smoke-filled mysterious space", |
| "積雪覆蓋的冬日景觀 | Snow-covered winter landscape", |
| "落葉繽紛的秋季公園 | Autumn park with falling leaves", |
| "花卉盛開的春季花園 | Spring garden in full bloom", |
| "高科技的未來實驗室 | High-tech futuristic laboratory", |
| "藤蔓纏繞的古老建築 | Vine-covered ancient building", |
| "玻璃幕牆的現代大樓 | Glass curtain wall modern building", |
| "鵝卵石鋪成的古老街道 | Cobblestone ancient street", |
| "金屬結構的工業廠房 | Metal structured industrial factory", |
| "雲端之上的高樓頂部 | Top of skyscraper above clouds", |
| "地下洞穴的神秘空間 | Mysterious underground cave", |
| "廢棄車輛堆積的場地 | Abandoned vehicle scrap yard", |
| "鮮花裝飾的婚禮現場 | Flower-decorated wedding venue", |
| "書籍堆積的古老書房 | Book-filled ancient study", |
| "科技感十足的指揮中心 | High-tech command center", |
| "原始自然的叢林深處 | Deep in primitive jungle", |
| "繁忙的交通十字路口 | Busy traffic intersection", |
| "寧靜的湖畔小屋旁 | By peaceful lakeside cabin", |
| "擁擠的地鐵站內部 | Crowded subway station interior", |
| "開闊的山頂觀景台 | Open mountaintop viewing platform" |
| ] |
| }, |
| "subject": { |
| "character_features.txt": [ |
| "年輕的亞洲男性 | Young Asian male", |
| "優雅的歐洲女性 | Elegant European female", |
| "中年的非裔商人 | Middle-aged African businessman", |
| "年長的智者形象 | Elderly wise figure", |
| "活潑的拉丁裔青年 | Lively Latino youth", |
| "神秘的蒙面人物 | Mysterious masked figure", |
| "強壯的運動員體格 | Strong athletic build", |
| "纖細的舞者身材 | Slender dancer's physique", |
| "華麗的奇幻種族 | Lavish fantasy race", |
| "簡約的現代上班族 | Minimalist modern office worker", |
| "可愛的兒童形象 | Cute child figure", |
| "性感的模特兒身材 | Sexy model physique", |
| "威武的軍人形象 | Majestic soldier figure", |
| "慈祥的老奶奶 | Kindly old grandmother", |
| "叛逆的青少年 | Rebellious teenager", |
| "自信的企業家 | Confident entrepreneur", |
| "害羞的學生 | Shy student", |
| "狂野的搖滾樂手 | Wild rock musician", |
| "優雅的芭蕾舞者 | Graceful ballet dancer", |
| "強悍的武術家 | Tough martial artist", |
| "神秘的巫師 | Mysterious wizard", |
| "帥氣的機車騎士 | Handsome motorcycle rider", |
| "美麗的精靈族 | Beautiful elf race", |
| "強壯的半獸人 | Strong orc race", |
| "可愛的獸人族 | Cute beast race" |
| ], |
| "clothing_style.txt": [ |
| "黑色皮夾克配牛仔褲 | Black leather jacket with jeans", |
| "優雅的晚禮服長裙 | Elegant evening gown", |
| "實用的戶外探險裝備 | Practical outdoor exploration gear", |
| "傳統的民族服飾 | Traditional ethnic clothing", |
| "未來的科技感服裝 | Futuristic tech-style clothing", |
| "休閒的運動服套裝 | Casual sportswear set", |
| "正式的西裝領帶 | Formal suit and tie", |
| "奇幻的魔法師長袍 | Fantasy mage robe", |
| "復古的搖滾風格 | Retro rock style", |
| "極簡的單色搭配 | Minimalist monochrome outfit", |
| "華麗的宮廷禮服 | Lavish court dress", |
| "破舊的流浪者服裝 | Tattered流浪者clothing", |
| "專業的廚師制服 | Professional chef uniform", |
| "性感的比基尼泳裝 | Sexy bikini swimwear", |
| "溫暖的冬季大衣 | Warm winter coat", |
| "輕便的夏日洋裝 | Light summer dress", |
| "軍裝風格外套 | Military style jacket", |
| "學生制服 | School uniform", |
| "婚紗禮服 | Wedding dress", |
| "睡衣家居服 | Pajamas homewear", |
| "皮革盔甲裝備 | Leather armor equipment", |
| "科幻太空服 | Sci-fi spacesuit", |
| "傳統和服 | Traditional kimono", |
| "印度紗麗 | Indian sari", |
| "阿拉伯長袍 | Arabic thobe" |
| ], |
| "pose_expression.txt": [ |
| "站立微笑看向鏡頭 | Standing smiling at camera", |
| "坐姿沉思看向遠方 | Sitting contemplating into distance", |
| "奔跑中的動態姿勢 | Dynamic pose while running", |
| "跳躍的瞬間捕捉 | Mid-jump moment captured", |
| "倚靠物體的放鬆姿勢 | Relaxed pose leaning on object", |
| "戰鬥準備的緊張姿態 | Tense combat-ready stance", |
| "舞蹈中的優雅動作 | Elegant movement while dancing", |
| "工作中的專注神情 | Focused expression while working", |
| "驚訝的自然反應 | Natural surprised reaction", |
| "憤怒的強烈情緒表達 | Strong expression of anger", |
| "悲傷的低頭姿勢 | Sad低头pose", |
| "快樂的跳躍姿勢 | Happy jumping pose", |
| "思考的托腮動作 | Thinking with chin in hand", |
| "指揮的專注神情 | Conducting with专注expression", |
| "閱讀的安靜姿態 | Quiet reading posture", |
| "演奏樂器的投入表情 | Engaged expression playing instrument", |
| "繪畫的創作姿勢 | Creative painting posture", |
| "瑜伽的伸展動作 | Yoga stretching pose", |
| "親吻的浪漫時刻 | Romantic kissing moment", |
| "擁抱的溫暖姿勢 | Warm hugging pose", |
| "指向前方的動作 | Pointing forward动作", |
| "揮手打招呼 | Waving hello", |
| "跪下的虔誠姿態 | Kneeling虔诚posture", |
| "躺下的放鬆姿勢 | Lying down relaxed pose", |
| "飛翔的幻想姿勢 | Flying fantasy pose" |
| ] |
| }, |
| "photography": { |
| "lens_parameters.txt": [ |
| "35mm f/1.4 廣角鏡頭 | 35mm f/1.4 wide-angle lens", |
| "85mm f/1.8 人像鏡頭 | 85mm f/1.8 portrait lens", |
| "24-70mm f/2.8 變焦鏡頭 | 24-70mm f/2.8 zoom lens", |
| "50mm f/1.2 標準鏡頭 | 50mm f/1.2 standard lens", |
| "135mm f/2.0 長焦鏡頭 | 135mm f/2.0 telephoto lens", |
| "16-35mm f/4.0 超廣角 | 16-35mm f/4.0 ultra-wide angle", |
| "70-200mm f/2.8 遠攝鏡頭 | 70-200mm f/2.8 telephoto zoom", |
| "微距鏡頭 f/2.8 | Macro lens f/2.8", |
| "魚眼鏡頭 8mm f/3.5 | Fisheye lens 8mm f/3.5", |
| "移軸鏡頭 45mm f/2.8 | Tilt-shift lens 45mm f/2.8", |
| "24mm f/1.4 超廣角大光圈 | 24mm f/1.4 ultra-wide aperture", |
| "200mm f/2.0 長焦大光圈 | 200mm f/2.0 telephoto大光圈", |
| "14mm f/2.8 超廣角鏡頭 | 14mm f/2.8 ultra-wide lens", |
| "400mm f/2.8 超長焦鏡頭 | 400mm f/2.8 super telephoto", |
| "50mm f/0.95 超大光圈 | 50mm f/0.95超大光圈", |
| "100mm f/2.8 微距鏡頭 | 100mm f/2.8 macro lens", |
| "28-75mm f/2.8 標準變焦 | 28-75mm f/2.8 standard zoom", |
| "150-600mm f/5-6.3 超長變焦 | 150-600mm f/5-6.3 super zoom", |
| "20mm f/1.8 廣角大光圈 | 20mm f/1.8 wide-angle大光圈", |
| "300mm f/4.0 長焦定焦 | 300mm f/4.0 telephoto prime", |
| "10-20mm f/4.5-5.6 超廣變焦 | 10-20mm f/4.5-5.6 ultra-wide zoom", |
| "58mm f/1.2 特殊標準鏡 | 58mm f/1.2 special standard lens", |
| "180mm f/3.5 微距鏡頭 | 180mm f/3.5 macro lens", |
| "8-15mm f/4.0 魚眼變焦 | 8-15mm f/4.0 fisheye zoom", |
| "600mm f/4.0 超長焦定焦 | 600mm f/4.0 super telephoto prime" |
| ], |
| "shooting_angle.txt": [ |
| "低角度仰拍 | Low angle looking up", |
| "高角度俯拍 | High angle looking down", |
| "水平視角 | Eye-level perspective", |
| "鳥瞰視角 | Bird's-eye view", |
| "蟲視角 | Worm's-eye view", |
| "傾斜的荷蘭角 | Dutch angle tilt", |
| "過肩拍攝角度 | Over-the-shoulder angle", |
| "正面特寫角度 | Front close-up angle", |
| "側面輪廓角度 | Side profile angle", |
| "第一人稱視角 | First-person perspective", |
| "微距特寫角度 | Macro close-up angle", |
| "廣角全景視角 | Wide-angle panoramic view", |
| "長焦壓縮視角 | Telephoto compressed perspective", |
| "運動跟拍視角 | Motion tracking shot", |
| "滑軌移動視角 | Slider moving perspective", |
| "升降鏡頭視角 | Crane shot perspective", |
| "搖臂鏡頭視角 | Jib arm shot perspective", |
| "手持晃動視角 | Handheld shaky perspective", |
| "航拍空中視角 | Aerial drone perspective", |
| "水下拍攝視角 | Underwater shooting perspective", |
| "窺視視角 | Peeking perspective", |
| "反射鏡面視角 | Reflective mirror perspective", |
| "框架構圖視角 | Framed composition perspective", |
| "傾斜地平線視角 | Tilted horizon perspective", |
| "極低角度視角 | Extreme low angle perspective" |
| ], |
| "film_style.txt": [ |
| "富士 Velvia 鮮豔色彩 | Fuji Velvia vivid colors", |
| "柯達 Portra 柔和膚色 | Kodak Portra soft skin tones", |
| "黑白 Tri-X 高對比 | Black & white Tri-X high contrast", |
| "電影膠片 5219 電影感 | Motion picture film 5219 cinematic look", |
| "復古 Polaroid 即時顯影 | Vintage Polaroid instant film", |
| "過期膠片 懷舊色彩 | Expired film nostalgic colors", |
| "Ektachrome 幻燈片風格 | Ektachrome slide film style", |
| "Cinestill 800T 電影夜拍 | Cinestill 800T cinematic night", |
| "Ilford HP5 黑白顆粒 | Ilford HP5 black & white grain", |
| "Provia 100F 自然色彩 | Provia 100F natural colors", |
| "柯達 Gold 200 溫暖色調 | Kodak Gold 200 warm tones", |
| "富士 Pro 400H 柔和對比 | Fuji Pro 400H soft contrast", |
| "柯達 Ektar 100 鮮豔飽和 | Kodak Ektar 100 vibrant saturation", |
| "黑白 Ilford Delta 3200 高感光 | B&W Ilford Delta 3200 high ISO", |
| "電影膠片 500T tungsten平衡 | Movie film 500T tungsten balance", |
| "富士 Superia 400 日常色彩 | Fuji Superia 400日常colors", |
| "柯達 T-Max 100 細膩顆粒 | Kodak T-Max 100 fine grain", |
| "復古 Agfa Vista 鮮明色彩 | Vintage Agfa Vista鲜明colors", |
| "電影膠片 250D 日光平衡 | Movie film 250D daylight balance", |
| "黑白 Rollei Retro 特殊色調 | B&W Rollei Retro special tones", |
| "富士 Natura 1600 高感光 | Fuji Natura 1600 high ISO", |
| "柯達 ColorPlus 200 經濟型 | Kodak ColorPlus 200 economical", |
| "電影膠片 50D 細膩畫質 | Movie film 50D fine quality", |
| "黑白 Fomapan 400 經典顆粒 | B&W Fomapan 400 classic grain", |
| "富士 Acros 100II 黑白細膩 | Fuji Acros 100II B&W fine detail" |
| ] |
| }, |
| "lighting": { |
| "light_source_type.txt": [ |
| "自然日光 | Natural daylight", |
| "月光與星光 | Moonlight and starlight", |
| "霓虹燈光 | Neon lights", |
| "燭光與火光 | Candlelight and firelight", |
| "LED燈帶光線 | LED strip lighting", |
| "熒光燈管照明 | Fluorescent tube lighting", |
| "鎢絲燈溫暖光 | Tungsten warm lighting", |
| "RGB彩色燈光 | RGB colored lighting", |
| "聚光燈效果 | Spotlight effect", |
| "柔光箱擴散光 | Softbox diffused light", |
| "窗戶自然光 | Window natural light", |
| "車燈光線 | Car headlights", |
| "手機螢幕光 | Smartphone screen light", |
| "電視螢幕光 | TV screen light", |
| "電腦螢幕光 | Computer monitor light", |
| "路燈照明 | Street lamp lighting", |
| "舞台燈光 | Stage lighting", |
| "攝影棚閃光燈 | Studio strobe lighting", |
| "手電筒光束 | Flashlight beam", |
| "投影機光線 | Projector light", |
| "激光光束 | Laser beam", |
| "螢光棒光線 | Glow stick light", |
| "油燈光線 | Oil lamp light", |
| "煤氣燈光 | Gas lamp light", |
| "LED大屏幕光 | LED big screen light" |
| ], |
| "light_effect.txt": [ |
| "柔和的擴散光線 | Soft diffused lighting", |
| "強烈的直射光線 | Strong direct lighting", |
| "戲劇性的側光 | Dramatic side lighting", |
| "神秘的逆光效果 | Mysterious backlighting", |
| "均勻的正面光 | Even front lighting", |
| "創意的輪廓光 | Creative rim lighting", |
| "自然的光線衰減 | Natural light falloff", |
| "動態的光影變化 | Dynamic light and shadow play", |
| "反射的間接光線 | Reflected indirect lighting", |
| "多光源混合照明 | Mixed multi-source lighting", |
| "漸變過渡光效 | Gradient transition lighting", |
| "斑駁的光影效果 | Dappled light and shadow", |
| "強烈的對比光影 | Strong contrast light and shadow", |
| "柔和的過渡陰影 | Soft transitional shadows", |
| "硬朗的清晰陰影 | Hard clear shadows", |
| "霧氣中的漫射光 | Diffused light in fog", |
| "水面的反射光 | Reflective light on water", |
| "玻璃的折射光 | Refracted light through glass", |
| "金屬的反光效果 | Metallic reflective effect", |
| "皮膚的次表面散射 | Skin subsurface scattering", |
| "頭髮的邊緣光 | Hair rim light", |
| "眼睛的反射光 | Eye reflection light", |
| "衣服的材質光感 | Clothing material lighting", |
| "環境的全局照明 | Environmental global illumination", |
| "體積光的上帝光 | Volumetric god rays" |
| ], |
| "contrast_level.txt": [ |
| "高對比強光影 | High contrast with strong shadows", |
| "低對比柔和過渡 | Low contrast with soft transitions", |
| "中等對比平衡 | Medium contrast balanced", |
| "極高對比黑白 | Extreme contrast black and white", |
| "細膩的微對比 | Subtle micro-contrast", |
| "動態範圍廣 | Wide dynamic range", |
| "壓縮的暗部細節 | Compressed shadow details", |
| "保留亮部細節 | Preserved highlight details", |
| "S曲線對比調整 | S-curve contrast adjustment", |
| "自然對比還原 | Natural contrast reproduction", |
| "柔和的低對比 | Soft low contrast", |
| "鮮明的中高對比 | Distinct medium-high contrast", |
| "強烈的戲劇對比 | Strong dramatic contrast", |
| "細膩的高光過渡 | Subtle highlight transition", |
| "深沉的陰影層次 | Deep shadow gradation", |
| "明亮的整體調性 | Bright overall tonality", |
| "暗調的氛圍感 | Dark tone atmosphere", |
| "中灰色調平衡 | Medium gray tone balance", |
| "高動態範圍保留 | High dynamic range preservation", |
| "膠片曲線對比 | Film curve contrast", |
| "數位平面對比 | Digital flat contrast", |
| "電影風格對比 | Cinematic style contrast", |
| "復古褪色對比 | Vintage faded contrast", |
| "清新通透對比 | Fresh transparent contrast", |
| "厚重質感對比 | Heavy texture contrast" |
| ] |
| }, |
| "style": { |
| "art_style.txt": [ |
| "賽博朋克風格 | Cyberpunk style", |
| "蒸汽龐克風格 | Steampunk style", |
| "奇幻藝術風格 | Fantasy art style", |
| "超現實主義 | Surrealism style", |
| "極簡主義風格 | Minimalist style", |
| "印象派風格 | Impressionist style", |
| "寫實主義風格 | Realism style", |
| "卡通動畫風格 | Cartoon animation style", |
| "油畫藝術風格 | Oil painting style", |
| "水彩藝術風格 | Watercolor style", |
| "像素藝術風格 | Pixel art style", |
| "塗鴉藝術風格 | Graffiti art style", |
| "復古插畫風格 | Retro illustration style", |
| "科幻未來風格 | Sci-fi futuristic style", |
| "恐怖驚悚風格 | Horror thriller style", |
| "浪漫唯美風格 | Romantic aesthetic style", |
| "抽象藝術風格 | Abstract art style", |
| "概念藝術風格 | Concept art style", |
| "日式動漫風格 | Japanese anime style", |
| "美式漫畫風格 | American comic style", |
| "迪士尼動畫風格 | Disney animation style", |
| "吉卜力動畫風格 | Ghibli animation style", |
| "新藝術運動風格 | Art Nouveau style", |
| "裝飾藝術風格 | Art Deco style", |
| "巴洛克藝術風格 | Baroque art style" |
| ], |
| "color_scheme.txt": [ |
| "青橙配色方案 | Teal and orange color scheme", |
| "霓虹色彩搭配 | Neon color palette", |
| "單色調配方案 | Monochromatic color scheme", |
| "柔和粉彩色調 | Soft pastel colors", |
| "鮮豔飽和色彩 | Vibrant saturated colors", |
| "復古褪色色彩 | Vintage faded colors", |
| "黑白高對比 | Black and white high contrast", |
| "冷暖色調對比 | Warm and cool color contrast", |
| "金屬色系搭配 | Metallic color palette", |
| "自然大地色調 | Natural earth tones", |
| "糖果色系搭配 | Candy color palette", |
| "莫蘭迪色系 | Morandi color palette", |
| "馬卡龍色系 | Macaron color palette", |
| "賽博朋克色系 | Cyberpunk color scheme", |
| "蒸汽龐克色系 | Steampunk color scheme", |
| "奇幻魔法色系 | Fantasy magic color scheme", |
| "科幻未來色系 | Sci-fi futuristic color scheme", |
| "恐怖暗黑色系 | Horror dark color scheme", |
| "浪漫粉色系 | Romantic pink color scheme", |
| "清新藍綠色系 | Fresh aqua color scheme", |
| "溫暖橙黃色系 | Warm orange-yellow color scheme", |
| "冷靜藍紫色系 | Cool blue-purple color scheme", |
| "自然綠色系 | Natural green color scheme", |
| "奢華金黑色系 | Luxury gold-black color scheme", |
| "復古褐黃色系 | Vintage sepia color scheme" |
| ], |
| "render_effects.txt": [ |
| "全局照明效果 | Global illumination effect", |
| "景深模糊效果 | Depth of field blur effect", |
| "動態模糊效果 | Motion blur effect", |
| "體積霧效果 | Volumetric fog effect", |
| "鏡頭光暈效果 | Lens flare effect", |
| "色差效果 | Chromatic aberration effect", |
| "電影顆粒效果 | Cinematic film grain", |
| "光線追蹤反射 | Ray-traced reflections", |
| "次表面散射 | Subsurface scattering", |
| "環境光遮蔽 | Ambient occlusion", |
| "運動模糊效果 | Motion blur effect", |
| "散景效果 | Bokeh effect", |
| "眩光效果 | Glare effect", |
| "漏光效果 | Light leak effect", |
| "暗角效果 | Vignetting effect", |
| "銳化效果 | Sharpening effect", |
| "模糊效果 | Blur effect", |
| "馬賽克效果 | Mosaic effect", |
| "像素化效果 | Pixelation effect", |
| "故障藝術效果 | Glitch art effect", |
| "雙重曝光效果 | Double exposure effect", |
| "HDR效果 | HDR effect", |
| "漫畫網點效果 | Comic halftone effect", |
| "素描線條效果 | Sketch line effect", |
| "水墨渲染效果 | Ink wash rendering effect" |
| ] |
| } |
| } |
| |
| |
| DEFAULT_TEMPLATES = { |
| "cyberpunk": { |
| "name": "賽博朋克 | Cyberpunk", |
| "fields": { |
| "scene_description": "霓虹閃爍的賽博朋克街道 | Neon-lit cyberpunk street", |
| "time_atmosphere": "深夜的神秘月光 | Mysterious moonlight late at night", |
| "color_scheme": "青橙配色方案 | Teal and orange color scheme", |
| "art_style": "賽博朋克風格 | Cyberpunk style", |
| "light_source_type": "霓虹燈光 | Neon lights", |
| "render_effects": "鏡頭光暈效果 | Lens flare effect" |
| } |
| }, |
| "fantasy_magic": { |
| "name": "奇幻魔法 | Fantasy Magic", |
| "fields": { |
| "scene_description": "夢幻的童話森林 | Enchanted fairy tale forest", |
| "time_atmosphere": "霧氣瀰漫的清晨 | Misty morning", |
| "color_scheme": "柔和粉彩色調 | Soft pastel colors", |
| "art_style": "奇幻藝術風格 | Fantasy art style", |
| "light_source_type": "自然日光 | Natural daylight", |
| "render_effects": "體積霧效果 | Volumetric fog effect" |
| } |
| }, |
| "sci_fi_futuristic": { |
| "name": "科幻未來 | Sci-fi Futuristic", |
| "fields": { |
| "scene_description": "科幻的太空站內景 | Sci-fi space station interior", |
| "time_atmosphere": "多雲的陰天光線 | Cloudy overcast light", |
| "color_scheme": "金屬色系搭配 | Metallic color palette", |
| "art_style": "科幻未來風格 | Sci-fi futuristic style", |
| "light_source_type": "LED燈帶光線 | LED strip lighting", |
| "render_effects": "光線追蹤反射 | Ray-traced reflections" |
| } |
| }, |
| "retro_vintage": { |
| "name": "復古懷舊 | Retro Vintage", |
| "fields": { |
| "scene_description": "古典的歐洲城堡大廳 | Classical European castle hall", |
| "time_atmosphere": "黃金時刻的溫暖陽光 | Warm sunlight during golden hour", |
| "color_scheme": "復古褪色色彩 | Vintage faded colors", |
| "art_style": "復古插畫風格 | Retro illustration style", |
| "light_source_type": "燭光與火光 | Candlelight and firelight", |
| "render_effects": "電影顆粒效果 | Cinematic film grain" |
| } |
| }, |
| "natural_realism": { |
| "name": "自然寫實 | Natural Realism", |
| "fields": { |
| "scene_description": "綠意盎然的自然環境 | Lush green natural environment", |
| "time_atmosphere": "午後的柔和光線 | Soft afternoon light", |
| "color_scheme": "自然大地色調 | Natural earth tones", |
| "art_style": "寫實主義風格 | Realism style", |
| "light_source_type": "自然日光 | Natural daylight", |
| "render_effects": "全局照明效果 | Global illumination effect" |
| } |
| }, |
| "minimalism": { |
| "name": "極簡主義 | Minimalism", |
| "fields": { |
| "scene_description": "簡約的現代室內空間 | Minimalist modern interior", |
| "time_atmosphere": "均勻的正面光 | Even front lighting", |
| "color_scheme": "單色調配方案 | Monochromatic color scheme", |
| "art_style": "極簡主義風格 | Minimalist style", |
| "light_source_type": "柔光箱擴散光 | Softbox diffused light", |
| "render_effects": "環境光遮蔽 | Ambient occlusion" |
| } |
| }, |
| "cinematic_portrait": { |
| "name": "電影人像 | Cinematic Portrait", |
| "fields": { |
| "scene_description": "戲劇性的室內場景 | Dramatic indoor scene", |
| "time_atmosphere": "戲劇性的側光 | Dramatic side lighting", |
| "color_scheme": "冷暖色調對比 | Warm and cool color contrast", |
| "art_style": "電影風格 | Cinematic style", |
| "light_source_type": "聚光燈效果 | Spotlight effect", |
| "render_effects": "景深模糊效果 | Depth of field blur effect" |
| } |
| }, |
| "street_fashion": { |
| "name": "街頭潮流 | Street Fashion", |
| "fields": { |
| "scene_description": "繁忙的現代都市街頭 | Busy modern city street", |
| "time_atmosphere": "雨後的都市夜景 | City night scene after rain", |
| "color_scheme": "霓虹色彩搭配 | Neon color palette", |
| "art_style": "塗鴉藝術風格 | Graffiti art style", |
| "light_source_type": "RGB彩色燈光 | RGB colored lighting", |
| "render_effects": "動態模糊效果 | Motion blur effect" |
| } |
| }, |
| "anime_manga": { |
| "name": "日式動漫 | Anime Manga", |
| "fields": { |
| "scene_description": "精緻的日式動漫場景 | Exquisite anime manga scene", |
| "time_atmosphere": "晴朗無雲的藍天 | Clear cloudless blue sky", |
| "color_scheme": "鮮豔飽和色彩 | Vibrant saturated colors", |
| "art_style": "日式動漫風格 | Japanese anime style", |
| "light_source_type": "自然日光 | Natural daylight", |
| "render_effects": "卡通動畫效果 | Cartoon animation effect" |
| } |
| }, |
| "steampunk": { |
| "name": "蒸汽龐克 | Steampunk", |
| "fields": { |
| "scene_description": "蒸汽龐克風格城市 | Steampunk-style city", |
| "time_atmosphere": "薄霧籠罩的夜晚 | Thin fog shrouded night", |
| "color_scheme": "復古褐黃色系 | Vintage sepia color scheme", |
| "art_style": "蒸汽龐克風格 | Steampunk style", |
| "light_source_type": "煤氣燈光 | Gas lamp light", |
| "render_effects": "電影顆粒效果 | Cinematic film grain" |
| } |
| }, |
| "horror_thriller": { |
| "name": "恐怖驚悚 | Horror Thriller", |
| "fields": { |
| "scene_description": "廢棄的工業廠房 | Abandoned industrial factory", |
| "time_atmosphere": "暴風雨前的壓抑氛圍 | Oppressive atmosphere before storm", |
| "color_scheme": "恐怖暗黑色系 | Horror dark color scheme", |
| "art_style": "恐怖驚悚風格 | Horror thriller style", |
| "light_source_type": "手電筒光束 | Flashlight beam", |
| "render_effects": "暗角效果 | Vignetting effect" |
| } |
| }, |
| "romantic_aesthetic": { |
| "name": "浪漫唯美 | Romantic Aesthetic", |
| "fields": { |
| "scene_description": "花卉盛開的春季花園 | Spring garden in full bloom", |
| "time_atmosphere": "黃昏的浪漫餘暉 | Romantic glow of dusk", |
| "color_scheme": "浪漫粉色系 | Romantic pink color scheme", |
| "art_style": "浪漫唯美風格 | Romantic aesthetic style", |
| "light_source_type": "燭光與火光 | Candlelight and firelight", |
| "render_effects": "柔光效果 | Soft light effect" |
| } |
| }, |
| "watercolor_art": { |
| "name": "水彩藝術 | Watercolor Art", |
| "fields": { |
| "scene_description": "夢幻的水彩畫風格場景 | Dreamy watercolor art scene", |
| "time_atmosphere": "霧氣瀰漫的清晨 | Misty morning", |
| "color_scheme": "柔和粉彩色調 | Soft pastel colors", |
| "art_style": "水彩藝術風格 | Watercolor style", |
| "light_source_type": "自然日光 | Natural daylight", |
| "render_effects": "水墨渲染效果 | Ink wash rendering effect" |
| } |
| } |
| } |
|
|
| @classmethod |
| def initialize_options_dir(cls): |
| """初始化選項目錄和檔案""" |
| options_dir = os.path.join(os.path.dirname(__file__), "z_image_options") |
| |
| |
| if not os.path.exists(options_dir): |
| os.makedirs(options_dir) |
| print(f"[Z-Image] 已創建選項目錄: {options_dir}") |
| |
| |
| for group in cls.OPTION_DATA.keys(): |
| group_dir = os.path.join(options_dir, group) |
| if not os.path.exists(group_dir): |
| os.makedirs(group_dir) |
| print(f"[Z-Image] 已創建分組目錄: {group_dir}") |
| |
| |
| for group_name, files in cls.OPTION_DATA.items(): |
| group_dir = os.path.join(options_dir, group_name) |
| for file_name, content_list in files.items(): |
| file_path = os.path.join(group_dir, file_name) |
| |
| |
| if not os.path.exists(file_path): |
| try: |
| with open(file_path, 'w', encoding='utf-8') as f: |
| |
| for item in content_list: |
| f.write(item + "\n") |
| print(f"[Z-Image] 已創建設定檔: {group_name}/{file_name}") |
| except Exception as e: |
| print(f"[Z-Image] 創建設定檔失敗 {group_name}/{file_name}: {str(e)}") |
| else: |
| |
| try: |
| with open(file_path, 'r', encoding='utf-8') as f: |
| existing_lines = [line.strip() for line in f if line.strip()] |
| |
| |
| if len(existing_lines) < len(content_list) / 2: |
| with open(file_path, 'w', encoding='utf-8') as f: |
| for item in content_list: |
| f.write(item + "\n") |
| print(f"[Z-Image] 已更新設定檔: {group_name}/{file_name}") |
| except Exception as e: |
| print(f"[Z-Image] 讀取設定檔失敗 {group_name}/{file_name}: {str(e)}") |
| |
| |
| templates_dir = os.path.join(options_dir, "templates") |
| if not os.path.exists(templates_dir): |
| os.makedirs(templates_dir) |
| print(f"[Z-Image] 已創建模板目錄: {templates_dir}") |
| |
| |
| for template_id, template_data in cls.DEFAULT_TEMPLATES.items(): |
| template_file = os.path.join(templates_dir, f"{template_id}.json") |
| if not os.path.exists(template_file): |
| try: |
| with open(template_file, 'w', encoding='utf-8') as f: |
| json.dump(template_data, f, ensure_ascii=False, indent=2) |
| print(f"[Z-Image] 已創建模板檔案: templates/{template_id}.json") |
| except Exception as e: |
| print(f"[Z-Image] 創建模板檔案失敗 {template_id}.json: {str(e)}") |
|
|
| @classmethod |
| def load_templates(cls): |
| """載入所有模板""" |
| templates_dir = os.path.join(os.path.dirname(__file__), "z_image_options", "templates") |
| |
| if not os.path.exists(templates_dir): |
| |
| return cls.DEFAULT_TEMPLATES |
| |
| templates = {} |
| try: |
| |
| for file_name in os.listdir(templates_dir): |
| if file_name.endswith('.json'): |
| template_id = file_name[:-5] |
| template_path = os.path.join(templates_dir, file_name) |
| |
| try: |
| with open(template_path, 'r', encoding='utf-8') as f: |
| template_data = json.load(f) |
| |
| |
| if 'name' in template_data and 'fields' in template_data: |
| templates[template_id] = template_data |
| else: |
| print(f"[Z-Image] 模板檔案格式錯誤: {file_name}") |
| except Exception as e: |
| print(f"[Z-Image] 載入模板失敗 {file_name}: {str(e)}") |
| except Exception as e: |
| print(f"[Z-Image] 掃描模板目錄失敗: {str(e)}") |
| |
| |
| if not templates: |
| templates = cls.DEFAULT_TEMPLATES |
| |
| return templates |
|
|
| @classmethod |
| def INPUT_TYPES(cls): |
| |
| cls.initialize_options_dir() |
| |
| |
| templates = cls.load_templates() |
| |
| |
| template_options = ["無模板 | No Template"] |
| for template_id, template_data in templates.items(): |
| template_name = template_data.get('name', template_id) |
| template_options.append(f"{template_name} | {template_id}") |
| |
| options_dir = os.path.join(os.path.dirname(__file__), "z_image_options") |
| |
| |
| input_types = {} |
| |
| |
| field_mapping = [ |
| |
| ("【場景】_場景描述", "scene", "scene_description.txt"), |
| ("【場景】_時間氛圍", "scene", "time_atmosphere.txt"), |
| ("【場景】_環境設定", "scene", "environment_setting.txt"), |
| |
| |
| ("【主體】_人物特徵", "subject", "character_features.txt"), |
| ("【主體】_服裝造型", "subject", "clothing_style.txt"), |
| ("【主體】_姿勢表情", "subject", "pose_expression.txt"), |
| |
| |
| ("【攝影】_鏡頭參數", "photography", "lens_parameters.txt"), |
| ("【攝影】_拍攝角度", "photography", "shooting_angle.txt"), |
| ("【攝影】_膠片風格", "photography", "film_style.txt"), |
| |
| |
| ("【燈光】_光源類型", "lighting", "light_source_type.txt"), |
| ("【燈光】_光效描述", "lighting", "light_effect.txt"), |
| ("【燈光】_對比層次", "lighting", "contrast_level.txt"), |
| |
| |
| ("【風格】_藝術風格", "style", "art_style.txt"), |
| ("【風格】_色彩方案", "style", "color_scheme.txt"), |
| ("【風格】_渲染效果", "style", "render_effects.txt"), |
| ] |
| |
| |
| for field_name, group, file_name in field_mapping: |
| file_path = os.path.join(options_dir, group, file_name) |
| options = ["隨機 | Random", "無 | None"] |
| try: |
| with open(file_path, 'r', encoding='utf-8') as f: |
| |
| lines = [line.strip() for line in f if line.strip()] |
| options.extend(lines) |
| except Exception as e: |
| print(f"[Z-Image] 警告: 無法從 {file_path} 載入選項: {e}") |
| |
| if group in cls.OPTION_DATA and file_name in cls.OPTION_DATA[group]: |
| options.extend(cls.OPTION_DATA[group][file_name]) |
| |
| input_types[field_name] = (options, {"default": "隨機 | Random"}) |
| |
| |
| input_types["language_choice"] = (["中文", "English", "雙語 | Bilingual"], {"default": "雙語 | Bilingual"}) |
| |
| |
| input_types["style_template"] = (template_options, {"default": "無模板 | No Template"}) |
| |
| |
| input_types["detail_level"] = (["簡略 | Simple", "標準 | Standard", "詳細 | Detailed", "極度詳細 | Extremely Detailed"], |
| {"default": "標準 | Standard"}) |
| |
| |
| input_types["negative_prompt"] = ("STRING", { |
| "default": "低質量 | Low quality, 模糊 | Blurry, 變形 | Deformed, 解剖錯誤 | Bad anatomy, 多餘肢體 | Extra limbs, 水印 | Watermark, 簽名 | Signature", |
| "multiline": True |
| }) |
|
|
| return {"required": input_types} |
|
|
| RETURN_TYPES = ("STRING", "STRING", "STRING") |
| RETURN_NAMES = ("json_prompt", "positive_text", "negative_prompt") |
| FUNCTION = "generate_json_prompt" |
| CATEGORY = "Z-Image" |
|
|
| def generate_json_prompt(self, **kwargs): |
| |
| self.initialize_options_dir() |
| |
| |
| templates = self.load_templates() |
| |
| |
| language_choice = kwargs.get("language_choice", "雙語 | Bilingual") |
| style_template = kwargs.get("style_template", "無模板 | No Template") |
| detail_level = kwargs.get("detail_level", "標準 | Standard") |
| negative_prompt = kwargs.get("negative_prompt", "") |
| |
| |
| selected_template_id = None |
| for template_id, template_data in templates.items(): |
| template_name = template_data.get('name', template_id) |
| if style_template.startswith(template_name) or template_id in style_template: |
| selected_template_id = template_id |
| break |
| |
| |
| field_keys = [ |
| "scene_description", "time_atmosphere", "environment_setting", |
| "character_features", "clothing_style", "pose_expression", |
| "lens_parameters", "shooting_angle", "film_style", |
| "light_source_type", "light_effect", "contrast_level", |
| "art_style", "color_scheme", "render_effects" |
| ] |
| |
| |
| fields = {} |
| for key in field_keys: |
| |
| chinese_name = self._get_chinese_field_name(key) |
| prefixed_key = f"【{self._get_group_chinese(key)}】_{chinese_name}" |
| value = kwargs.get(prefixed_key, "隨機 | Random") |
| fields[key] = self._process_field_value(key, value, language_choice) |
| |
| |
| if selected_template_id and selected_template_id in templates: |
| fields = self._apply_style_template(fields, selected_template_id, templates, language_choice) |
| |
| |
| fields = self._adjust_detail_level(fields, detail_level, language_choice) |
| |
| |
| json_data = { |
| "metadata": { |
| "generated_at": datetime.now().isoformat(), |
| "generator": "Z-Image JSON Prompt Generator v3.0", |
| "language": language_choice, |
| "style_template": selected_template_id if selected_template_id else "none", |
| "detail_level": detail_level |
| }, |
| |
| "scene_settings": { |
| "description": fields["scene_description"], |
| "time_atmosphere": fields["time_atmosphere"], |
| "environment": fields["environment_setting"] |
| }, |
| |
| "subject_description": { |
| "character": fields["character_features"], |
| "clothing": fields["clothing_style"], |
| "pose_expression": fields["pose_expression"] |
| }, |
| |
| "photography_technique": { |
| "lens": fields["lens_parameters"], |
| "angle": fields["shooting_angle"], |
| "film_style": fields["film_style"] |
| }, |
| |
| "lighting_effects": { |
| "light_source": fields["light_source_type"], |
| "effect": fields["light_effect"], |
| "contrast": fields["contrast_level"] |
| }, |
| |
| "style_rendering": { |
| "art_style": fields["art_style"], |
| "color_scheme": fields["color_scheme"], |
| "render_effects": fields["render_effects"], |
| "negative_guidance": self._process_language(negative_prompt, language_choice) |
| } |
| } |
|
|
| |
| json_output = json.dumps(json_data, ensure_ascii=False, indent=2) |
|
|
| |
| positive_text = self._generate_four_part_text(fields, language_choice, detail_level) |
|
|
| return (json_output, positive_text, negative_prompt) |
|
|
| def _get_chinese_field_name(self, field_name): |
| """將英文字段名轉換為中文顯示名稱""" |
| name_mapping = { |
| "scene_description": "場景描述", |
| "time_atmosphere": "時間氛圍", |
| "environment_setting": "環境設定", |
| "character_features": "人物特徵", |
| "clothing_style": "服裝造型", |
| "pose_expression": "姿勢表情", |
| "lens_parameters": "鏡頭參數", |
| "shooting_angle": "拍攝角度", |
| "film_style": "膠片風格", |
| "light_source_type": "光源類型", |
| "light_effect": "光效描述", |
| "contrast_level": "對比層次", |
| "art_style": "藝術風格", |
| "color_scheme": "色彩方案", |
| "render_effects": "渲染效果" |
| } |
| return name_mapping.get(field_name, field_name) |
|
|
| def _get_group_chinese(self, field_name): |
| """根據字段名返回所屬分組(中文)""" |
| group_mapping = { |
| "scene_description": "場景", "time_atmosphere": "場景", "environment_setting": "場景", |
| "character_features": "主體", "clothing_style": "主體", "pose_expression": "主體", |
| "lens_parameters": "攝影", "shooting_angle": "攝影", "film_style": "攝影", |
| "light_source_type": "燈光", "light_effect": "燈光", "contrast_level": "燈光", |
| "art_style": "風格", "color_scheme": "風格", "render_effects": "風格" |
| } |
| return group_mapping.get(field_name, "未知") |
|
|
| def _get_group(self, field_name): |
| """根據字段名返回所屬分組(英文)""" |
| group_mapping = { |
| "scene_description": "scene", "time_atmosphere": "scene", "environment_setting": "scene", |
| "character_features": "subject", "clothing_style": "subject", "pose_expression": "subject", |
| "lens_parameters": "photography", "shooting_angle": "photography", "film_style": "photography", |
| "light_source_type": "lighting", "light_effect": "lighting", "contrast_level": "lighting", |
| "art_style": "style", "color_scheme": "style", "render_effects": "style" |
| } |
| return group_mapping.get(field_name, "unknown") |
|
|
| def _process_field_value(self, field_name, value, language_choice): |
| """處理字段值,包括隨機選擇和語言處理""" |
| if value == "隨機 | Random": |
| |
| group = self._get_group(field_name) |
| options_dir = os.path.join(os.path.dirname(__file__), "z_image_options") |
| file_name = f"{field_name}.txt" |
| file_path = os.path.join(options_dir, group, file_name) |
| |
| try: |
| with open(file_path, 'r', encoding='utf-8') as f: |
| options = [line.strip() for line in f if line.strip()] |
| |
| valid_options = [opt for opt in options if opt not in ["隨機 | Random", "無 | None"]] |
| if valid_options: |
| selected = random.choice(valid_options) |
| return self._process_language(selected, language_choice) |
| except Exception as e: |
| print(f"[Z-Image] 警告: 無法為 {field_name} 載入隨機選項: {e}") |
| |
| if group in self.OPTION_DATA and file_name in self.OPTION_DATA[group]: |
| valid_options = self.OPTION_DATA[group][file_name] |
| if valid_options: |
| selected = random.choice(valid_options) |
| return self._process_language(selected, language_choice) |
| |
| return "" |
| elif value == "無 | None": |
| return "" |
| else: |
| return self._process_language(value, language_choice) |
|
|
| def _process_language(self, text, language_choice): |
| """根據語言選擇處理文本""" |
| if not text: |
| return "" |
| |
| if language_choice == "中文": |
| |
| parts = text.split(" | ") |
| return parts[0].strip() if len(parts) > 0 else text |
| elif language_choice == "English": |
| |
| parts = text.split(" | ") |
| return parts[1].strip() if len(parts) > 1 else text |
| else: |
| return text |
|
|
| def _apply_style_template(self, fields, template_id, templates, language_choice): |
| """應用風格模板""" |
| if template_id not in templates: |
| return fields |
| |
| template_data = templates[template_id] |
| template_fields = template_data.get('fields', {}) |
| |
| for key, value in template_fields.items(): |
| if key in fields and (not fields[key] or fields[key] == "無" or fields[key] == "None"): |
| fields[key] = self._process_language(value, language_choice) |
| |
| return fields |
|
|
| def _adjust_detail_level(self, fields, detail_level, language_choice): |
| """根據細節等級調整字段內容""" |
| |
| if " | " in detail_level: |
| detail_level_name = detail_level.split(" | ")[0] |
| else: |
| detail_level_name = detail_level |
| |
| if detail_level_name == "簡略": |
| |
| core_fields = ["scene_description", "character_features", "art_style"] |
| for key in fields: |
| if key not in core_fields: |
| fields[key] = "" |
| elif detail_level_name == "詳細": |
| |
| descriptive_words = { |
| "scene_description": ["精緻的 | Exquisite", "細膩的 | Detailed", "生動的 | Vivid"], |
| "character_features": ["獨特的 | Unique", "鮮明的 | Distinct", "立體的 | Three-dimensional"], |
| "art_style": ["強烈的 | Strong", "突出的 | Prominent", "明顯的 | Obvious"] |
| } |
| |
| for key, words in descriptive_words.items(): |
| if fields[key] and not any(fields[key].startswith(word.split(" | ")[0]) for word in words): |
| selected_word = random.choice(words) |
| fields[key] = f"{self._process_language(selected_word, language_choice)}{fields[key]}" |
| elif detail_level_name == "極度詳細": |
| |
| detail_descriptions = { |
| "scene_description": ",充滿豐富的細節和層次 | , full of rich details and layers", |
| "character_features": ",具有獨特的個人特質和表情 | , with unique personal characteristics and expressions", |
| "clothing_style": ",展現精緻的材質和做工 | , showing exquisite materials and workmanship", |
| "art_style": ",體現強烈的視覺衝擊和藝術感 | , reflecting strong visual impact and artistic sense" |
| } |
| |
| for key, desc in detail_descriptions.items(): |
| if fields[key]: |
| desc_part = desc.split(" | ")[0] if language_choice == "中文" else desc.split(" | ")[1] |
| if not fields[key].endswith(desc_part): |
| fields[key] = f"{fields[key]}{desc_part}" |
| |
| return fields |
|
|
| def _generate_four_part_text(self, fields, language_choice, detail_level): |
| """生成四段式文本提示""" |
| |
| if " | " in detail_level: |
| detail_level_name = detail_level.split(" | ")[0] |
| else: |
| detail_level_name = detail_level |
| |
| parts = [] |
| |
| |
| part1 = [] |
| if fields["scene_description"]: |
| part1.append(fields["scene_description"]) |
| if fields["character_features"]: |
| part1.append(fields["character_features"]) |
| if fields["pose_expression"]: |
| part1.append(fields["pose_expression"]) |
| |
| if part1: |
| if language_choice == "中文": |
| parts.append(f"【核心描述】{','.join(part1)}") |
| elif language_choice == "English": |
| parts.append(f"【Core Description】{', '.join(part1)}") |
| else: |
| parts.append(f"【核心描述 | Core Description】{','.join(part1)}") |
| |
| |
| part2 = [] |
| if fields["time_atmosphere"]: |
| part2.append(fields["time_atmosphere"]) |
| if fields["environment_setting"]: |
| part2.append(fields["environment_setting"]) |
| if fields["clothing_style"]: |
| if language_choice == "English": |
| part2.append(f"wearing {fields['clothing_style']}") |
| else: |
| part2.append(f"穿著{fields['clothing_style']}") |
| |
| if part2: |
| if language_choice == "中文": |
| parts.append(f"【環境細節】{','.join(part2)}") |
| elif language_choice == "English": |
| parts.append(f"【Environment Details】{', '.join(part2)}") |
| else: |
| parts.append(f"【環境細節 | Environment Details】{','.join(part2)}") |
| |
| |
| part3 = [] |
| if fields["lens_parameters"]: |
| part3.append(fields["lens_parameters"]) |
| if fields["shooting_angle"]: |
| part3.append(fields["shooting_angle"]) |
| if fields["light_source_type"]: |
| part3.append(fields["light_source_type"]) |
| if fields["light_effect"]: |
| part3.append(fields["light_effect"]) |
| if fields["film_style"]: |
| part3.append(fields["film_style"]) |
| if fields["contrast_level"]: |
| part3.append(fields["contrast_level"]) |
| |
| if part3: |
| if language_choice == "中文": |
| parts.append(f"【技術參數】{','.join(part3)}") |
| elif language_choice == "English": |
| parts.append(f"【Technical Parameters】{', '.join(part3)}") |
| else: |
| parts.append(f"【技術參數 | Technical Parameters】{','.join(part3)}") |
| |
| |
| part4 = [] |
| if fields["art_style"]: |
| part4.append(fields["art_style"]) |
| if fields["color_scheme"]: |
| part4.append(fields["color_scheme"]) |
| if fields["render_effects"]: |
| part4.append(fields["render_effects"]) |
| |
| |
| if detail_level_name in ["詳細", "極度詳細"]: |
| if language_choice == "中文": |
| quality_words = ["高質量", "高解析度", "專業級", "大師級"] |
| part4.append(f"{random.choice(quality_words)}作品") |
| elif language_choice == "English": |
| quality_words = ["High quality", "High resolution", "Professional grade", "Masterpiece"] |
| part4.append(f"{random.choice(quality_words)} work") |
| else: |
| quality_words = ["高質量 | High quality", "高解析度 | High resolution", "專業級 | Professional grade", "大師級 | Masterpiece"] |
| part4.append(f"{random.choice(quality_words)}作品 | work") |
| |
| if part4: |
| if language_choice == "中文": |
| parts.append(f"【風格強化】{','.join(part4)}") |
| elif language_choice == "English": |
| parts.append(f"【Style Enhancement】{', '.join(part4)}") |
| else: |
| parts.append(f"【風格強化 | Style Enhancement】{','.join(part4)}") |
| |
| |
| separator = "\n\n" if detail_level_name in ["詳細", "極度詳細"] else "\n" |
| return separator.join(parts) |
|
|
| @classmethod |
| def IS_CHANGED(cls, **kwargs): |
| return f"{time.time()}" |
|
|
|
|
| |
| NODE_CLASS_MAPPINGS = { |
| "ZImageJSONPrompting": ZImageJSONPrompting |
| } |
|
|
| NODE_DISPLAY_NAME_MAPPINGS = { |
| "ZImageJSONPrompting": "Z-Image JSON Prompt Generator" |
| } |