From 73de2781a902e5ce655a101baede40af0e423684 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sat, 5 Apr 2025 21:20:59 -0400 Subject: [PATCH] new tauri app runs --- Cargo.lock | 549 +++++++++--------- crates/desktop/tauri-4o/Cargo.toml | 28 +- .../desktop/tauri-4o/binary_includes/1024.png | Bin 8630 -> 0 bytes .../tauri-4o/src/endpoints/download_models.rs | 12 - .../src/endpoints/inpaint_image_endpoint.rs | 13 - crates/desktop/tauri-4o/src/endpoints/mod.rs | 6 - .../src/endpoints/realtime_image_endpoint.rs | 148 ----- .../endpoints/remove_background_endpoint.rs | 45 -- .../src/endpoints/save_image_endpoint.rs | 38 -- .../src/endpoints/text_to_image_endpoint.rs | 114 ---- crates/desktop/tauri-4o/src/lib.rs | 30 +- crates/desktop/tauri-4o/src/main.rs | 9 - .../desktop/tauri-4o/src/state/app_config.rs | 4 - crates/desktop/tauri-4o/src/state/app_dir.rs | 5 - crates/desktop/tauri-4o/src/stubs/mod.rs | 3 - .../desktop/tauri-4o/src/stubs/model_cache.rs | 14 - .../tauri-4o/src/stubs/model_config.rs | 14 - .../tauri-4o/src/stubs/prompt_cache.rs | 15 - .../tauri-4o/src/threads/downloader_thread.rs | 193 ------ crates/desktop/tauri-4o/src/threads/mod.rs | 1 - .../src/utils/log_environment_details.rs | 11 - crates/desktop/tauri-4o/src/utils/mod.rs | 3 +- crates/desktop/tauri-realtime/Cargo.toml | 6 +- 23 files changed, 275 insertions(+), 986 deletions(-) delete mode 100644 crates/desktop/tauri-4o/binary_includes/1024.png delete mode 100644 crates/desktop/tauri-4o/src/endpoints/download_models.rs delete mode 100644 crates/desktop/tauri-4o/src/endpoints/inpaint_image_endpoint.rs delete mode 100644 crates/desktop/tauri-4o/src/endpoints/realtime_image_endpoint.rs delete mode 100644 crates/desktop/tauri-4o/src/endpoints/remove_background_endpoint.rs delete mode 100644 crates/desktop/tauri-4o/src/endpoints/save_image_endpoint.rs delete mode 100644 crates/desktop/tauri-4o/src/endpoints/text_to_image_endpoint.rs delete mode 100644 crates/desktop/tauri-4o/src/stubs/mod.rs delete mode 100644 crates/desktop/tauri-4o/src/stubs/model_cache.rs delete mode 100644 crates/desktop/tauri-4o/src/stubs/model_config.rs delete mode 100644 crates/desktop/tauri-4o/src/stubs/prompt_cache.rs delete mode 100644 crates/desktop/tauri-4o/src/threads/downloader_thread.rs delete mode 100644 crates/desktop/tauri-4o/src/threads/mod.rs delete mode 100644 crates/desktop/tauri-4o/src/utils/log_environment_details.rs diff --git a/Cargo.lock b/Cargo.lock index dea359bc41..29c5eb071f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -805,6 +805,42 @@ dependencies = [ "num", ] +[[package]] +name = "artcraft" +version = "0.1.0" +dependencies = [ + "anyhow", + "assertor", + "base64 0.22.1", + "bytes 1.10.0", + "chrono", + "const_format", + "crockford", + "directories 6.0.0", + "dirs 6.0.0", + "filesys", + "futures 0.3.29", + "image", + "libloading 0.8.6", + "log", + "memory_caching", + "once_cell", + "primitives", + "rand 0.8.5", + "reqwest 0.12.15", + "serde", + "serde_json", + "serde_yaml", + "serial_test", + "tauri", + "tauri-build", + "tauri-plugin-log", + "tempdir", + "tempfile", + "tokio", + "tokio-util", +] + [[package]] name = "ascii" version = "0.9.3" @@ -1339,6 +1375,15 @@ dependencies = [ "objc2 0.5.2", ] +[[package]] +name = "block2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d59b4c170e16f0405a2e95aff44432a0d41aa97675f3d52623effe95792a037" +dependencies = [ + "objc2 0.6.0", +] + [[package]] name = "blowfish" version = "0.9.1" @@ -1833,9 +1878,9 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.21.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fbd1fe9db3ebf71b89060adaf7b0504c2d6a425cf061313099547e382c2e472" +checksum = "02260d489095346e5cafd04dea8e8cb54d1d74fcd759022a9b72986ebe9a1257" dependencies = [ "serde", "toml 0.8.14", @@ -2109,36 +2154,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "cocoa" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" -dependencies = [ - "bitflags 2.5.0", - "block", - "cocoa-foundation", - "core-foundation 0.10.0", - "core-graphics", - "foreign-types 0.5.0", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" -dependencies = [ - "bitflags 2.5.0", - "block", - "core-foundation 0.10.0", - "core-graphics-types 0.2.0", - "libc", - "objc", -] - [[package]] name = "collections" version = "0.0.1" @@ -3683,9 +3698,9 @@ dependencies = [ [[package]] name = "embed-resource" -version = "2.5.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68b6f9f63a0b6a38bc447d4ce84e2b388f3ec95c99c641c8ff0dd3ef89a6379" +checksum = "7fbc6e0d8e0c03a655b53ca813f0463d2c956bc4db8138dbc89f120b066551e3" dependencies = [ "cc", "memchr", @@ -5416,9 +5431,9 @@ dependencies = [ [[package]] name = "ico" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +checksum = "cc50b891e4acf8fe0e71ef88ec43ad82ee07b3810ad09de10f1d01f072ed4b98" dependencies = [ "byteorder", "png", @@ -5726,6 +5741,15 @@ dependencies = [ "cfb", ] +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + [[package]] name = "inference-job" version = "0.0.1" @@ -7069,21 +7093,22 @@ dependencies = [ [[package]] name = "muda" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdae9c00e61cc0579bcac625e8ad22104c60548a025bfc972dc83868a28e1484" +checksum = "4de14a9b5d569ca68d7c891d613b390cf5ab4f851c77aaa2f9e435555d3d9492" dependencies = [ "crossbeam-channel", "dpi", "gtk", "keyboard-types", - "objc2 0.5.2", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-core-foundation", + "objc2-foundation 0.3.0", "once_cell", "png", "serde", - "thiserror 1.0.63", + "thiserror 2.0.11", "windows-sys 0.59.0", ] @@ -7591,9 +7616,6 @@ name = "objc-sys" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" -dependencies = [ - "cc", -] [[package]] name = "objc2" @@ -7612,82 +7634,80 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" dependencies = [ "objc2-encode", + "objc2-exception-helper", ] [[package]] name = "objc2-app-kit" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +checksum = "5906f93257178e2f7ae069efb89fbd6ee94f0592740b5f8a1512ca498814d0fb" dependencies = [ "bitflags 2.5.0", - "block2", + "block2 0.6.0", "libc", - "objc2 0.5.2", + "objc2 0.6.0", + "objc2-cloud-kit", "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", "objc2-core-image", - "objc2-foundation 0.2.2", - "objc2-quartz-core", + "objc2-foundation 0.3.0", + "objc2-quartz-core 0.3.0", ] [[package]] name = "objc2-cloud-kit" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +checksum = "6c1948a9be5f469deadbd6bcb86ad7ff9e47b4f632380139722f7d9840c0d42c" dependencies = [ "bitflags 2.5.0", - "block2", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-foundation 0.3.0", ] [[package]] name = "objc2-core-data" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +checksum = "1f860f8e841f6d32f754836f51e6bc7777cd7e7053cf18528233f6811d3eceb4" dependencies = [ "bitflags 2.5.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-foundation 0.3.0", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daeaf60f25471d26948a1c2f840e3f7d86f4109e3af4e8e4b5cd70c39690d925" +dependencies = [ + "bitflags 2.5.0", + "objc2 0.6.0", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dca602628b65356b6513290a21a6405b4d4027b8b250f0b98dddbb28b7de02" +dependencies = [ + "bitflags 2.5.0", + "objc2 0.6.0", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] name = "objc2-core-image" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +checksum = "6ffa6bea72bf42c78b0b34e89c0bafac877d5f80bf91e159a5d96ea7f693ca56" dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal", -] - -[[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-contacts", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-foundation 0.3.0", ] [[package]] @@ -7696,6 +7716,15 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + [[package]] name = "objc2-foundation" version = "0.2.2" @@ -7703,7 +7732,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.5.0", - "block2", + "block2 0.5.1", "libc", "objc2 0.5.2", ] @@ -7715,19 +7744,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" dependencies = [ "bitflags 2.5.0", + "block2 0.6.0", + "libc", "objc2 0.6.0", + "objc2-core-foundation", ] [[package]] -name = "objc2-link-presentation" -version = "0.2.2" +name = "objc2-io-surface" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +checksum = "161a8b87e32610086e1a7a9e9ec39f84459db7b3a0881c1f16ca5a2605581c19" dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", + "bitflags 2.5.0", + "objc2 0.6.0", + "objc2-core-foundation", ] [[package]] @@ -7737,7 +7768,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.5.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", ] @@ -7749,78 +7780,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.5.0", - "block2", + "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", "objc2-metal", ] [[package]] -name = "objc2-symbols" -version = "0.2.2" +name = "objc2-quartz-core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +checksum = "6fb3794501bb1bee12f08dcad8c61f2a5875791ad1c6f47faa71a0f033f20071" dependencies = [ - "objc2 0.5.2", - "objc2-foundation 0.2.2", + "bitflags 2.5.0", + "objc2 0.6.0", + "objc2-foundation 0.3.0", ] [[package]] name = "objc2-ui-kit" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +checksum = "777a571be14a42a3990d4ebedaeb8b54cd17377ec21b92e8200ac03797b3bee1" dependencies = [ "bitflags 2.5.0", - "block2", - "objc2 0.5.2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation 0.2.2", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.5.0", - "block2", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", + "objc2 0.6.0", + "objc2-core-foundation", + "objc2-foundation 0.3.0", ] [[package]] name = "objc2-web-kit" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bc69301064cebefc6c4c90ce9cba69225239e4b8ff99d445a2b5563797da65" +checksum = "b717127e4014b0f9f3e8bba3d3f2acec81f1bde01f656823036e823ed2c94dce" dependencies = [ "bitflags 2.5.0", - "block2", - "objc2 0.5.2", + "block2 0.6.0", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-core-foundation", + "objc2-foundation 0.3.0", ] [[package]] @@ -10851,7 +10851,7 @@ dependencies = [ "log", "objc2 0.5.2", "objc2-foundation 0.2.2", - "objc2-quartz-core", + "objc2-quartz-core 0.2.2", "raw-window-handle", "redox_syscall 0.5.2", "wasm-bindgen", @@ -11931,12 +11931,11 @@ dependencies = [ [[package]] name = "tao" -version = "0.31.1" +version = "0.32.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3731d04d4ac210cd5f344087733943b9bfb1a32654387dad4d1c70de21aee2c9" +checksum = "63c8b1020610b9138dd7b1e06cf259ae91aa05c30f3bd0d6b42a03997b92dec1" dependencies = [ "bitflags 2.5.0", - "cocoa", "core-foundation 0.10.0", "core-graphics", "crossbeam-channel", @@ -11953,7 +11952,9 @@ dependencies = [ "ndk 0.9.0", "ndk-context", "ndk-sys 0.6.0+11769913", - "objc", + "objc2 0.6.0", + "objc2-app-kit", + "objc2-foundation 0.3.0", "once_cell", "parking_lot 0.12.2", "raw-window-handle", @@ -11961,8 +11962,8 @@ dependencies = [ "tao-macros", "unicode-segmentation", "url", - "windows 0.58.0", - "windows-core 0.58.0", + "windows 0.60.0", + "windows-core 0.60.1", "windows-version", "x11-dl", ] @@ -12003,9 +12004,9 @@ checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tauri" -version = "2.2.5" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58a998b6be84104ca05c7e9a21f2180ddec020c8b84ea59a8fc8530a2a19588d" +checksum = "4d08db1ff9e011e04014e737ec022610d756c0eae0b3b3a9037bccaf3003173a" dependencies = [ "anyhow", "bytes 1.10.0", @@ -12023,9 +12024,9 @@ dependencies = [ "log", "mime", "muda", - "objc2 0.5.2", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-foundation 0.3.0", "percent-encoding", "plist", "raw-window-handle", @@ -12048,59 +12049,18 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows 0.58.0", -] - -[[package]] -name = "tauri-4o" -version = "0.1.0" -dependencies = [ - "anyhow", - "assertor", - "base64 0.22.1", - "bytes 1.10.0", - "chrono", - "const_format", - "crockford", - "cudarc", - "directories 6.0.0", - "dirs 6.0.0", - "filesys", - "futures 0.3.29", - "half", - "image", - "libloading 0.8.6", - "log", - "memory_caching", - "ml_models", - "ml_weights_registry", - "once_cell", - "ort", - "primitives", - "rand 0.8.5", - "reqwest 0.12.15", - "serde", - "serde_json", - "serde_yaml", - "serial_test", - "tauri", - "tauri-build", - "tauri-plugin-log", - "tempdir", - "tempfile", - "tokio", - "tokio-util", + "windows 0.60.0", ] [[package]] name = "tauri-build" -version = "2.0.5" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e950124f6779c6cf98e3260c7a6c8488a74aa6350dd54c6950fdaa349bca2df" +checksum = "0fd20e4661c2cce65343319e6e8da256958f5af958cafc47c0d0af66a55dcd17" dependencies = [ "anyhow", "cargo_toml", - "dirs 5.0.1", + "dirs 6.0.0", "glob", "heck 0.5.0", "json-patch", @@ -12116,9 +12076,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.4" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f77894f9ddb5cb6c04fcfe8c8869ebe0aded4dabf19917118d48be4a95599ab5" +checksum = "458258b19032450ccf975840116ecf013e539eadbb74420bd890e8c56ab2b1a4" dependencies = [ "base64 0.22.1", "brotli 7.0.0", @@ -12143,9 +12103,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.4" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3240a5caed760a532e8f687be6f05b2c7d11a1d791fb53ccc08cfeb3e5308736" +checksum = "d402813d3b9c773a0fa58697c457c771f10e735498fdcb7b343264d18e5a601f" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -12157,9 +12117,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.4" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5841b9a0200e954ef7457f8d327091424328891e267a97b641dc246cc54d0dec" +checksum = "a4190775d6ff73fe66d9af44c012739a2659720efd9c0e1e56a918678038699d" dependencies = [ "anyhow", "glob", @@ -12237,10 +12197,11 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.3.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2274ef891ccc0a8d318deffa9d70053f947664d12d58b9c0d1ae5e89237e01f7" +checksum = "00ada7ac2f9276f09b8c3afffd3215fd5d9bff23c22df8a7c70e7ef67cacd532" dependencies = [ + "cookie 0.18.1", "dpi", "gtk", "http 1.1.0", @@ -12251,22 +12212,23 @@ dependencies = [ "tauri-utils", "thiserror 2.0.11", "url", - "windows 0.58.0", + "windows 0.60.0", ] [[package]] name = "tauri-runtime-wry" -version = "2.3.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3707b40711d3b9f6519150869e358ffbde7c57567fb9b5a8b51150606939b2a0" +checksum = "cf2e5842c57e154af43a20a49c7efee0ce2578c20b4c2bdf266852b422d2e421" dependencies = [ "gtk", "http 1.1.0", "jni", "log", - "objc2 0.5.2", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-foundation 0.3.0", + "once_cell", "percent-encoding", "raw-window-handle", "softbuffer", @@ -12276,16 +12238,17 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows 0.58.0", + "windows 0.60.0", "wry", ] [[package]] name = "tauri-utils" -version = "2.1.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fb10e7cc97456b2d5b9c03e335b5de5da982039a303a20d10006885e4523a0" +checksum = "1f037e66c7638cc0a2213f61566932b9a06882b8346486579c90e4b019bac447" dependencies = [ + "anyhow", "brotli 7.0.0", "cargo_metadata", "ctor", @@ -12293,7 +12256,7 @@ dependencies = [ "glob", "html5ever", "http 1.1.0", - "infer 0.16.0", + "infer 0.19.0", "json-patch", "kuchikiki", "log", @@ -12319,12 +12282,12 @@ dependencies = [ [[package]] name = "tauri-winres" -version = "0.1.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +checksum = "56eaa45f707bedf34d19312c26d350bc0f3c59a47e58e8adbeecdc850d2c13a0" dependencies = [ "embed-resource", - "toml 0.7.8", + "toml 0.8.14", ] [[package]] @@ -13077,22 +13040,23 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d48a05076dd272615d03033bf04f480199f7d1b66a8ac64d75c625fc4a70c06b" +checksum = "d433764348e7084bad2c5ea22c96c71b61b17afe3a11645710f533bd72b6a2b5" dependencies = [ - "core-graphics", "crossbeam-channel", - "dirs 5.0.1", + "dirs 6.0.0", "libappindicator", "muda", - "objc2 0.5.2", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.0", "once_cell", "png", "serde", - "thiserror 1.0.63", + "thiserror 2.0.11", "windows-sys 0.59.0", ] @@ -13202,7 +13166,7 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.0", + "cfg-if 0.1.10", "static_assertions", ] @@ -13966,14 +13930,14 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "823e7ebcfaea51e78f72c87fc3b65a1e602c321f407a0b36dbb327d7bb7cd921" +checksum = "b0d606f600e5272b514dbb66539dd068211cc20155be8d3958201b4b5bd79ed3" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.58.0", - "windows-core 0.58.0", + "windows 0.60.0", + "windows-core 0.60.1", "windows-implement", "windows-interface", ] @@ -13991,13 +13955,13 @@ dependencies = [ [[package]] name = "webview2-com-sys" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a82bce72db6e5ee83c68b5de1e2cd6ea195b9fbff91cb37df5884cbe3222df4" +checksum = "bfb27fccd3c27f68e9a6af1bcf48c2d82534b8675b83608a4d81446d095a17ac" dependencies = [ - "thiserror 1.0.63", - "windows 0.58.0", - "windows-core 0.58.0", + "thiserror 2.0.11", + "windows 0.60.0", + "windows-core 0.60.1", ] [[package]] @@ -14071,13 +14035,14 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-vibrancy" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" dependencies = [ - "objc2 0.5.2", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-core-foundation", + "objc2-foundation 0.3.0", "raw-window-handle", "windows-sys 0.59.0", "windows-version", @@ -14105,12 +14070,24 @@ dependencies = [ [[package]] name = "windows" -version = "0.58.0" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "ddf874e74c7a99773e62b1c671427abf01a425e77c3d3fb9fb1e4883ea934529" dependencies = [ - "windows-core 0.58.0", - "windows-targets 0.52.6", + "windows-collections", + "windows-core 0.60.1", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5467f79cc1ba3f52ebb2ed41dbb459b8e7db636cc3429458d9a852e15bc24dec" +dependencies = [ + "windows-core 0.60.1", ] [[package]] @@ -14143,22 +14120,32 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.58.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "ca21a92a9cae9bf4ccae5cf8368dce0837100ddf6e6d57936749e85f152f6247" dependencies = [ "windows-implement", "windows-interface", - "windows-result 0.2.0", - "windows-strings 0.1.0", - "windows-targets 0.52.6", + "windows-link", + "windows-result 0.3.2", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a787db4595e7eb80239b74ce8babfb1363d8e343ab072f2ffe901400c03349f0" +dependencies = [ + "windows-core 0.60.1", + "windows-link", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" dependencies = [ "proc-macro2", "quote", @@ -14167,9 +14154,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", @@ -14182,6 +14169,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +[[package]] +name = "windows-numerics" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "005dea54e2f6499f2cee279b8f703b3cf3b5734a2d8d21867c8f44003182eeed" +dependencies = [ + "windows-core 0.60.1", + "windows-link", +] + [[package]] name = "windows-registry" version = "0.4.0" @@ -14189,7 +14186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ "windows-result 0.3.2", - "windows-strings 0.3.1", + "windows-strings", "windows-targets 0.53.0", ] @@ -14202,15 +14199,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-result" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-result" version = "0.3.2" @@ -14220,16 +14208,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-strings" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" -dependencies = [ - "windows-result 0.2.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows-strings" version = "0.3.1" @@ -14587,12 +14565,12 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "wry" -version = "0.48.1" +version = "0.50.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e33c08b174442ff80d5c791020696f9f8b4e4a87b8cfc7494aad6167ec44e1" +checksum = "b19b78efae8b853c6c817e8752fc1dbf9cab8a8ffe9c30f399bd750ccf0f0730" dependencies = [ "base64 0.22.1", - "block2", + "block2 0.6.0", "cookie 0.18.1", "crossbeam-channel", "dpi", @@ -14606,9 +14584,10 @@ dependencies = [ "kuchikiki", "libc", "ndk 0.9.0", - "objc2 0.5.2", + "objc2 0.6.0", "objc2-app-kit", - "objc2-foundation 0.2.2", + "objc2-core-foundation", + "objc2-foundation 0.3.0", "objc2-ui-kit", "objc2-web-kit", "once_cell", @@ -14622,8 +14601,8 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.58.0", - "windows-core 0.58.0", + "windows 0.60.0", + "windows-core 0.60.1", "windows-version", "x11-dl", ] diff --git a/crates/desktop/tauri-4o/Cargo.toml b/crates/desktop/tauri-4o/Cargo.toml index bb9e710db7..a2aa698e5d 100644 --- a/crates/desktop/tauri-4o/Cargo.toml +++ b/crates/desktop/tauri-4o/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "tauri-4o" +name = "artcraft" version = "0.1.0" -description = "A Tauri App" +description = "Artcraft" authors = ["you"] license = "" repository = "" @@ -16,7 +16,7 @@ name = "app_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] -tauri-build = { version = "2.0.4", features = [] } +tauri-build = { version = "2.1.1", features = [] } [dependencies] @@ -24,15 +24,8 @@ tauri-build = { version = "2.0.4", features = [] } crockford = { path = "../../lib/data/crockford" } filesys = { path = "../../lib/files/filesys" } memory_caching = { path = "../../lib/caching/memory_caching" } -ml_weights_registry = { path = "../ml_weights_registry" } primitives = { path = "../../lib/data/primitives" } -# Internal ML -# TODO: Only on Windows and Linux -#ml_models = { path = "../ml_models", optional = true } -# Bypass cudarc issues on Windows https://github.com/coreylowman/cudarc/issues/332 -cudarc = { version = "0.13.5", features = ["std", "cublas", "cublaslt", "curand", "driver", "nvrtc", "f16", "cuda-version-from-build-system", "dynamic-linking"], default-features=false } - # External #openssl = { version = "0.10", features = ["vendored"] } # NB(bt,2025-03-10): default-features = false on Windows while I debug openssl / rustls @@ -44,37 +37,26 @@ const_format = "0.2.34" directories = "6.0.0" dirs = "6.0.0" futures = "0.3" -half = { version = "2.3.1", features = ["num-traits", "use-intrinsics", "rand_distr"] } image = "0.25.5" log = "0.4" once_cell = "1.20.3" -ort = { version = "1.16.2", features = ["cuda", "load-dynamic"] } rand = "0.8.5" reqwest = { version = "0.12.12", features = ["stream"], default-features = false } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde_yaml = "0.9" -tauri = { version = "2.2.4", features = [] } -tauri-plugin-log = "2" +tauri = { version = "2.4.1", features = [] } +tauri-plugin-log = "2.3.1" tempdir = "0.3.7" tempfile = "3.18.0" tokio = { version = "1.42", features = ["rt", "rt-multi-thread", "fs"] } tokio-util = { version = "0.7", features = ["codec"] } -# tracing-subscriber = { version = "0.3", features = [ "env-filter", "fmt" ] } - -[target.'cfg(not(target_os = "macos"))'.dependencies] -ml_models = { path = "../ml_models" } - [dev-dependencies] libloading = "0.8.6" serial_test = "3.2.0" assertor = "0.0.3" -#[target.'cfg(target_os = "macos")'.features] -#default = [] -#ml_models = ["dep:ml_models"] - [profile.dev] incremental = true # Compile your binary in smaller steps. diff --git a/crates/desktop/tauri-4o/binary_includes/1024.png b/crates/desktop/tauri-4o/binary_includes/1024.png deleted file mode 100644 index 9f746687dc4322ed7dafcbf34737ed681a7bc018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8630 zcmeI2ze_?<6vw}&Wtu_-Q3!!iv=kwYA;dGy=kTPYrOjw?73_z!^e_pUszGdMFrq06 zS`u6m8mgt;TB;=zL0ZM3bKm(J!sR@8oO|wj?{fLv?>+BuxJN7TsMqat1MtT5Z~|~p z(}BSrGNo3ssJxVBXu#d^Kxd`en^9%xgSSqHWQKqCn( zoB^Zh^U7+F9=Ou_dIp%ARJSdAwYWo_&aIdcasJpx?0w^nFa4B;L@cbWW#5`LZHS!5 zK=tAK^RlSd%e(LQcKQU!2VIseJy`~(pZk&Xa7X_-7M2xr4;O+lHq0v!m|~mM*;Y^3niDo|EUC&iU5BdBO_vNH3`7UkR*=0Q z@xT&-#6*dS5)&mRb~8tsx%O4)tbuhFfLEfMv+33hE`Wl!{c1Gnj0F&j#KX6tWbO|U CHh4Aw diff --git a/crates/desktop/tauri-4o/src/endpoints/download_models.rs b/crates/desktop/tauri-4o/src/endpoints/download_models.rs deleted file mode 100644 index ec450baf9d..0000000000 --- a/crates/desktop/tauri-4o/src/endpoints/download_models.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::state::app_dir::AppDataRoot; -use tauri::State; - -#[tauri::command] -pub async fn download_models( - _app_data_root: State<'_, AppDataRoot>, -) -> Result { - - // NB: This endpoint has been removed for now as we now download models in the app lifecycle. - - Ok(("downloaded".to_string())) -} diff --git a/crates/desktop/tauri-4o/src/endpoints/inpaint_image_endpoint.rs b/crates/desktop/tauri-4o/src/endpoints/inpaint_image_endpoint.rs deleted file mode 100644 index ff2482c971..0000000000 --- a/crates/desktop/tauri-4o/src/endpoints/inpaint_image_endpoint.rs +++ /dev/null @@ -1,13 +0,0 @@ -use log::info; - - -#[tauri::command] -pub async fn inpaint_image( - image: &str, - mask: &str, - prompt: String, -) -> Result { - info!("inpaint_endpoint endpoint called."); - - Ok(mask.to_string()) -} diff --git a/crates/desktop/tauri-4o/src/endpoints/mod.rs b/crates/desktop/tauri-4o/src/endpoints/mod.rs index dcf8a0cc98..fde56d36ef 100644 --- a/crates/desktop/tauri-4o/src/endpoints/mod.rs +++ b/crates/desktop/tauri-4o/src/endpoints/mod.rs @@ -1,7 +1 @@ -pub mod download_models; pub mod flip_image; -pub mod inpaint_image_endpoint; -pub mod realtime_image_endpoint; -pub mod remove_background_endpoint; -pub mod save_image_endpoint; -pub mod text_to_image_endpoint; diff --git a/crates/desktop/tauri-4o/src/endpoints/realtime_image_endpoint.rs b/crates/desktop/tauri-4o/src/endpoints/realtime_image_endpoint.rs deleted file mode 100644 index 008252d478..0000000000 --- a/crates/desktop/tauri-4o/src/endpoints/realtime_image_endpoint.rs +++ /dev/null @@ -1,148 +0,0 @@ -#[cfg(not(target_os = "macos"))] -use ml_models::ml::stable_diffusion::lcm_pipeline::{lcm_pipeline, Args}; - -use crate::state::app_config::AppConfig; -use crate::state::app_dir::AppDataRoot; -use crate::stubs::model_cache::ModelCache; -use crate::stubs::prompt_cache::PromptCache; -use crate::utils::image::decode_base64_image::decode_base64_image; -use crate::utils::image::encode_dynamic_image_base64_png::encode_dynamic_image_base64_png; -use crate::utils::image::encode_rgb_image_base64_png::encode_rgb_image_base64_png; -use image::imageops::FilterType; -use image::{DynamicImage, RgbImage}; -use log::{error, info}; -use ml_weights_registry::weights_registry::weights::{CLIP_JSON, LYKON_DEAMSHAPER_7_TEXT_ENCODER_FP16, LYKON_DEAMSHAPER_7_VAE, SDXL_TURBO_CLIP_TEXT_ENCODER, SIMIANLUO_LCM_DREAMSHAPER_V7_UNET}; -use std::path::PathBuf; -use tauri::{AppHandle, State}; - - -const PROMPT_FILENAME : &str = "prompt.txt"; -const PROMPT: &str = "shiba inu, cute dog, detailed, walking in a wooded forest, photorealistic, 8k"; - -const NEGATIVE_PROMPT: &str = "bad quality, bad faces, poor quality, blurry faces, watermark"; - -const RANDOM_SEED: u32 = 42; - - -/// This handler takes an image (as a base64 encoded string) and a prompt and returns -/// an image (as a base64-encoded string). -#[tauri::command] -pub async fn infer_image( - image: &str, - prompt: Option, - strength: Option, - seed: Option, - model_config: State<'_, AppConfig>, - model_cache: State<'_, ModelCache>, - prompt_cache: State<'_, PromptCache>, - app_data_root: State<'_, AppDataRoot>, - app: AppHandle, -) -> Result { - info!("infer_image endpoint called."); - - let prompt = get_prompt_or_fallback(prompt); - - info!("Strength: {:?}; Prompt: {}", strength, prompt); - - let image = decode_base64_image(image) - .map_err(|err| format!("Couldn't hydrate image from base64: {}", err))?; - - // TODO(bt,2025-02-17): Running out of vram with full image buffer size - let mut image = image.resize(512, 512, FilterType::CatmullRom); - - let seed = seed.or(model_config.seed); - - #[cfg(not(target_os = "macos"))] - { - let result = infer_image_impl( - &prompt, - image, - strength, - seed, - &model_config, - &model_cache, - prompt_cache, - &app_data_root - ).await; - - image = match result { - Ok(img) => DynamicImage::ImageRgb8(img), - Err(err) => { - error!("There was an error generating the image: {:?}", err); - return Err(format!("There was an error generating the image: {}", err)); - } - }; - } - - let bytes = encode_dynamic_image_base64_png(image) - .map_err(|err| format!("failure to encode image: {:?}", err))?; - - info!("Inference successful; image converted to base64, serving back to browser..."); - - Ok(bytes) -} - -#[cfg(not(target_os = "macos"))] -async fn infer_image_impl( - prompt: &str, - image: DynamicImage, - strength: Option, - seed: Option, - config: &AppConfig, - model_cache: &ModelCache, - prompt_cache: State<'_, PromptCache>, - app_data_root: &AppDataRoot, -) -> Result { - - let weights_dir = app_data_root.weights_dir(); - let vae_path = weights_dir.weight_path(&LYKON_DEAMSHAPER_7_VAE); - let unet_path = weights_dir.weight_path(&SIMIANLUO_LCM_DREAMSHAPER_V7_UNET); - let clip_json_path = weights_dir.weight_path(&CLIP_JSON); - //let clip_weights_path= weights_dir.weight_path(&LYKON_DEAMSHAPER_7_TEXT_ENCODER_FP16); - let clip_weights_path= weights_dir.weight_path(&SDXL_TURBO_CLIP_TEXT_ENCODER); - - let args = Args { - image: &image, - prompt: prompt.to_string(), - uncond_prompt: NEGATIVE_PROMPT.to_string(), - model_cache, - prompt_cache: &prompt_cache, - img2img_strength: strength, - cfg_scale: config.cfg_scale, - use_flash_attn: true, - model_config: &config.model_config, - maybe_seed: seed, - scheduler_steps: config.scheduler_steps, - vae_path: &vae_path, - unet_path: &unet_path, - clip_json_path: &clip_json_path, - clip_weights_path: &clip_weights_path, - }; - - let image = lcm_pipeline(args) - .map_err(|err| format!("failure to encode image: {:?}", err))?; - - Ok(image) -} - -fn get_prompt_or_fallback(user_prompt: Option) -> String { - let user_prompt = user_prompt.map(|prompt| prompt.trim().to_string()) - .filter(|prompt| !prompt.is_empty()); - - if let Some(prompt) = user_prompt { - return prompt; - } - - let prompt_file = PathBuf::from(PROMPT_FILENAME) - .canonicalize() - .unwrap_or_else(|_| PathBuf::from(PROMPT_FILENAME)); - - std::fs::read_to_string(&prompt_file) - .map_err(|err| format!("Failed to read prompt file: {}", err)) - .unwrap_or_else(|_| { - error!("Failed to read prompt file: {:?}", prompt_file); - PROMPT.to_string() - }) - .trim() - .to_string() -} diff --git a/crates/desktop/tauri-4o/src/endpoints/remove_background_endpoint.rs b/crates/desktop/tauri-4o/src/endpoints/remove_background_endpoint.rs deleted file mode 100644 index 5c3bfa4eb6..0000000000 --- a/crates/desktop/tauri-4o/src/endpoints/remove_background_endpoint.rs +++ /dev/null @@ -1,45 +0,0 @@ -//! Adapted from https://github.com/dnanhkhoa/rust-background-removal - -#[cfg(not(target_os = "macos"))] -use ml_models::ml::background_removal::remove_image_background::remove_image_background; - -use crate::state::app_dir::AppDataRoot; -use crate::utils::image::decode_base64_image::decode_base64_image; -use crate::utils::image::encode_dynamic_image_base64_png::encode_dynamic_image_base64_png; -use image::{imageops, DynamicImage}; -use log::info; -use ml_weights_registry::weights_registry::weights::DIS_MEDIUM_ONNX; -use tauri::State; - -/// This handler removes the background from an image. -#[tauri::command] -pub async fn remove_background( - image: &str, - app_data_root: State<'_, AppDataRoot>, -) -> Result { - info!("remove_background endpoint called."); - - let mut image = decode_base64_image(image) - .map_err(|err| format!("Couldn't hydrate image from base64: {}", err))?; - - #[cfg(not(target_os = "macos"))] - { - image = remove_background_impl(&app_data_root, image).await?; - } - - let image = encode_dynamic_image_base64_png(image) - .map_err(|err| format!("failure to encode image: {:?}", err))?; - - Ok(image) -} - -#[cfg(not(target_os = "macos"))] -async fn remove_background_impl(app_data_root: &AppDataRoot, image: DynamicImage) -> Result { - let model_path = app_data_root.weights_dir().weight_path(&DIS_MEDIUM_ONNX); - - let image = remove_image_background(model_path, image) - .await - .map_err(|err| format!("Couldn't remove image from image: {}", err))?; - - Ok(image) -} diff --git a/crates/desktop/tauri-4o/src/endpoints/save_image_endpoint.rs b/crates/desktop/tauri-4o/src/endpoints/save_image_endpoint.rs deleted file mode 100644 index 39312b7d58..0000000000 --- a/crates/desktop/tauri-4o/src/endpoints/save_image_endpoint.rs +++ /dev/null @@ -1,38 +0,0 @@ -use crate::state::app_config::AppConfig; -use crate::state::app_dir::AppDataRoot; -use crate::stubs::model_cache::ModelCache; -use crate::stubs::prompt_cache::PromptCache; -use crate::utils::image::decode_base64_image::decode_base64_image; -use chrono::Local; -use crockford::crockford_entropy_lower; -use image::{ImageFormat, RgbImage}; -use log::info; -use tauri::{AppHandle, State}; - -const FILENAME_LENGTH : usize = 10; - -/// This handler takes an image (as a base64 encoded string) and saves it. -#[tauri::command] -pub async fn save_image( - image: &str, - app_data_root: State<'_, AppDataRoot>, -) -> Result { - info!("save_image endpoint called."); - - let image = decode_base64_image(image) - .map_err(|err| format!("Couldn't hydrate image from base64: {}", err))?; - - let assets_dir = app_data_root.assets_dir(); - - let date_save_dir = assets_dir.make_or_get_current_date_dir() - .map_err(|err| format!("Couldn't create assets save directory: {}", err))?; - - let entropy = crockford_entropy_lower(FILENAME_LENGTH); // TODO: These are ugly. A monotonic counter would be better. - let filename = format!("{}.png", entropy); - let filename = date_save_dir.join(filename); - - image.save_with_format(filename, ImageFormat::Png) - .map_err(|err| format!("Couldn't save image: {}", err))?; - - Ok("".to_string()) -} diff --git a/crates/desktop/tauri-4o/src/endpoints/text_to_image_endpoint.rs b/crates/desktop/tauri-4o/src/endpoints/text_to_image_endpoint.rs deleted file mode 100644 index 53ca93157d..0000000000 --- a/crates/desktop/tauri-4o/src/endpoints/text_to_image_endpoint.rs +++ /dev/null @@ -1,114 +0,0 @@ -#[cfg(not(target_os = "macos"))] -use ml_models::ml::flux::flux_pipeline::{flux_pipeline, FluxModel, FluxPipelineArgs}; - -use crate::state::app_config::AppConfig; -use crate::state::app_dir::{AppDataRoot, AppWeightsDir}; -use crate::stubs::model_cache::ModelCache; -use crate::stubs::prompt_cache::PromptCache; -use crate::utils::image::encode_dynamic_image_base64_png::encode_dynamic_image_base64_png; -use image::imageops::FilterType; -use image::{DynamicImage, ImageReader, RgbImage}; -use log::{error, info}; - -use ml_weights_registry::weights_registry::flux_weights::{FLUX_DEV, FLUX_SCHNELL, FLUX_SCHNELL_AUTOENCODER, GOOGLE_T5_V1_1_XXL_CONFIG, GOOGLE_T5_V1_1_XXL_MODEL, LMZ_CANDLE_FLUX_SCHNELL_QUANTIZED_GGUF, LMZ_T5_TOKENIZER_JSON, OPENAI_CLIP_VIT_P14_MODEL, OPENAI_CLIP_VIT_P14_TOKENIZER_JSON}; -use once_cell::sync::Lazy; -use std::io::Cursor; -use tauri::{AppHandle, State}; - -const STRENGTH: f64 = 100.0; -const PNG_BYTES : &[u8] = include_bytes!("../../binary_includes/1024.png"); - -// NB: We're just hacking a temporary "text to image" test endpoint leveraging the existing image to image modality. -static IMAGE : Lazy = Lazy::new(||{ - ImageReader::new(Cursor::new(PNG_BYTES)) - .with_guessed_format() - .expect("failed to detect png format") - .decode() - .expect("failed to decode image") -}); - -#[tauri::command] -pub async fn text_to_image( - prompt: String, - model_config: State<'_, AppConfig>, - model_cache: State<'_, ModelCache>, - prompt_cache: State<'_, PromptCache>, - app: AppHandle, - app_data_root: State<'_, AppDataRoot>, -) -> Result { - info!("text_to_image endpoint called."); - - let mut image = IMAGE.resize(512, 512, FilterType::CatmullRom); - - #[cfg(not(target_os = "macos"))] - { - let result = text_to_image_impl( - &prompt, - image, - Some(STRENGTH), - &model_config, - &model_cache, - prompt_cache, - app_data_root.weights_dir(), - app, - ).await; - - image = match result { - Ok(img) => DynamicImage::ImageRgb8(img), - Err(err) => { - error!("There was an error generating the image: {:?}", err); - return Err(format!("There was an error generating the image: {}", err)); - } - }; - } - - let bytes = encode_dynamic_image_base64_png(image) - .map_err(|err| format!("failure to encode image: {:?}", err))?; - - info!("Inference successful; image converted to base64, serving back to browser..."); - - Ok(bytes) -} - -#[cfg(not(target_os = "macos"))] -async fn text_to_image_impl( - prompt: &str, - image: DynamicImage, - strength: Option, - config: &AppConfig, - model_cache: &ModelCache, - prompt_cache: State<'_, PromptCache>, - weights_dir: &AppWeightsDir, - app: AppHandle, -) -> Result { - - let args = FluxPipelineArgs { - image: &image, - prompt: prompt.to_string(), - model_cache, - prompt_cache: &prompt_cache, - app: &app, - flux_model: FluxModel::Schnell, - active_blocks: None, - use_cuda_stream: Some(true), - prefetch_next_batch: Some(false), - use_full_gpu: Some(true), - img2img_strength: strength, - seed: None, - use_quantized_model: Some(true), - model_config: &config.model_config, - flux_dev_or_schnell_path: &weights_dir.weight_path(&FLUX_SCHNELL), - flux_schnell_quantized_gguf: &weights_dir.weight_path(&LMZ_CANDLE_FLUX_SCHNELL_QUANTIZED_GGUF), - flux_autoencoder_path: &weights_dir.weight_path(&FLUX_SCHNELL_AUTOENCODER), - google_t5_model_path: &weights_dir.weight_path(&GOOGLE_T5_V1_1_XXL_MODEL), - google_t5_config_path: &weights_dir.weight_path(&GOOGLE_T5_V1_1_XXL_CONFIG), - lmz_t5_tokenizer_path: &weights_dir.weight_path(&LMZ_T5_TOKENIZER_JSON), - openai_clip_model_path: &weights_dir.weight_path(&OPENAI_CLIP_VIT_P14_MODEL), - openai_clip_tokenizer_json_path: &weights_dir.weight_path(&OPENAI_CLIP_VIT_P14_TOKENIZER_JSON), - }; - - let image = flux_pipeline(args) - .map_err(|err| format!("failure to encode image: {:?}", err))?; - - Ok(image) -} diff --git a/crates/desktop/tauri-4o/src/lib.rs b/crates/desktop/tauri-4o/src/lib.rs index e8f7557102..c37dd9453f 100644 --- a/crates/desktop/tauri-4o/src/lib.rs +++ b/crates/desktop/tauri-4o/src/lib.rs @@ -1,22 +1,11 @@ pub mod endpoints; pub mod events; pub mod state; -pub mod stubs; -pub mod threads; pub mod transfer; pub mod utils; -use crate::endpoints::download_models::download_models; use crate::endpoints::flip_image::flip_image; -use crate::endpoints::inpaint_image_endpoint::inpaint_image; -use crate::endpoints::realtime_image_endpoint::infer_image; -use crate::endpoints::remove_background_endpoint::remove_background; -use crate::endpoints::save_image_endpoint::save_image; -use crate::endpoints::text_to_image_endpoint::text_to_image; use crate::state::app_config::AppConfig; -use crate::stubs::model_cache::ModelCache; -use crate::stubs::prompt_cache::PromptCache; -use crate::threads::downloader_thread::downloader_thread; use tauri_plugin_log::Target; use tauri_plugin_log::TargetKind; @@ -30,13 +19,7 @@ pub fn run() { let config = AppConfig::init() .expect("config should load"); - let prompt_cache = PromptCache::with_capacity(8) - .expect("prompt cache should load"); - println!("Creating model cache..."); - - let model_cache = ModelCache::new(); - let app_data_root = config.app_data_root.clone(); let app_data_root2 = config.app_data_root.clone(); @@ -63,24 +46,15 @@ pub fn run() { //} let app = app.handle().clone(); - tauri::async_runtime::spawn(downloader_thread(app_data_root2, app)); + //tauri::async_runtime::spawn(downloader_thread(app_data_root2, app)); Ok(()) }) .manage(config) - .manage(prompt_cache) - .manage(model_cache) .manage(app_data_root) .invoke_handler(tauri::generate_handler![ - download_models, flip_image, - infer_image, - inpaint_image, - remove_background, - save_image, - text_to_image, - text_to_image, ]) - .run(tauri::generate_context!()) + .run(tauri::generate_context!("tauri.conf.json")) .expect("error while running tauri application"); } diff --git a/crates/desktop/tauri-4o/src/main.rs b/crates/desktop/tauri-4o/src/main.rs index bf57eb7c0d..ad5fe83991 100644 --- a/crates/desktop/tauri-4o/src/main.rs +++ b/crates/desktop/tauri-4o/src/main.rs @@ -1,15 +1,6 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -use std::fs::File; - fn main() { - //// NB: This is a test to see the behavior of the application with dynamic loading modules. - //// We should be able to execute code before loading CUDA and other dependencies. - //let r = File::create("program_started.txt"); - //match r { - // Err(err) => println!("Failed to create program_started.txt: {}", err), - // Ok(_) => {} - //} app_lib::run(); } diff --git a/crates/desktop/tauri-4o/src/state/app_config.rs b/crates/desktop/tauri-4o/src/state/app_config.rs index fe2e602ddc..66b9ab8150 100644 --- a/crates/desktop/tauri-4o/src/state/app_config.rs +++ b/crates/desktop/tauri-4o/src/state/app_config.rs @@ -1,7 +1,6 @@ use crate::state::app_dir::AppDataRoot; use crate::state::os_platform::OsPlatform; use crate::state::yaml_config::YamlConfig; -use crate::stubs::model_config::ModelConfig; const DEFAULT_SD_IMAGE_WIDTH: usize = 1024; const DEFAULT_SD_IMAGE_HEIGHT: usize = 1024; @@ -20,8 +19,6 @@ pub struct AppConfig { /// Root location for application data. pub app_data_root: AppDataRoot, - - pub model_config: ModelConfig, } impl AppConfig { @@ -56,7 +53,6 @@ impl AppConfig { seed: yaml_configs.seed, cfg_scale: yaml_configs.cfg_scale, app_data_root, - model_config: ModelConfig::init()?, }) } } diff --git a/crates/desktop/tauri-4o/src/state/app_dir.rs b/crates/desktop/tauri-4o/src/state/app_dir.rs index 2cbad5d4d5..cbfa8777a7 100644 --- a/crates/desktop/tauri-4o/src/state/app_dir.rs +++ b/crates/desktop/tauri-4o/src/state/app_dir.rs @@ -2,7 +2,6 @@ use crate::state::expanduser::expanduser; use crate::state::os_platform::OsPlatform; use anyhow::anyhow; use directories::UserDirs; -use ml_weights_registry::weights_registry::weight_descriptor::WeightDescriptor; use std::path::{Path, PathBuf}; use chrono::{DateTime, Local}; use tempdir::TempDir; @@ -173,10 +172,6 @@ impl AppWeightsDir { pub fn path(&self) -> &Path { &self.path } - - pub fn weight_path(&self, descriptor: &WeightDescriptor) -> PathBuf { - self.path.join(descriptor.filename) - } } impl TemporaryDir { diff --git a/crates/desktop/tauri-4o/src/stubs/mod.rs b/crates/desktop/tauri-4o/src/stubs/mod.rs deleted file mode 100644 index 62ecaceb95..0000000000 --- a/crates/desktop/tauri-4o/src/stubs/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod model_cache; -pub mod model_config; -pub mod prompt_cache; \ No newline at end of file diff --git a/crates/desktop/tauri-4o/src/stubs/model_cache.rs b/crates/desktop/tauri-4o/src/stubs/model_cache.rs deleted file mode 100644 index ebd7e163d3..0000000000 --- a/crates/desktop/tauri-4o/src/stubs/model_cache.rs +++ /dev/null @@ -1,14 +0,0 @@ -#[cfg(not(target_os = "macos"))] -pub use ml_models::ml::model_cache::ModelCache; - -#[cfg(not(not(target_os = "macos")))] -pub struct ModelCache { - // Intentionally left blank -} - -#[cfg(not(not(target_os = "macos")))] -impl ModelCache { - pub fn new() -> Self { - Self {} - } -} diff --git a/crates/desktop/tauri-4o/src/stubs/model_config.rs b/crates/desktop/tauri-4o/src/stubs/model_config.rs deleted file mode 100644 index d0a6740727..0000000000 --- a/crates/desktop/tauri-4o/src/stubs/model_config.rs +++ /dev/null @@ -1,14 +0,0 @@ -#[cfg(not(target_os = "macos"))] -pub use ml_models::ml::model_config::ModelConfig; - -#[cfg(not(not(target_os = "macos")))] -pub struct ModelConfig { - // Intentionally left blank -} - -#[cfg(not(not(target_os = "macos")))] -impl ModelConfig { - pub fn init() -> anyhow::Result { - Ok(Self {}) - } -} diff --git a/crates/desktop/tauri-4o/src/stubs/prompt_cache.rs b/crates/desktop/tauri-4o/src/stubs/prompt_cache.rs deleted file mode 100644 index daf4a4d2db..0000000000 --- a/crates/desktop/tauri-4o/src/stubs/prompt_cache.rs +++ /dev/null @@ -1,15 +0,0 @@ - -#[cfg(not(target_os = "macos"))] -pub use ml_models::ml::prompt_cache::PromptCache; - -#[cfg(not(not(target_os = "macos")))] -pub struct PromptCache { - // Intentionally left blank -} - -#[cfg(not(not(target_os = "macos")))] -impl PromptCache { - pub fn with_capacity(capacity: usize) -> anyhow::Result { - Ok(Self {}) - } -} diff --git a/crates/desktop/tauri-4o/src/threads/downloader_thread.rs b/crates/desktop/tauri-4o/src/threads/downloader_thread.rs deleted file mode 100644 index 66dd60b97b..0000000000 --- a/crates/desktop/tauri-4o/src/threads/downloader_thread.rs +++ /dev/null @@ -1,193 +0,0 @@ -use crate::events::notification_event::{NotificationEvent, NotificationModelType}; -use crate::state::app_dir::AppDataRoot; -use crate::transfer::download::{download_async, ProgressUpdate}; -use futures::StreamExt; -use futures::stream::FuturesUnordered; -use log::{debug, error, info}; -use ml_weights_registry::weights_registry::weight_descriptor::WeightFunction; -use ml_weights_registry::weights_registry::weights::{CLIP_JSON, DIS_MEDIUM_ONNX, LYKON_DEAMSHAPER_7_TEXT_ENCODER_FP16, LYKON_DEAMSHAPER_7_VAE, SDXL_TURBO_CLIP_TEXT_ENCODER, SDXL_TURBO_CLIP_TEXT_ENCODER_2, SDXL_TURBO_UNET, SDXL_TURBO_VAE, SIMIANLUO_LCM_DREAMSHAPER_V7_UNET}; -use std::collections::VecDeque; -use std::path::PathBuf; -use std::sync::mpsc::Receiver; -use std::sync::{Arc, Mutex}; -use tauri::{AppHandle, Emitter}; -use tempfile::NamedTempFile; -use tokio::task::JoinHandle; -use ml_weights_registry::weights_registry::flux_weights::{FLUX_SCHNELL, FLUX_SCHNELL_AUTOENCODER, GOOGLE_T5_V1_1_XXL_CONFIG, GOOGLE_T5_V1_1_XXL_MODEL, LMZ_CANDLE_FLUX_SCHNELL_QUANTIZED_GGUF, LMZ_T5_TOKENIZER_JSON, OPENAI_CLIP_VIT_P14_MODEL, OPENAI_CLIP_VIT_P14_TOKENIZER_JSON}; - -const NOTIFICATION_CHANNEL_NAME : &str = "notification"; -const MAX_FILES : usize = 8; -const CHUNK_SIZE : usize = 1024 * 1024; -const PARALLEL_FAILURES : usize = 8; -const MAX_RETRIES : usize = 30; - -struct ModelDownloadStatusChannel { - pub model_name: String, - pub model_type: NotificationModelType, - pub final_file_path: PathBuf, - pub receiver: Receiver, -} - -pub async fn downloader_thread(app_data_root: AppDataRoot, app: AppHandle) -> ! { - - let mut status_check_queue : Arc>> = Arc::new(Mutex::new(Vec::new())); - - { - let status_check_queue2 = status_check_queue.clone(); - let app2 = app.clone(); - - tokio::spawn(download_notify_thread(status_check_queue2, app2)); - } - - let mut download_queue = VecDeque::new(); - - download_queue.push_back(CLIP_JSON); - download_queue.push_back(LYKON_DEAMSHAPER_7_TEXT_ENCODER_FP16); - download_queue.push_back(LYKON_DEAMSHAPER_7_VAE); - download_queue.push_back(SIMIANLUO_LCM_DREAMSHAPER_V7_UNET); - download_queue.push_back(SDXL_TURBO_CLIP_TEXT_ENCODER); // TODO(bt): Why is this still needed? - download_queue.push_back(DIS_MEDIUM_ONNX); - //download_queue.push_back(SDXL_TURBO_CLIP_TEXT_ENCODER_2); // TODO(bt): REMOVE - //download_queue.push_back(SDXL_TURBO_VAE); // TODO(bt): REMOVE - //download_queue.push_back(SDXL_TURBO_UNET); // TODO(bt): REMOVE - - // Flux: - download_queue.push_back(FLUX_SCHNELL); - download_queue.push_back(FLUX_SCHNELL_AUTOENCODER); - download_queue.push_back(LMZ_CANDLE_FLUX_SCHNELL_QUANTIZED_GGUF); - download_queue.push_back(GOOGLE_T5_V1_1_XXL_MODEL); - download_queue.push_back(GOOGLE_T5_V1_1_XXL_CONFIG); - download_queue.push_back(LMZ_T5_TOKENIZER_JSON); - download_queue.push_back(OPENAI_CLIP_VIT_P14_MODEL); - download_queue.push_back(OPENAI_CLIP_VIT_P14_TOKENIZER_JSON); - - let mut handles = FuturesUnordered::new(); - - while let Some(model) = download_queue.pop_front() { - let url = model.r2_download_url.to_string(); - - let filename = app_data_root.weights_dir().weight_path(&model); - - if filename.exists() { - info!("File already exists: {:?}", &filename); - continue; - } - - let headers = None; - - let (tx, rx) = std::sync::mpsc::channel(); - - info!("Download: {:?}", filename); - - let temp_file = match app_data_root.temp_dir().new_named_temp_file() { - Ok(file) => file, - Err(err) => { - error!("Couldn't create a temporary file: {:?}", err); - continue; - } - }; - - let model_type = match model.function { - WeightFunction::TextEncoder => NotificationModelType::TextEncoder, - WeightFunction::TextTokenizer => NotificationModelType::TextTokenizer, - WeightFunction::Unet => NotificationModelType::Unet, - WeightFunction::Vae => NotificationModelType::Vae, - WeightFunction::ImageSegmentation => NotificationModelType::ImageSegmentation, - WeightFunction::ImageGeneration => NotificationModelType::ImageSegmentation, // TODO FIX - }; - - let result = app.emit(NOTIFICATION_CHANNEL_NAME, NotificationEvent::ModelDownloadStarted { - model_name: model.name, - model_type, - }); - - if let Err(err) = result { - error!("Could not emit event: {}", err); - } - - let task = tokio::spawn(download_async( - url, - temp_file, - filename.clone(), - MAX_FILES, - CHUNK_SIZE, - PARALLEL_FAILURES, - MAX_RETRIES, - headers, - Some(tx), - )); - - match status_check_queue.lock() { - Err(err) => error!("Could not unlock: {:?}", err), - Ok(mut lock) => { - lock.push(ModelDownloadStatusChannel { - receiver: rx, - final_file_path: filename.clone(), - model_name: model.to_descriptive_name(), - model_type, - }) - } - } - - handles.push(task); - } - - while let Some(result) = handles.next().await { - match result { - Err(err) => error!("Error downloading: {:?}", err), - Ok(_) => {}, - } - } - - loop { - // TODO(bt,2025-03-10): Queue management for new files entering the queue. - tokio::time::sleep(std::time::Duration::from_millis(60_000)).await; - } -} - -pub async fn download_notify_thread(queue: Arc>>, app: AppHandle) -> ! { - loop { - match queue.lock() { - Err(err) => error!("Could not unlock: {:?}", err), - Ok(mut lock) => { - debug!(">>>>> Notifier has {} items", lock.len()); - - let mut reenqueue = Vec::with_capacity(lock.len()); - - for item in (*lock).drain(..) { - if let Ok(update) = item.receiver.try_recv() { - let result = app.emit(NOTIFICATION_CHANNEL_NAME, NotificationEvent::ModelDownloadProgress { - model_name: &item.model_name, - model_type: item.model_type, - currently_downloaded_bytes: update.complete, - total_file_bytes: update.total_length, - }); - - if let Err(err) = result { - error!("Could not emit event: {}", err); - } - } - - if item.final_file_path.exists() { - debug!("No longer sending notifications for {:?}", &item.final_file_path); - - let result = app.emit(NOTIFICATION_CHANNEL_NAME, NotificationEvent::ModelDownloadComplete { - model_name: &item.model_name, - model_type: item.model_type, - }); - - if let Err(err) = result { - error!("Could not emit event: {}", err); - } - } else { - reenqueue.push(item); - } - } - - lock.extend(reenqueue); - } - } - - tokio::time::sleep(std::time::Duration::from_millis(500)).await; - } -} diff --git a/crates/desktop/tauri-4o/src/threads/mod.rs b/crates/desktop/tauri-4o/src/threads/mod.rs deleted file mode 100644 index fb47de2776..0000000000 --- a/crates/desktop/tauri-4o/src/threads/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod downloader_thread; \ No newline at end of file diff --git a/crates/desktop/tauri-4o/src/utils/log_environment_details.rs b/crates/desktop/tauri-4o/src/utils/log_environment_details.rs deleted file mode 100644 index 755894daa5..0000000000 --- a/crates/desktop/tauri-4o/src/utils/log_environment_details.rs +++ /dev/null @@ -1,11 +0,0 @@ -use log::info; -//use nvidia_checker::{get_cuda_version, get_cudnn_version, get_kernel_version, get_nvidia_driver_version, get_os_version, get_tensorrt_version}; - -pub fn log_environment_details() { - //info!("NVIDIA driver version: {}", get_nvidia_driver_version(false)); - //info!("CUDA version: {}", get_cuda_version(false)); - //info!("cuDNN version: {}", get_cudnn_version(false)); - //info!("TensorRT version: {}", get_tensorrt_version(false)); - //info!("OS version: {}", get_os_version(false)); - //info!("Kernel version: {}", get_kernel_version(false)); -} diff --git a/crates/desktop/tauri-4o/src/utils/mod.rs b/crates/desktop/tauri-4o/src/utils/mod.rs index 3e475ef135..b1b6b4f003 100644 --- a/crates/desktop/tauri-4o/src/utils/mod.rs +++ b/crates/desktop/tauri-4o/src/utils/mod.rs @@ -1,2 +1 @@ -pub mod image; -pub mod log_environment_details; \ No newline at end of file +pub mod image; \ No newline at end of file diff --git a/crates/desktop/tauri-realtime/Cargo.toml b/crates/desktop/tauri-realtime/Cargo.toml index 7c984d4986..1368363ede 100644 --- a/crates/desktop/tauri-realtime/Cargo.toml +++ b/crates/desktop/tauri-realtime/Cargo.toml @@ -16,7 +16,7 @@ name = "app_lib" crate-type = ["staticlib", "cdylib", "rlib"] [build-dependencies] -tauri-build = { version = "2.0.4", features = [] } +tauri-build = { version = "2.1.1", features = [] } [dependencies] @@ -54,8 +54,8 @@ reqwest = { version = "0.12.12", features = ["stream"], default-features = false serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" serde_yaml = "0.9" -tauri = { version = "2.2.4", features = [] } -tauri-plugin-log = "2" +tauri = { version = "2.4.1", features = [] } +tauri-plugin-log = "2.3.1" tempdir = "0.3.7" tempfile = "3.18.0" tokio = { version = "1.42", features = ["rt", "rt-multi-thread", "fs"] }