Skip to content

Releases: ljleb/sd-mecha

1.1.8

Choose a tag to compare

@ljleb ljleb released this 17 Aug 10:06
  • fix incorrect safetensors FP8 type name serialization

1.1.7

Choose a tag to compare

@ljleb ljleb released this 27 Jul 09:49
  • improve error message when merging gives an empty state dict
  • bring back the ability to merge the simplest recipes like sd.model() or sd.literal()

1.1.6

Choose a tag to compare

@ljleb ljleb released this 04 May 01:39
  • add model config property missing_key_handler, a .-separated python module path to a function that creates keys that are missing. this is useful to create for example zero-filled last CLIP block keys or the position_ids key when it's not present in the input model

1.1.4

Choose a tag to compare

@ljleb ljleb released this 18 Mar 21:10
  • better error message for bad type casts

1.1.3

Choose a tag to compare

@ljleb ljleb released this 14 Mar 18:53
91bcabb
  • completely determine the full merge plan before starting to merge using statically provided key mappings. this makes it possible to attempt to merge only the keys that are probably reachable. merge methods can still call sd_mecha.skip_key(key) to early exit.
  • refactor lycoris.py so that each type of lycoris network can be fully defined using a single class.
  • update sd_mecha.rotate using "differential steering" in function of alpha for the thin matrix case (a.mH @ b low rank)
  • update sd_mecha.truncate_rank to use a fixed integer rank as input.
  • new merge method sd_mecha.get_rank_from_ratio(a, ratio) -> int rank that propagates a different rank for each key based on the dimension of the key and the specified ratio.
  • close the builtin set of conversion merge methods: if a config A is convertible to B, then there is a way to convert B to A.
  • add optional scheduler: component keys to the sdxl-sgm config to recognize them
  • sd_mecha.extensions.merge_spaces.get_all() now returns a list instead of a set for stable merge space iteration order.
  • almost completely rewrite graph_finalization.py to fix dozens of edge cases
  • update sd_mecha.helpers to use the latest signature of sd_mecha.merge
  • add a __metadata__ key to state dicts merged in memory when the recipe is serializable
  • change the error handling logic in sd_mecha.merge so that errors bubble up quicker
  • checks for non-finite values directly from model/literal inputs and at final merged outputs
  • add parameter sd_mecha.serialize(finalize=True|False) to allow users to avoid re-finalizing already-finalized recipes
  • refactor the few boolean parameters of sd_mecha.merge() to clarify their purpose.
  • new parameter sd_mecha.merge_method(cache_factory=...) to specify the constructor of cache objects, defaults to lambda: None
  • new parameter sd_mecha.merge_method(reuse_outputs=True|False) (default True) to inform the intermediates memoizing allocator that the merge method is cheap and its instances don't need outputs caching in any situation
  • new member MergeMethod.create_cache() that instantiates a new cache object.
  • merge method cache sd_mecha.merge(cache=...) can now be filled using {node: node.create_cache() for node in recipe}
  • revamp key mapping to allow full cartesian products, i.e.(b.keys[k1] | b.keys[k2]) & b.keys[k3]. each clause separated by | can have its own meta object, and for cartesian products, meta objects are composed using |.
  • fix sd_mecha.fallback using the new key mapping feature

1.1.2

Choose a tag to compare

@ljleb ljleb released this 12 Mar 11:33
  • hotfix for the new cache mechanism
  • hotfix for sd_mecha.extensions.model_dirs
  • make interface object accessible from merge methods with mm.interface

1.1.0 (#79)

Choose a tag to compare

@ljleb ljleb released this 12 Mar 07:47
bab40d9
  • sd_mecha.rebasin, sd_mecha.align_attention primitives
  • dynamic dispatch based on model config and merge space (interfaces)
  • entire rework of the recipe graph type inference logic (sd_mecha.graph_finalization)
  • class merge methods with self object persisted for each call to merge()
  • new property "output_reused" in merge method **kwargs: False when a same output key will be requested many times and the merge method was defined with reuse_outputs=True.
  • multi-output merge methods: merge method invocations can now return multiple keys at a time
  • huge optimization of recipe graphs containing nodes that produce for >= 2 subsequent nodes
  • rework of the API for merge methods that convert model configs: input/ouput keys mapping must be specified explicitly
  • model_dirs is now a module-wise configurable variable
  • redesign the mm caching mechanism to avoid having to recreate/mutate the entire merge graph
  • avoid merging optional keys from inputs with non-finite values
  • and many more details and bug fixes

1.1.0-rc3

1.1.0-rc3 Pre-release
Pre-release

Choose a tag to compare

@ljleb ljleb released this 11 Mar 23:57
  • fix threads > 1

1.1.0-rc1

1.1.0-rc1 Pre-release
Pre-release

Choose a tag to compare

@ljleb ljleb released this 04 Mar 04:39
  • rebasin, attention alignment primitives
  • dynamic dispatch based on model config and merge space (interfaces)
  • entire rework of the recipe graph type inference logic (sd_mecha.graph_finalization)
  • class merge methods with self object persisted for each call to merge()
  • multi-output merge methods: merge method invocations can now return multiple keys at a time
  • huge optimization of recipe graphs containing nodes that produce for >= 2 subsequent nodes
  • rework of the API for merge methods that convert model configs: input/ouput keys mapping must be specified explicitly
  • model_dirs is now a module-wise configurable variable
  • redesign the mm caching mechanism to avoid having to recreate/mutate the entire merge graph
  • and many more details and bug fixes

1.0.14

Choose a tag to compare

@ljleb ljleb released this 01 Dec 03:06
833b0e8
  • Fix structural config merging