o yf!3@sddlZddlZddlZddlmZddlZddlmZddl m Z ddl m Z GdddZ Gdd d e Zd d Zhd ZGd ddZeGdddZGdddZeZdS)N) dataclass)errors)cmd_opts) script_pathc@sFeZdZdddZddZdd Zd d Zd d ZddZddZ dS) OptionInfoNFc CsV||_||_||_||_||_||_| |_||_d|_||_ | |_ | |_ | |_ dS)NF) defaultlabel componentcomponent_argsonchangesection category_idrefresh do_not_savecomment_before comment_afterinfotext restrict_api) selfrr r r r r rrrrrrr`C:\Users\Luke\Documents\Stable diffusion\Automatic1111\stable-diffusion-webui\modules\options.py__init__s zOptionInfo.__init__cC |jd|d|d7_|S)Nz []r)rr urlrrrlink$zOptionInfo.linkcCr)Nz [rr)rr Zjs_funcrrrjs(rz OptionInfo.jscCs|jd|d7_|S)Nz(z)r)rinforrrr!,szOptionInfo.infocCs|j|7_|SNr )rhtmlrrrr#0zOptionInfo.htmlcC|jd7_|S)Nz- (requires restart)r rrrr needs_restart4r$zOptionInfo.needs_restartcCr%)Nz/ (requires Reload UI)r r&rrrneeds_reload_ui8r$zOptionInfo.needs_reload_ui) NrNNNNNrrNFN) __name__ __module__ __qualname__rrrr!r#r'r(rrrrr s  rcseZdZfddZZS) OptionHTMLcs(tjt|ddddd|_dS)Nrc[stjdddi|S)N elem_classesz settings-infor)grHTML)kwargsrrr?z%OptionHTML.__init__..)r r T)superrstrstripr)rtext __class__rrr>s zOptionHTML.__init__)r)r*r+r __classcell__rrr7rr,=sr,cCsJ|D]}t|dkr||_qt|dkr"|dd|_|d|_q|S)Nr)valueslenr r)Zsection_identifierZ options_dictvrrroptions_sectionDs    r?>datatypemap data_labelsrestricted_optscseZdZeeiZdeeeffddZ fddZ fddZ dd d Z d d Z ddZddZddZdddZddZddZddZddZZS) OptionsrBcCs&||_dd|jD|_||_dS)NcSsi|] \}}|js||jqSr)rr.0kr>rrr Wsz$Options.__init__..)rBitemsr@rC)rrBrCrrrrUs zOptions.__init__c sj|tvr tt|||S|jdur||jvs||jvrtjr#Jd|j|d}|j r/dS|r4|j nd}t |t rK|dddurKt d|dtjdurxtttjtjd}|jd}|jd }||vsxJd|d |d |d tjdurtttjtjd}||vsJd|d tjr||jvrt d|d||j|<dStt|||S)Nzchanging settings is disabledvisibleTFznot possible to set 'z' because it is restricted,rz' because settings in section 'z' (z/) are frozen with --freeze-settings-in-sectionsz@' because this setting is frozen with --freeze-specific-settingsz4' because it is restricted with --hide_ui_dir_config)options_builtin_fieldsr3rD __setattr__r@rBrfreeze_settingsgetrr isinstancedict RuntimeErrorfreeze_settings_in_sectionslistmapr4r5splitr freeze_specific_settingshide_ui_dir_configrC) rkeyvaluer!Z comp_argsZfrozen_sectionsZ section_key section_nameZ frozen_keysr7rrrNZs0    $  zOptions.__setattr__cs\|tvr tt||S|jdur||jvr|j|S||jvr&|j|jStt||Sr")rMr3rD__getattribute__r@rBr)ritemr7rr __getattr__s     zOptions.__getattr__FTc Cs|j|d}||kr dS|j|}|jrdS|r|jrdSzt|||Wn ty0YdSw|re|jdurez|WdStyd}zt |d|d|t|||WYd}~dSd}~wwdS)zhsets an option and calls its onchange callback, returning True if the option changed and False otherwiseNFzchanging setting z to T) r@rPrBrrsetattrrSr Exceptionrdisplay)rrZr[Zis_apiZ run_callbacksZoldvaloptionerrrsets0     z Options.setcCs|j|}|dur dS|jS)z%returns the default value for the keyN)rBrPr)rrZ data_labelrrr get_defaults zOptions.get_defaultcCsVtjrJdt|ddd}tj|j|dddWddS1s$wYdS)Nzsaving settings is disabledwutf8encodingF)indent ensure_ascii)rrOopenjsondumpr@)rfilenamefilerrrsaves"z Options.savecCsH|dus|dur dS|jt|t|}|jt|t|}||kS)NT)rArPtype)rxyZtype_xZtype_yrrr same_types zOptions.same_typec Cszt|ddd}t||_Wdn1swYWn.ty+i|_Yn#tyMtjd|dddt |tj t dd i|_Ynw|j d durh|j d durh|j d  |jd <|j d dur|j d durdd|j d dD|jd <t|j dtr|j drd|jvrdd|j ddD|jd<d}|jD]5\}}|j |d}|dur||j|std|d|dt|jdt|jjd tjd|d7}q|dkrtd|dtjddSdS)Nrrirjz* Could not load settings The config file "z^" is likely corrupted It has been moved to the "tmp/config.json" Reverting config to default T)exc_infotmpz config.jsonZsd_vae_as_default&sd_vae_overrides_per_model_preferencesZ quicksettingsZquicksettings_listcSg|]}|qSrr5rFirrr r2z Options.load..rKZ ui_reorderZui_reorder_listcSr}rr~rrrrrr2rzWarning: bad setting value: z: z (z ; expected ))rsrLzDThe program is likely to not work with bad settings. Settings file: z/ Either fix the file, or delete it and restart.)rorploadr@FileNotFoundErrorrarreportosreplacepathjoinrrPrWrQr4rIrBrxrprintrur)sysstderr)rrrrsZ bad_settingsrGr>r!rrrrs8      "("6z Options.loadcCs$|j|}||_|r|dSdSr")rBrPr )rrZfunccallr^rrrr s  zOptions.onchangecsfddjD}ddjD|d<ddjD|d<i}jD]%}|jddur5q+tj|j}|durBdn|j}||vrP|jd ||<q+d d |Dd d gg|d<t |S)Ncs"i|] \}}|j||jqSr)r@rPrrEr&rrrH"z$Options.dumpjson..cS"i|] \}}|jdur||jqSr"rrErrrrHrZ_comments_beforecSrr"r rErrrrHrZ_comments_afterrZ UncategorizedrLcSsg|]\}}||gqSrrrErrrrsz$Options.dumpjson..ZDefaultsOther _categories) rBrIr<r categoriesmappingrPrr rpdumps)rdZitem_categoriesr^categoryrr&rdumpjsons  zOptions.dumpjsoncCs2||j|<||jvr|js|j|j|<dSdSdSr")rBr@rr)rrZr!rrr add_options zOptions.add_optioncsii}|j}|D]\}}|j|vr|j||j<q |D] \}}||j|_qtjD] }|vr8t|<q,fdd}tt ||d|_dS)a#Reorder settings so that: - all items related to section always go together - all sections belonging to a category go together - sections inside a category are ordered alphabetically - categories are ordered by creation order Category is a superset of sections: for category "postprocessing" there could be multiple sections: "face restoration", "upscaling". This function also changes items' category_id so that all items belonging to a section have the same category_id. cs,|d}|jt}|jd}||fS)NrL)rPrr=r )rvr^Zcategory_orderZ section_orderZ category_idsrrsort_key s z!Options.reorder..sort_key)rZN) rBrIr rrPrrr=rRsorted)rZsection_categoriesZsettings_items_r^rrrrrreorders         zOptions.reordercCsd|durdS|j|j}|durt||d}|durdSt|}|tkr,|dkr,d}|S||}|S)zcasts an arbitrary to the same type as this setting's value with key Example: cast_value("eta_noise_seed_delta", "12") -> returns 12 (an int rather than str) NFalseF)rBrgetattrrubool)rrZr[ default_value expected_typerrr cast_value)s  zOptions.cast_value)FT)T)r)r*r+intfloatrArRr4rrrNr_rergrtrxrr rrrrr9rrr7rrDRs  )   $rDc@seZdZUeed<eed<dS)OptionsCategoryidr N)r)r*r+r4__annotations__rrrrr@s  rc@seZdZddZddZdS)OptionsCategoriescCs i|_dSr")rr&rrrrFs zOptionsCategories.__init__cCs"||jvr|St|||j|<dSr")rr)rrr rrrregister_categoryIs z#OptionsCategories.register_categoryN)r)r*r+rrrrrrrEs r)rrpr dataclassesrgradior.modulesrmodules.shared_cmd_optionsrmodules.paths_internalrrr,r?rMrDrrrrrrrs$    0 o