diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f628a06 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,26 @@ +# Change Log +Formatting: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), [Semantic Versioning](https://semver.org/spec/v2.0.0.html) + +## [2.0.0] - 2024-1-24 + +### Added +- A changelog +- Faster model loading by hooking the model dropdown and immediately sending sync requests +- Popups in UI to lessen the need to check the status tab +- A debug option for resetting error correction at runtime +- Experimental "Pixel Cap" setting under worker config UI tab for limiting pixels allocated to a given worker + +### Changed +- From a selectable script to an **AlwaysOn** style extension +- Thin-client mode will lack function for now +- Renamed main extension file from `extension.py` -> `distributed.py` to help with config grouping +- The log file (`distributed.log`) will max out at a size of 10MB and rotate over +- All relevant UI components are returned by ui() which has implications for API usage + +### Fixed +- Connection check ping not always being sent on startup +- Old issue where benchmarking could become inaccurate due to models not being loaded on every machine [#11](https://github.com/papuSpartan/stable-diffusion-webui-distributed/issues/11) +- Worker randomly disconnecting when under high load due to handling a previous request + +### Removed +- Certain superfluous warnings in logs related to third party extensions \ No newline at end of file diff --git a/scripts/spartan/ui.py b/scripts/spartan/ui.py index fd477ac..9d649ed 100644 --- a/scripts/spartan/ui.py +++ b/scripts/spartan/ui.py @@ -347,7 +347,7 @@ class UI: with gradio.Tab('Settings'): thin_client_cbx = gradio.Checkbox( label='Thin-client mode (experimental)', - info="Only generate images using remote workers. There will be no previews when enabled.", + info="(BROKEN) Only generate images using remote workers. There will be no previews when enabled.", value=self.world.thin_client_mode ) job_timeout = gradio.Number( diff --git a/scripts/spartan/world.py b/scripts/spartan/world.py index 802deb2..f06380c 100644 --- a/scripts/spartan/world.py +++ b/scripts/spartan/world.py @@ -511,16 +511,16 @@ class World: ##################################### # Now that this worker would (otherwise) not be doing anything, see if it can still do something. - # Calculate how many images it can output in the time that it takes the slowest real-time worker to do so. + # Calculate how many images it can output in the time that it takes the fastest real-time worker to do so. for job in self.jobs: if job.complementary is False: continue - slowest_active_worker = self.fastest_realtime_job().worker + fastest_active = self.fastest_realtime_job().worker for j in self.jobs: - if j.worker.label == slowest_active_worker.label: - slack_time = slowest_active_worker.batch_eta(payload=payload, batch_size=j.batch_size) + self.job_timeout + if j.worker.label == fastest_active.label: + slack_time = fastest_active.batch_eta(payload=payload, batch_size=j.batch_size) + self.job_timeout logger.debug(f"There's {slack_time:.2f}s of slack time available for worker '{job.worker.label}'") # see how long it would take to produce only 1 image on this complementary worker @@ -615,9 +615,9 @@ class World: config = ConfigModel(**config_raw) # saves config schema to /distributed-config.schema.json - # print(models.Config.schema_json()) - # with open(self.extension_path.joinpath("distributed-config.schema.json"), "w") as schema_file: - # json.dump(json.loads(models.Config.schema_json()), schema_file, indent=3) + # print(ConfigModel.schema_json()) + # with open(extension_path.joinpath("distributed-config.schema.json"), "w") as schema_file: + # json.dump(json.loads(ConfigModel.schema_json()), schema_file, indent=3) for w in config.workers: label = next(iter(w.keys())) @@ -628,6 +628,7 @@ class World: sh.benchmark_payload = Benchmark_Payload(**config.benchmark_payload) self.job_timeout = config.job_timeout + self.enabled = config.enabled logger.debug("config loaded")