Hey everyone. It's been a while since the last update, and in my opinion, it's been worth the wait. We have a lot of interesting improvements and new features to share with all of you.
First, we now have documentation for all available nodes. This can be accessed both by a button in the top right button bar, as well as by right-clicking on a node in the sidebar and clicking "Open Documentation". The documentation includes a lot of information about nodes and their inputs & outputs. Not to mention, the docs are also searchable. This will hopefully be a huge help to both new and existing users.
Second, the update screen has finally received a makeover. This has been a long-overdue change. Starting with 0.19.0, you will get a popup when there is a new update, which will have an option for ignoring the update or viewing the update's changelog. If you view the changelog, a modal will open that will show you a full changelog of the update -- or multiple updates if you happen to be a few versions behind. From there you can view the release on GitHub or open chaiNNer.app to download it. If you do choose to ignore the update, don't worry, because you will see a green download indicator next to chaiNNer's version number which you can click on to view the update again.
Third, we've made some improvements to how the backend sets up chaiNNer. This is mostly to prep for future features, but it also conveniently makes it slightly easier to set up chaiNNer on a remote machine, as all the necessary dependencies will be installed via the backend, instead of the frontend. This shouldn't affect existing users much, except you may notice that on starting up chaiNNer this time you see a slightly different progress indication on the splash screen as it installs the few new necessary dependencies. We also now bundle a couple of small, cross-platform dependencies that should make first-time setup a bit faster. If anyone is having trouble with the new first-time setup process, definitely let us know ASAP.
Fourth, chaiNNer is now taking advantage of some first-party Rust code. This means we were able to speed up certain nodes by a significant amount. Expect future updates to improve the speed of other nodes as we move some intensive operations over to Rust.
And now for the changelog:
Major Changes
- Node Documentation (#1880, #1900, #1902, #1923, #1925, #1928, #1926, #1932, #1929, #1930, #1937, #1946, #1950, #1952, #1956, #1961, #1962, #1963, #1993, #1992, #1995, #2004, #2009, #2017)
- Update checking improvement (#1935)
- Mandatory dependencies now get installed via the backend (#1834, #1856, #1862, #1863, #1866, #1869, #1881, #1882, #1878, #1885, #1960)
- New design for sliders (#1966, #1971, #1976, #1975, #1977, #1986, #1987, #1988)
Minor Changes
- Added Contrast-Adaptive-Sharpening to High Boost Filter (#1841)
- Added weight loading for NCNN Scale op and fix InnerProduct bug (#1864)
- Use
chainner_ext
(rust code) for Fill Alpha (#1865) - Added nearest color mode for Fill Alpha (#1883)
- Allow color inputs in merge transparency (#1888)
- Improved type error messages for colors (#1889)
- Add a wcmatch.glob field to image iterator (#1840, #1939, thanks @zeptofine)
- Hide unimportant labels (#1919)
- Add more algorithms to the Color Transfer node (#1903, thanks @adegerard)
- Update pytorch model file input label (#1927)
- Add window size detection to OmniSR (#1933)
- Splash screen is no longer always on top (#1938)
- Better computed alpha for upscaling nodes (#1942)
- Move system stats to backend (#1948)
- Changed empty-string behavior of text inputs (#1954)
- Shorter names for channel inputs/outputs in Split/Merge Transparency (#1967)
- Stack many images on Stack node (#1972)
- Consistently use sliders for blur radius-like number inputs (#1973, #1978)
- Optimized box blur implementation (#1974)
- Optimized Gaussian blur (#1981)
- Input number on enter (#1982)
- Variable precision for log-scale sliders (#1984)
- Added context menu entry to extract value into node (#1985)
- Added linked inputs group (implemented for Box Blur) (#1983)
- Use slider in Gamma node (#1989)
- Renamed "LUT" to "color palette" (#1991)
- Simplified printed structs by omitting default fields (#2003)
- Use a later version of pytorch that supports MPS for Arm MacOS (#2012)
- Update ONNX + ONNXRuntime & Improvements for ONNX on MacOS (#2010)
- Some UI fine-tuning around GPU selection on Mac (#2020, thanks @stonerl)
New Nodes
- Image Statistic (#1748)
- A node to get the min, max, mean, media, n-th percentile of an image.
- Get Bounding Box (#1884, #1901, thanks @zeptofine)
- Like Crop Content except it returns a bounding box insted of cropping.
- Regex Replace (#1893)
- Like Text Replace, but uses a regex search.
- Fast NL means (#1890, thanks @adegerard)
- Uses Fast NL means to denoise an image.
- Pick Color (#1913)
- Grab the color of a pixel in an image.
- Directory (#1921)
- Pick a directory and reuse it throughout the chain, like you can with numbers and strings currently.
- Switch (#1945)
- Connect multiple inputs and select which one you want to output.
- Stretch Contrast (#1959)
- Auto-levels-like functionality. Automatically improves contrast.
Bug Fixes
- Fixed 2 bugs in Dither Palette (#1844)
- Fixed Unsharp Mask modifying input image (#1851)
- Fixed bug with CLI mode timing out if it took too long to process (#1853)
- Fixed settings dropdowns where invalid values would get stuck with no way to change them (#1876)
- Fixed error reporting (#1908)
- Fixed ordered dithering (#1911)
- Don't check whether the directory exists in Save Image (#1912)
- Require RGB in Write Output Frame (#1920)
- Fixed linux & macos RAM usage reporting (#1948)
- Fixed wide dropdowns (#1958)
- Fixed round-half-up for negative integers (#1970)
- Enforce non-empty images (#1997)
- Add color limit for Palette from Image (#2005)
- Always estimate tile size as 256 on Mac for NCNN (#2006)
- Changed default tile size to 256 for ONNX (#2007)
Dev Changes
- Backend-defined dependencies (#1834, #1856, #1862, #1863, #1866, #1869, #1881, #1882, #1878, #1885, #1960)
- Backend-defined GPU list (#1877, #1879)
- Added more contribution documentation (#1837, #1847, #1848, #1894, #2019)
- Added emoji support for node icons (#1831, thanks @jackcarey)
- Fixed backend script path detection with external Electron (#1839, thanks @JeremyRand)
- Added
--devtools
argument (#1849, thanks @JeremyRand) - Support NCNN CPU inference (#1867, thanks @JeremyRand)
- Change
--no-backend
boolean arg to--remote-backend=<url>
(#1957) - Enforce naming conventions (#1968, #1969)
- Upgrade to Navi 0.6.0 (#2001)
- Update minor/patch version of electron (#2022)
And of course thanks to the regular maintainers of the project: @joeyballentine @RunDevelopment @theflyingzamboni