test / z_image_json_prompt.py
Oosayam's picture
Upload z_image_json_prompt.py
4f7e8eb verified
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:
# 掃描模板目錄中的所有 JSON 檔案
for file_name in os.listdir(templates_dir):
if file_name.endswith('.json'):
template_id = file_name[:-5] # 移除 .json 擴展名
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", "")
# 從模板名稱中提取模板ID
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:
# 將key轉換為中文顯示名稱以匹配輸入參數
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 結構
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 字串
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()]
# 過濾掉"隨機 | Random"和"無 | None"選項
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"
}