diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e63e6208..4020fc43e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,6 @@ # Change Log for SD.Next -## TODO - -- Include reference styles -- Quick apply style -- LoRA: SC LoRA, DoRA, etc -- Control API scripts compatibility - -## Update for 2024-04-05 +## Update for 2024-04-07 - **Features**: - **Gallery**: list, preview, search through all your images and videos! @@ -42,6 +35,10 @@ - Make metadata in full screen viewer optional - Add VAE civitai scan metadata/preview - More efficient in-browser callbacks + - Support controlnet manually downloads models in both standalone and diffusers format + For standalone, simply copy safetensors file to `models/control/controlnet` folder + For diffusers format, create folder with model name in `models/control/controlnet/` + and copy `model.json` and `diffusion_pytorch_model.safetensors` to that folder - **IPEX** - update to *IPEX 2.1.20* on Linux requires removing the venv folder to update properly diff --git a/TODO.md b/TODO.md index 95641f008..a7bb1b0d4 100644 --- a/TODO.md +++ b/TODO.md @@ -4,17 +4,31 @@ Main ToDo list can be found at [GitHub projects](https://github.com/users/vladma ## Candidates for next release +### Logistics + - defork + +### Models + - stable diffusion 3.0 +- pixart-sigma: +- powerpaint: + +### Pipelines + +- instant style: - ipadapter masking: - x-adapter: + +### Features + - async lowvram: - init latents: variations, img2img - diffusers public callbacks -- remove builtin: controlnet -- remove builtin: image-browser +- include reference styles +- quick apply style +- lora: sc lora, dora, etc -## Control missing features +### Missing -- second pass: -- control api +- control api scripts compatibility diff --git a/modules/control/units/controlnet.py b/modules/control/units/controlnet.py index 6724337b0..7f5bcbbc0 100644 --- a/modules/control/units/controlnet.py +++ b/modules/control/units/controlnet.py @@ -69,14 +69,19 @@ cache_dir = 'models/control/controlnet' def find_models(): path = os.path.join(opts.control_dir, 'controlnet') files = listdir(path) + folders = [f for f in files if os.path.isdir(f) if os.path.exists(os.path.join(f, 'config.json'))] files = [f for f in files if f.endswith('.safetensors')] downloaded_models = {} for f in files: basename = os.path.splitext(os.path.relpath(f, path))[0] downloaded_models[basename] = os.path.join(path, f) + for f in folders: + basename = os.path.relpath(f, path) + downloaded_models[basename] = f all_models.update(downloaded_models) return downloaded_models +find_models() def list_models(refresh=False): import modules.shared diff --git a/modules/shared.py b/modules/shared.py index 4112a5d5b..cd6e64d62 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -975,7 +975,10 @@ if cmd_opts.use_xformers: opts.data['uni_pc_lower_order_final'] = opts.schedulers_use_loworder # compatibility opts.data['uni_pc_order'] = opts.schedulers_solver_order # compatibility log.info(f'Engine: backend={backend} compute={devices.backend} device={devices.get_optimal_device_name()} attention="{opts.cross_attention_optimization}" mode={devices.inference_context.__name__}') -log.info(f'Device: {print_dict(devices.get_gpu_info())}') +try: + log.info(f'Device: {print_dict(devices.get_gpu_info())}') +except Exception as ex: + log.error(f'Device: {ex}') prompt_styles = modules.styles.StyleDatabase(opts) reference_models = readfile(os.path.join('html', 'reference.json'))