mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-04-16 08:33:29 +00:00

* Allow disabling pe in flux code for some other models. * Initial Hunyuan3Dv2 implementation. Supports the multiview, mini, turbo models and VAEs. * Fix orientation of hunyuan 3d model. * A few fixes for the hunyuan3d models. * Update frontend to 1.13 (#7331) * Add backend primitive nodes (#7328) * Add backend primitive nodes * Add control after generate to int primitive * Nodes to convert images to YUV and back. Can be used to convert an image to black and white. * Update frontend to 1.14 (#7343) * Native LotusD Implementation (#7125) * draft pass at a native comfy implementation of Lotus-D depth and normal est * fix model_sampling kludges * fix ruff --------- Co-authored-by: comfyanonymous <121283862+comfyanonymous@users.noreply.github.com> * Automatically set the right sampling type for lotus. * support output normal and lineart once (#7290) * [nit] Format error strings (#7345) * ComfyUI version v0.3.27 * Fallback to pytorch attention if sage attention fails. * Add model merging node for WAN 2.1 * Add Hunyuan3D to readme. * Support more float8 types. * Add CFGZeroStar node. Works on all models that use a negative prompt but is meant for rectified flow models. * Support the WAN 2.1 fun control models. Use the new WanFunControlToVideo node. * Add WanFunInpaintToVideo node for the Wan fun inpaint models. * Update frontend to 1.14.6 (#7416) Cherry-pick the fix: https://github.com/Comfy-Org/ComfyUI_frontend/pull/3252 * Don't error if wan concat image has extra channels. * ltxv: fix preprocessing exception when compression is 0. (#7431) * Remove useless code. * Fix latent composite node not working when source has alpha. * Fix alpha channel mismatch on destination in ImageCompositeMasked * Add option to store TE in bf16 (#7461) * User missing (#7439) * Ensuring a 401 error is returned when user data is not found in multi-user context. * Returning a 401 error when provided comfy-user does not exists on server side. * Fix comment. This function does not support quads. * MLU memory optimization (#7470) Co-authored-by: huzhan <huzhan@cambricon.com> * Fix alpha image issue in more nodes. * Fix problem. * Disable partial offloading of audio VAE. * Add activations_shape info in UNet models (#7482) * Add activations_shape info in UNet models * activations_shape should be a list * Support 512 siglip model. * Show a proper error to the user when a vision model file is invalid. * Support the wan fun reward loras. --------- Co-authored-by: comfyanonymous <comfyanonymous@protonmail.com> Co-authored-by: Chenlei Hu <hcl@comfy.org> Co-authored-by: thot experiment <94414189+thot-experiment@users.noreply.github.com> Co-authored-by: comfyanonymous <121283862+comfyanonymous@users.noreply.github.com> Co-authored-by: Terry Jia <terryjia88@gmail.com> Co-authored-by: Michael Kupchick <michael@lightricks.com> Co-authored-by: BVH <82035780+bvhari@users.noreply.github.com> Co-authored-by: Laurent Erignoux <lerignoux@gmail.com> Co-authored-by: BiologicalExplosion <49753622+BiologicalExplosion@users.noreply.github.com> Co-authored-by: huzhan <huzhan@cambricon.com> Co-authored-by: Raphael Walker <slickytail.mc@gmail.com>
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
import os
|
|
import json
|
|
from aiohttp import web
|
|
import logging
|
|
|
|
|
|
class AppSettings():
|
|
def __init__(self, user_manager):
|
|
self.user_manager = user_manager
|
|
|
|
def get_settings(self, request):
|
|
try:
|
|
file = self.user_manager.get_request_user_filepath(
|
|
request,
|
|
"comfy.settings.json"
|
|
)
|
|
except KeyError as e:
|
|
logging.error("User settings not found.")
|
|
raise web.HTTPUnauthorized() from e
|
|
if os.path.isfile(file):
|
|
try:
|
|
with open(file) as f:
|
|
return json.load(f)
|
|
except:
|
|
logging.error(f"The user settings file is corrupted: {file}")
|
|
return {}
|
|
else:
|
|
return {}
|
|
|
|
def save_settings(self, request, settings):
|
|
file = self.user_manager.get_request_user_filepath(
|
|
request, "comfy.settings.json")
|
|
with open(file, "w") as f:
|
|
f.write(json.dumps(settings, indent=4))
|
|
|
|
def add_routes(self, routes):
|
|
@routes.get("/settings")
|
|
async def get_settings(request):
|
|
return web.json_response(self.get_settings(request))
|
|
|
|
@routes.get("/settings/{id}")
|
|
async def get_setting(request):
|
|
value = None
|
|
settings = self.get_settings(request)
|
|
setting_id = request.match_info.get("id", None)
|
|
if setting_id and setting_id in settings:
|
|
value = settings[setting_id]
|
|
return web.json_response(value)
|
|
|
|
@routes.post("/settings")
|
|
async def post_settings(request):
|
|
settings = self.get_settings(request)
|
|
new_settings = await request.json()
|
|
self.save_settings(request, {**settings, **new_settings})
|
|
return web.Response(status=200)
|
|
|
|
@routes.post("/settings/{id}")
|
|
async def post_setting(request):
|
|
setting_id = request.match_info.get("id", None)
|
|
if not setting_id:
|
|
return web.Response(status=400)
|
|
settings = self.get_settings(request)
|
|
settings[setting_id] = await request.json()
|
|
self.save_settings(request, settings)
|
|
return web.Response(status=200)
|