gyi_C dZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z ddl mZddlmZejeZejejejejeZdZdZdZd Zd Ze d eZed d gdZ dS)u 图片生成API接口 N) BlueprintrequestjsonifyResponse)NanoBananaClient)save_generation_historycV tjtdd}t |dd5}t j|cdddS#1swxYwYdS#t$r6}t dt|icYd}~Sd}~wwxYw)ut 从JSON文件加载高级随机词条配置 Returns: dict: 包含各类别词条的字典 model_promptzadvanced_random_options.jsonrutf-8encodingNu&加载高级随机词条配置失败: ) ospathjoin project_rootopenjsonload Exceptionloggererrorstr) options_pathfes 1/root/new_image_generate/backend/apis/generate.pyload_advanced_random_optionsrsw||L.B`aa ,g 6 6 6 !9Q<<                   Fc!ffFFGGG s@8A(A A(AA("A#A(( B(2+B#B(#B(c tjtdd}tj|sdSt |dd5}t j|cdddS#1swxYwYdS#t$r5}t dt|Yd}~dSd}~wwxYw)u, 从JSON文件加载高级随机勾选状态配置 Returns: dict: 包含勾选状态的字典,格式为: - 数组类型类别: { "类别名": ["已勾选的词条1", "已勾选的词条2", ...] } - 字符串类型类别: { "类别名": true/false } r zadvanced_random_selection.jsonNr r r u&加载高级随机勾选状态失败: ) rrrrexistsrrrrrrr)selection_pathrrs rload_advanced_random_selectionr"&s lNDdeew~~n-- 4 .# 8 8 8 A9Q<<                   Fc!ffFFGGGtttttsBAB B A</ B <BB BB C*CCc  t}|stddSt}g}|D]6\} t t rSt dkr?|||g}t |t rt|dkr fd|D}|r`tj |}| |d|t d|d|d t|d t d|d t d|d tj }| |d|t d|d|ot tr r|t||d }|r<| |d t d|d t d|d | |d t d|d 8|rBd|}tdt|d|SdS)u 从配置文件中随机选择词条并拼接成提示词后缀 规则: - 根据勾选状态筛选可选词条 - 对于数组类型的类别,在已勾选的词条中随机选择1个 - 对于字符串类型的类别(如"风格"),如果被勾选则直接使用整个字符串 - 如果某个类别没有勾选任何词条,则跳过该类别 Returns: str: 拼接后的提示词后缀 u高级随机词条配置为空rNcg|]}|v| Sr&).0itemitemss r z1generate_random_prompt_suffix..[s&X&X&X$RW--t---u:u高级随机 - z: u (从u个勾选项中)u : 跳过(无有效勾选项)u: 跳过(未勾选)Fu,u$高级随机词条拼接完成,共u 个类别)rrwarningr"r) isinstancelistlengetrandomchoiceappenddebugrrinfo) options selectionpartscategoryselected_itemsavailable_itemsselected is_selectedsuffixr)s @rgenerate_random_prompt_suffixr?;s+,,G 7888r/00I E"==??&D&D% eT " "% Ds5zzA~~$!*x!>G'F>$G'' H%1*H  H%generatez /api/generatePOST)methodsc  tj}|dds-tdt ddidfS|ddttr dksd kr0td t dd idfS|d d |dd |dd|dg t tsg st \ t dkr$ dd t dt ddddd r+t dt dt fd}t|dS#t $rW}tdt#|t dd t#|id!fcYd}~Sd}~wwxYw)"u: 生成图片接口 请求参数: - prompt: 提示词 - count: 图片数量 (1-10) - model: 模型名称 - temperature: 创意度参数 (0-1) - reference_images: 参考图片base64数组 (可选,最多3张) - advanced_random: 是否启用高级随机 (可选,默认false) rBr$u提示词为空ru提示词不能为空icount u图片数量无效: u图片数量必须在1-10之间modelzgemini-3-pro-image-preview temperaturegffffff?advanced_randomFrQNu)参考图片超过3张,已截取前3张u 开始生成 u 张图片: 2z...u使用 u 张参考图片c3Kddl}ddl}ddl}i}|d}fd}g}t D]J}|||f}d|_|||K|krl  d} | || d<|d z }tj | d } d | d Vn #|j $rd|D} | sYn YhwxYw|kl|D]}| dsr } | d|vr.| || d<|d z }tj | d } d | d Vn#|j $rYnwxYwrt!d|D} t$d| dd t)| nA#t*$r4} t$dt/| Yd} ~ nd} ~ wwxYwd| | z d}tj |d } d | d VdS)u*生成器函数,支持并发流式响应rNc ddl}|j}td|d|dzd } }rzt d}t | r ng\}}t|dkr |dd}td|d |dzd |r^t|dkrKtd|d |dzd t| ||}n:td|d |dzd |}|r>td|d|dzd|d| d}n=t d|d|dzd|dd d}np#t$rc}t d|d|dzdt||dt| d}Yd}~nd}~wwxYw |dS)u单个图片生成任务rNu[线程u] 开始生成第 r_u 张图片...Trdu] 高级随机模式,第 u" 张图片使用独立随机参数u$] 使用图片编辑模式生成第 u! 张图片,参考图片数量: u!] 使用文生图模式生成第 u 张图片u] 第 u 张图片生成成功success)indexstatusrT timestampu. 张图片生成失败:未返回图片数据ru图片生成失败)rirjrrku 张图片生成异常: ) threadingcurrent_threadidentrr5rFrYrJr/generate_with_imagesgenerate_text_to_image get_timestamprrrput)rirl thread_idcurrent_promptcurrent_reference_imagesrTresultrrc base_promptclientrBrQ result_queuerbs rgenerate_single_imagez@generate_images..generate..generate_single_imagesW    %4466<  [i[[519[[[\\\4%+N/?,' C)@d)S)SC[*7GO,11333RDD@(@ 7881<<7OPRQRPR7S4 %Bi%B%BTY\]T]%B%B%BCCC0`C8P4Q4QTU4U4U %ii%i%i]bef]f%i%iJMNfJgJg%i%ijjj%+%@%@Qikv%w%w  $oi$o$oZ_bcZc$o$o$oppp%+%B%B>S^%_%_ ! $`i$`$`uqy$`$`$`aaa%*&/*4)/)=)=)?)? "" %yy%y%y %y%y%yzzz%*&-%9)/)=)=)?)? ""!LL!g9!g!gEAI!g!g_bcd_e_e!g!ghhh!&")!$Q%+%9%9%;%; FFFFFF  (((((sFG I &AII )targetargsTg?)timeoutrir_F) ensure_asciizdata: rAc:g|]}||Sr&)is_alive)r'ts rr*z5generate_images..generate..ss%$H$H$H11::<<$HQ$H$H$Hr+g@c*g|]}|ddk|S)rjrhr&)r'r s rr*z5generate_images..generate..s& Y Y Yq( y@X@X@X@X@Xr+u生成完成: /u 成功u保存生成历史失败: completed)rjtotalrhfailed)rlqueuetimeQueuerangeThreaddaemonstartr3r0rdumpsEmptyrempty get_nowaitr/valuesrr5rrrr)rlrrresultscompleted_countrzthreadsithreadrvjson_str alive_threads success_countr final_resultryrcrwrxr^rarBrQrbs @rrZz!generate_images..generates     LLL KKKG ;;==LO= )= )= )= )= )= )= )= )= )= )= )@G5\\ ' '"))1FaT)RR $  v&&&&"E)))--c-::F/5GF7O,#q(O $z&uEEEH181111111{$H$H$H$H$HM(H "E))(" ) ) C ((((#((** )4466Fgg5539w0'1,#':f5#I#I#I5x555555{E#((**  Y YGNN,<,< Y Y YZZM KKGGGGGG H H H D'umLLLL D D D B#a&&BBCCCCCCCC D &(-/ L z,UCCCH)8))) ) ) ) ) )s>ACC98C92A E?? F  F 0H I *H<<Iztext/event-stream)mimetypeu图片生成API异常: u服务器错误: i)rget_jsonr0rPrrrr-intr.rYr/r,r5rrrr) datarZrrcrwrxr^rarBrQrbs @@@@@@@@rgenerate_imagesrszE!!(B''--// D LL* + + +G%<=>>C C!$$%%% Nebjj LL777 8 8 8G%FGHH#M M">??hh}c22 ((#4e<< 88$6;;*D11 "!   Z'?HX'Y'Y $F$  1 $ $/3  NNF G G G GEGGvcrc{GGGHHH  K KKI#&6"7"7III J J J"##F *F *F *F *F *F *F *F *F *F *F *F *P -@AAAA EEE 7s1vv77888!=SVV!=!=>??DDDDDDDEs-A)H!4A&H!EH!! J+A I=7J=J)!__doc__rrLrequestsreloggingrr1flaskrrrrbackend.utils.model_clientrbackend.models.databaser getLogger__name__rrdirnameabspath__file__rrr"r?rFrY generate_bprouterr&r+rrs   777777777777777777;;;;;;  8 $ $wrwrwrwx?X?X/Y/YZZ[[     *DDDN88.8.8.ti H--  ?VH55EEEE65EEEEEEr+