This update brings many new major features to chaiNNer, including but not limited to conditional branching (via two new nodes: Conditional and Compare), node passthrough/skipping, new themes, PyTorch optimizations, and many more fixes and quality of life improvements all around.
The conditional and compare nodes bring a long-awaited feature: branching support. Well, mostly. These nodes allow you to switch between inputs based on a condition created by comparing two values in various ways. This means users can finally set up chains that do one thing under a certain condition and another thing under a different one (e.g. if an image is over a certain size vs under a certain size). The thing to keep in mind is how you have to set this up might be opposite of what's intuitive. Since you're switching between values, it's what comes before the condition that is decided between, not what comes after.
The disable toggle has also been replaced with a button that allows you to swap between three states: "enabled", "disabled", and "skipped". In skipped mode, the node will not be run, but it also will not disable downstream nodes like disabling it would. This is another heavily-requested feature that we are happy is finally in chaiNNer.
New themes can be selected in settings. This is semi-experimental as we plan on adding support for fully custom themes in the future, as well as improving the existing default selection. The current selection is mainly just a proof of concept to show that we can support themes of some kind, and also to give users some options for customization. We'd love to hear feedback on the current selection and if you have any suggestions on themes to add.
PyTorch upscaling has been heavily optimized. I was able to using a visual profiling tool (called VizTracer, which I highly recommend for anyone wanting to optimize a python project) to see what was slowing down upscaling. Upscaling has been optimized to a point where it's roughly 1.25x faster than it was before (though YMMV depending on what model you use, as well as other factors). While not perfect, it's still a large improvement and should help your PyTorch upscaling chains run faster.
Major Changes
- Support passthrough/skipping nodes by @RunDevelopment in #2805, #2864, #2887
- Add new themes by @joeyballentine in #2833, #2847, #2874, #2921
- Various optimizations to PyTorch upscaling by @joeyballentine in #2853, #2852, #2861, #2859, #2858, #2860, #2862, #2869, #2884, #2886
Minor Changes
- Add avif support by @the-database in #2820
- Add convolve usage example by @BigBoyBarney in #2827
- (PyTorch) Add custom tiling option by @the-database in #2828, #2870, #2880
- (PyTorch) Update spandrel (adds support for PLKSR, RealPLKSR, IPT, SAFMN_BCIE, DRCT) by @RunDevelopment in #2837, #2846
- Default chain file saving to documents folder by @joeyballentine in #2836
- Rename parameters of numeric inputs and clean up parameters by @RunDevelopment in #2863
- Increase font size for type tags by @RunDevelopment in #2865
- Make all Switch inputs optional by @RunDevelopment in #2867
- Slightly redesign the Math node by @RunDevelopment, @joeyballentine in #2868, #2873
- Better type errors for text nodes by @RunDevelopment in #2871
- Add "order" dropdown for both spritesheet nodes by @joeyballentine in #2878
- Improve style of multiline text area by @RunDevelopment in #2885
- Add a "simple" mode for saving video by @joeyballentine in #2879
- Slightly more space for text in dropdowns by @RunDevelopment in #2892
- Slightly more compact Save Video node by @RunDevelopment in #2893
- Optimize away Passthrough nodes by @RunDevelopment in #2896
- Add type color for Booleans by @joeyballentine in #2891
- Add type color for Colors by @joeyballentine in #2898, #2904
- Stricter condition for type assignability by @RunDevelopment in #2902
- Select best-matching node based on search query by @RunDevelopment in #2903
- Support connected handles with multiple colors by @RunDevelopment in #2906
- Better type error message for division by zero by @RunDevelopment in #2907
- Fix assignability for outputs with errors by @RunDevelopment in #2909
- Add special suggestion for Math and Compare nodes in node selector by @RunDevelopment in #2908
- Mention node names in error messages by @RunDevelopment in #2920
- Add similarity check to ONNX model conversions by @RunDevelopment in #2915
- Add support for ONNX type and tag broadcasting by @RunDevelopment in #2919
- Improve types for model conversion nodes by @RunDevelopment in #2925
New Nodes
- Add "Compare" & "Conditional" nodes by @RunDevelopment in #2866, #2895
- Add "Image Align with Rife" and "Wavelet Color Fix" Nodes by @pifroggi, @RunDevelopment in #2714, #2888, #2889
- Add "Regex Find" node by @RunDevelopment in #2855
- Add "Separate Color" node by @joeyballentine, @RunDevelopmentg in #2897, #2910
Bug Fixes
- Fixed input gathering for collectors by @RunDevelopment in #2818
- Use
atexit
to always kill worker by @RunDevelopment in #2822 - Rework GPU API to fix issues with older GPUs by @RunDevelopment in #2821
- Avoid RGB contamination by transparent pixels in "Color Transfer" node by @Splendide-Imaginarius in #2389
- Prevent chain files from being saved in install directory by @joeyballentine in #2835
- Fix that empty string was not allowed as the default value by @RunDevelopment in #2856
- Fix converting indexed PIL images to NumPy by @RunDevelopment in #2881
- Fix node documentation modal opening on reload by @joeyballentine in #2883
- Fix timing issue for lazy inputs by @RunDevelopment in #2890
- Prevent log spam by not logging useless stack traces by @RunDevelopment in #2900\
- Fix image pairs length validation when using limit by @joeyballentine in #2917
- (ONNX) Fix size requirement padding by @RunDevelopment in #2918
- Add status API to get executor status to prevent stale/stuck status by @RunDevelopment in #2928
New Contributors
- @the-database made their first contribution in #2820
- @pifroggi made their first contribution in #2714
Full Changelog: v0.23.2...v0.24.0