mirror of
https://github.com/vladmandic/automatic
synced 2026-09-06 13:00:44 +02:00
+4
-3
@@ -1,6 +1,6 @@
|
||||
# Change Log for SD.Next
|
||||
|
||||
## Highlights for 2026-08-22
|
||||
## Highlights for 2026-08-23
|
||||
|
||||
Time for a new release, this is a larger one!
|
||||
Main focus is improving video workflows which also brings full support for new [MiniMax H3](https://vladmandic.github.io/sdnext-docs/MiniMax) and [LTXVideo-2.5](https://vladmandic.github.io/sdnext-docs/LTX)
|
||||
@@ -17,7 +17,7 @@ Plus quite a lot more, see full [changelog](https://github.com/vladmandic/automa
|
||||
|
||||
[Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic)
|
||||
|
||||
## Details for 2026-08-22
|
||||
## Details for 2026-08-23
|
||||
|
||||
- **Models**
|
||||
- [MiniMax H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) available in *base* and *ref* variants
|
||||
@@ -83,7 +83,7 @@ Plus quite a lot more, see full [changelog](https://github.com/vladmandic/automa
|
||||
may provide significant speed-up on some gpus, disabled by default
|
||||
- AR display ratio on manual resolution change
|
||||
- **Wiki**
|
||||
- major updates: *Offload, Detailer, Video, MiniMax, LTX*
|
||||
- major updates: *Offload, Detailer, Video, MiniMax, LTX, Debug*
|
||||
- minor updates: *Intel-ARC, FramePack, Parameters, API, Installation, SDNQ-Quantization, CLI-Arguments*
|
||||
- **Removed**
|
||||
- remove DirectML support
|
||||
@@ -114,6 +114,7 @@ Plus quite a lot more, see full [changelog](https://github.com/vladmandic/automa
|
||||
- scripts: mixture-of-diffusers and mixture-tiling update to use igwn-segments
|
||||
- api: process
|
||||
- api: auth via remote-ip
|
||||
- api: improve response models
|
||||
- krea2: fallback to base pipeline/transformer for nunchaku-lite
|
||||
- torchsde: handle obsolete dependency
|
||||
- upscaler: avoid unnecessary multi-pass
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
## Short-term
|
||||
|
||||
- Update LTX wiki, @CalamitousFelicitousness
|
||||
- Lora: new handler, @CalamitousFelicitousness
|
||||
- Productize benchmark tool, @CalamitousFelicitousness
|
||||
- Inpaint: https://discord.com/channels/1101998836328697867/1130536562422186044/1506850651035144322, @vladmandic
|
||||
- Lora: new handler, @CalamitousFelicitousness
|
||||
- Control tab verify overrides handling, @vladmandic
|
||||
- Create pre-quant for LTX-2.5
|
||||
- Create pre-quant for MiniMax-H3-Turbo
|
||||
|
||||
+1
-1
Submodule extensions-builtin/sdnq updated: 21d60c8c3f...738613a62c
+3
-1
@@ -109,7 +109,9 @@ def custom_excepthook(exc_type, exc_value, exc_traceback):
|
||||
if exc_traceback:
|
||||
format_exception = traceback.format_tb(exc_traceback)
|
||||
for line in format_exception:
|
||||
log.error(repr(line))
|
||||
subline = line.split('\n')
|
||||
for sub in subline:
|
||||
log.error(repr(sub))
|
||||
|
||||
|
||||
def print_dict(d):
|
||||
|
||||
+3
-3
@@ -76,9 +76,9 @@ class Api:
|
||||
self.add_api_route("/sdapi/v1/extra-single-image", self.process.extras_single_image_api, methods=["POST"], response_model=models.ResProcessImage, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/process-batch", self.process.extras_batch_images_api, methods=["POST"], response_model=models.ResProcessBatch, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/extra-batch-images", self.process.extras_batch_images_api, methods=["POST"], response_model=models.ResProcessBatch, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/preprocess", self.process.post_preprocess, methods=["POST"], tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/mask", self.process.post_mask, methods=["POST"], tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/detect", self.process.post_detect, methods=["POST"], tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/preprocess", self.process.post_preprocess, methods=["POST"], response_model=models.ResPreprocess, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/mask", self.process.post_mask, methods=["POST"], response_model=process.ResMask, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/detect", self.process.post_detect, methods=["POST"], response_model=process.ResFace, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/detail", self.process.post_detail, methods=["POST"], response_model=models.ResDetail, tags=["Processing"])
|
||||
self.add_api_route("/sdapi/v1/prompt-enhance", self.process.post_prompt_enhance, methods=["POST"], response_model=models.ResPromptEnhance, tags=["Generation"])
|
||||
|
||||
|
||||
@@ -36,6 +36,10 @@ OPTS_FOLDERS = [
|
||||
class ReqFiles(BaseModel):
|
||||
folder: str = Field(title="Folder")
|
||||
|
||||
class ItemFolder(BaseModel):
|
||||
path: str = Field(title="Path", description="Folder path")
|
||||
label: str = Field(title="Label", description="Folder display label")
|
||||
|
||||
### ws connection manager
|
||||
|
||||
class ConnectionManager:
|
||||
@@ -206,7 +210,7 @@ def register_api(api): # register api
|
||||
debug(f'Browser folders allow: {path}')
|
||||
shared.demo.allowed_paths.append(path)
|
||||
debug(f'Browser folders: {unique_folders}')
|
||||
return JSONResponse(content=unique_folders)
|
||||
return unique_folders
|
||||
|
||||
# @app.get("/sdapi/v1/browser/thumb", response_model=dict)
|
||||
async def get_thumb(file: str, exif: bool = False):
|
||||
@@ -245,7 +249,7 @@ def register_api(api): # register api
|
||||
log.error(f'Gallery: {folder} {e}')
|
||||
return []
|
||||
|
||||
api.add_api_route("/sdapi/v1/browser/folders", get_folders, methods=["GET"], response_model=list[str])
|
||||
api.add_api_route("/sdapi/v1/browser/folders", get_folders, methods=["GET"], response_model=list[ItemFolder])
|
||||
api.add_api_route("/sdapi/v1/browser/thumb", get_thumb, methods=["GET"], response_model=dict)
|
||||
api.add_api_route("/sdapi/v1/browser/files", ht_files, methods=["GET"], response_model=list)
|
||||
|
||||
|
||||
@@ -338,6 +338,7 @@ def img2img(id_task: str, state: str, mode: int,
|
||||
if p.is_batch:
|
||||
process_batch(p, img2img_batch_files, img2img_batch_input_dir, img2img_batch_output_dir, img2img_batch_inpaint_mask_dir, args)
|
||||
processed = processing.get_processed(p, [], p.seed, "")
|
||||
processed = scripts_manager.scripts_img2img.after(p, processed, *args)
|
||||
else:
|
||||
processed = scripts_manager.scripts_img2img.run(p, *args)
|
||||
if processed is None:
|
||||
|
||||
+2
-2
@@ -148,6 +148,7 @@ def setup_logging(debug=None, trace=None, filename=None):
|
||||
class FileBuffer(RotatingFileHandler):
|
||||
def __init__(self, filename, maxBytes=32*1024*1024, backupCount=9, encoding='utf-8', delay=True):
|
||||
super().__init__(filename, maxBytes=maxBytes, backupCount=backupCount, encoding=encoding, delay=delay)
|
||||
self.ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]')
|
||||
if trace:
|
||||
self.formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s | %(module)s:%(pathname)s:%(lineno)d:%(message)s')
|
||||
else:
|
||||
@@ -156,8 +157,7 @@ def setup_logging(debug=None, trace=None, filename=None):
|
||||
def strip(self, line):
|
||||
if line is None:
|
||||
return ""
|
||||
ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]')
|
||||
return ansi_escape.sub('', str(line))
|
||||
return self.ansi_escape.sub('', str(line))
|
||||
|
||||
def emit(self, record):
|
||||
record.msg = self.strip(record.msg)
|
||||
|
||||
@@ -317,7 +317,7 @@ def convert_scheduler(root: Path, output: Path):
|
||||
|
||||
torch.testing.assert_close(scheduler.sigmas, source_scheduler.sigmas, rtol=0.0, atol=0.0)
|
||||
torch.testing.assert_close(scheduler.timesteps, source_scheduler.timesteps, rtol=0.0, atol=0.0)
|
||||
num_train_timesteps = int(scheduler.config.num_train_timesteps)
|
||||
num_train_timesteps = int(scheduler.config.num_train_timesteps) # pylint: disable=no-member
|
||||
expected_sigmas = torch.linspace(1.0, 1.0 / num_train_timesteps, num_train_timesteps)
|
||||
torch.testing.assert_close(scheduler.sigmas, expected_sigmas, rtol=0.0, atol=1e-7)
|
||||
torch.testing.assert_close(scheduler.timesteps, expected_sigmas * num_train_timesteps, rtol=0.0, atol=1e-4)
|
||||
|
||||
+1
-1
Submodule wiki updated: f2c955021c...b974e50847
Reference in New Issue
Block a user