capture comfyui stdout/stderr

This commit is contained in:
kaj
2023-07-19 16:08:34 -08:00
parent bef5fe60f3
commit f4a9d4e4af
6 changed files with 193 additions and 228 deletions

View File

@@ -28,15 +28,6 @@ dependencies = [
"cpufeatures",
]
[[package]]
name = "aho-corasick"
version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
dependencies = [
"memchr",
]
[[package]]
name = "aho-corasick"
version = "1.0.2"
@@ -78,20 +69,20 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.71"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
[[package]]
name = "app"
version = "0.1.0"
dependencies = [
"http",
"once_cell",
"portpicker",
"reqwest",
"serde",
"serde_json",
"sysinfo",
"tauri",
"tauri-build",
"tauri-plugin-upload",
@@ -507,30 +498,6 @@ dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-deque"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [
"cfg-if",
"crossbeam-epoch",
"crossbeam-utils",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
"memoffset",
"scopeguard",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.16"
@@ -574,7 +541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -589,9 +556,9 @@ dependencies = [
[[package]]
name = "darling"
version = "0.20.1"
version = "0.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944"
checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
dependencies = [
"darling_core",
"darling_macro",
@@ -599,27 +566,27 @@ dependencies = [
[[package]]
name = "darling_core"
version = "0.20.1"
version = "0.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb"
checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
dependencies = [
"fnv",
"ident_case",
"proc-macro2",
"quote",
"strsim",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
name = "darling_macro"
version = "0.20.1"
version = "0.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a"
checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
dependencies = [
"darling_core",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -675,9 +642,9 @@ checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
[[package]]
name = "dtoa"
version = "1.0.8"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "519b83cd10f5f6e969625a409f735182bea5558cd8b64c655806ceaae36f1999"
checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
[[package]]
name = "dtoa-short"
@@ -694,12 +661,6 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
[[package]]
name = "either"
version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
[[package]]
name = "embed-resource"
version = "2.2.0"
@@ -730,9 +691,9 @@ dependencies = [
[[package]]
name = "equivalent"
version = "1.0.0"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
@@ -901,7 +862,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -1163,11 +1124,11 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "globset"
version = "0.4.10"
version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
checksum = "1391ab1f92ffcc08911957149833e682aa3fe252b9f45f966d2ef972274c97df"
dependencies = [
"aho-corasick 0.7.20",
"aho-corasick",
"bstr",
"fnv",
"log",
@@ -1329,7 +1290,7 @@ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
dependencies = [
"bytes",
"fnv",
"itoa 1.0.8",
"itoa 1.0.9",
]
[[package]]
@@ -1376,7 +1337,7 @@ dependencies = [
"http-body",
"httparse",
"httpdate",
"itoa 1.0.8",
"itoa 1.0.9",
"pin-project-lite",
"socket2",
"tokio",
@@ -1550,9 +1511,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "itoa"
version = "1.0.8"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
[[package]]
name = "javascriptcore-rs"
@@ -1841,15 +1802,6 @@ version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
[[package]]
name = "ntapi"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
dependencies = [
"winapi",
]
[[package]]
name = "nu-ansi-term"
version = "0.46.0"
@@ -1987,7 +1939,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -2307,9 +2259,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]]
name = "proc-macro2"
version = "1.0.64"
version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da"
checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
dependencies = [
"unicode-ident",
]
@@ -2325,9 +2277,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.29"
version = "1.0.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
dependencies = [
"proc-macro2",
]
@@ -2419,28 +2371,6 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
[[package]]
name = "rayon"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
dependencies = [
"either",
"rayon-core",
]
[[package]]
name = "rayon-core"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
dependencies = [
"crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
"num_cpus",
]
[[package]]
name = "read-progress-stream"
version = "1.0.0"
@@ -2487,10 +2417,10 @@ version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
dependencies = [
"aho-corasick 1.0.2",
"aho-corasick",
"memchr",
"regex-automata 0.3.2",
"regex-syntax 0.7.3",
"regex-automata 0.3.3",
"regex-syntax 0.7.4",
]
[[package]]
@@ -2504,13 +2434,13 @@ dependencies = [
[[package]]
name = "regex-automata"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf"
checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
dependencies = [
"aho-corasick 1.0.2",
"aho-corasick",
"memchr",
"regex-syntax 0.7.3",
"regex-syntax 0.7.4",
]
[[package]]
@@ -2521,9 +2451,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846"
checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
[[package]]
name = "reqwest"
@@ -2595,15 +2525,15 @@ dependencies = [
[[package]]
name = "rustversion"
version = "1.0.13"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "ryu"
version = "1.0.14"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9"
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
[[package]]
name = "safemem"
@@ -2637,9 +2567,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
name = "scopeguard"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "security-framework"
@@ -2686,40 +2616,40 @@ dependencies = [
[[package]]
name = "semver"
version = "1.0.17"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
dependencies = [
"serde",
]
[[package]]
name = "serde"
version = "1.0.171"
version = "1.0.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
checksum = "3c489e660549c5f25abb5e7a546a9de2ea437072d7d6f8d8c993ceab4e76be14"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.171"
version = "1.0.172"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
checksum = "d37fc147b26555e4a092321832edb03124603c0a456c449ecb589ed05bf91f89"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
name = "serde_json"
version = "1.0.100"
version = "1.0.103"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c"
checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
dependencies = [
"itoa 1.0.8",
"itoa 1.0.9",
"ryu",
"serde",
]
@@ -2732,7 +2662,7 @@ checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -2751,16 +2681,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
dependencies = [
"form_urlencoded",
"itoa 1.0.8",
"itoa 1.0.9",
"ryu",
"serde",
]
[[package]]
name = "serde_with"
version = "3.0.0"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f02d8aa6e3c385bf084924f660ce2a3a6bd333ba55b35e8590b321f35d88513"
checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3"
dependencies = [
"base64 0.21.2",
"chrono",
@@ -2774,14 +2704,14 @@ dependencies = [
[[package]]
name = "serde_with_macros"
version = "3.0.0"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edc7d5d3932fb12ce722ee5e64dd38c504efba37567f0c402f6ca728c3b8b070"
checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -2988,30 +2918,15 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.25"
version = "2.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2"
checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "sysinfo"
version = "0.29.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b949f01f9c23823744b71e0060472ecbde578ef68cc2a9e46d114efd77c3034"
dependencies = [
"cfg-if",
"core-foundation-sys",
"libc",
"ntapi",
"once_cell",
"rayon",
"winapi",
]
[[package]]
name = "system-deps"
version = "5.0.0"
@@ -3098,9 +3013,9 @@ dependencies = [
[[package]]
name = "tar"
version = "0.4.38"
version = "0.4.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96"
dependencies = [
"filetime",
"libc",
@@ -3109,9 +3024,9 @@ dependencies = [
[[package]]
name = "target-lexicon"
version = "0.12.8"
version = "0.12.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac"
checksum = "1d2faeef5759ab89935255b1a4cd98e0baf99d1085e37d36599c625dac49ae8e"
[[package]]
name = "tauri"
@@ -3219,7 +3134,7 @@ dependencies = [
[[package]]
name = "tauri-plugin-upload"
version = "0.0.0"
source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#07f3a89df05761ac5572cb86b81f57f9a8da4a3d"
source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0863f800b81925884a6a37c042f3d92d433d4a37"
dependencies = [
"futures-util",
"log",
@@ -3361,7 +3276,7 @@ checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -3391,7 +3306,7 @@ version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
dependencies = [
"itoa 1.0.8",
"itoa 1.0.9",
"serde",
"time-core",
"time-macros",
@@ -3512,9 +3427,9 @@ dependencies = [
[[package]]
name = "toml_edit"
version = "0.19.12"
version = "0.19.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78"
checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
dependencies = [
"indexmap 2.0.0",
"serde",
@@ -3549,7 +3464,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
]
[[package]]
@@ -3620,9 +3535,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
[[package]]
name = "unicode-ident"
version = "1.0.10"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73"
checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
[[package]]
name = "unicode-normalization"
@@ -3659,9 +3574,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
[[package]]
name = "uuid"
version = "1.4.0"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be"
checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
dependencies = [
"getrandom 0.2.10",
]
@@ -3774,7 +3689,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
"wasm-bindgen-shared",
]
@@ -3808,7 +3723,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.25",
"syn 2.0.26",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4111,9 +4026,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "winnow"
version = "0.4.9"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529"
checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
dependencies = [
"memchr",
]

View File

@@ -25,7 +25,7 @@ reqwest = { version = "0.11.6", features = ["blocking"] }
tiny_http = "0.12.0"
portpicker = "0.1.1"
http = "0.2.9"
sysinfo = "0.29.5"
once_cell = "1.18.0"
[features]
# this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled.

View File

@@ -3,6 +3,7 @@
use std::collections::HashMap;
use std::fs::File;
use std::sync::OnceLock;
use tauri::api::process::CommandEvent;
use tauri::api::process::{
Command,
@@ -10,11 +11,13 @@ use tauri::api::process::{
};
use tauri::async_runtime::Receiver;
use tauri::utils::config::{AppUrl, WindowConfig};
use tauri::{RunEvent, WindowBuilder, WindowUrl};
use tauri::{RunEvent, Window, WindowBuilder, WindowUrl};
use tauri_plugin_upload;
mod server;
static WINDOW: OnceLock<Window> = OnceLock::new();
fn main() {
let port = portpicker::pick_unused_port().expect("failed to find unused port");
@@ -29,7 +32,7 @@ fn main() {
tauri::Builder::default()
.plugin(server::Builder::new(port).build())
.setup(move |app| {
WindowBuilder::from_config(
let window = WindowBuilder::from_config(
app,
WindowConfig {
url: {
@@ -49,6 +52,9 @@ fn main() {
},
)
.build()?;
_ = WINDOW.set(window);
Ok(())
})
.plugin(tauri_plugin_upload::init())
@@ -83,6 +89,19 @@ fn extract_zip(path: String, target_dir: String) -> Result<String, String> {
Ok("completed".to_string())
}
fn emit_event(event: &str, data: Option<String>) {
match WINDOW.get() {
Some(window) => {
window
.emit(event, data)
.unwrap_or_else(|_| println!("[!!] event failed"));
}
None => {
println!("[!!] window locked");
}
}
}
async fn watch_comfy(
mut rx: Receiver<CommandEvent>,
) -> (Receiver<CommandEvent>, Result<String, String>) {
@@ -95,12 +114,15 @@ async fn watch_comfy(
return (rx, Ok("completed".to_string()));
}
println!("[ComfyUI] stdout: {}", line);
emit_event("comfy-stdout", Some(line));
}
Stderr(line) => {
println!("[ComfyUI] stderr: {}", line);
emit_event("comfy-stderr", Some(line));
}
Error(line) => {
println!("[ComfyUI] error: {}", line);
emit_event("comfy-error", Some(line));
}
Terminated(_) => {
println!("Comfy terminated!");

View File

@@ -1,4 +1,6 @@
import { listen } from "@tauri-apps/api/event";
import { useLocation } from "react-router-dom";
import { create } from "zustand";
export type Comfy = {
setup: () => void;
@@ -58,6 +60,37 @@ export type Graph = {
export function Comfy() {
const location = useLocation();
const { print } = Comfy.use();
useEffect(() => {
let mounted = true;
const unlisteners = [] as (() => void)[];
(async () => {
if (mounted) {
unlisteners.push(
await listen("comfy-stdout", (event) => {
console.log("stdout", `${event.payload}`);
print("stdout", `${event.payload}`);
})
);
unlisteners.push(
await listen("comfy-stderr", (event) => {
console.log("stderr", `${event.payload}`);
print("stderr", `${event.payload}`);
})
);
mounted = false;
}
})();
return () => {
mounted = false;
for (const unlistener of unlisteners) unlistener();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<iframe
@@ -72,10 +105,34 @@ export function Comfy() {
);
}
const MAX_STDOUT_LENGTH = 35;
type State = {
output: {
type: "stdout" | "stderr";
data: string;
}[];
max_lines: number;
print: (type: "stdout" | "stderr", data: string) => void;
};
export namespace Comfy {
export const get = (): Comfy | null =>
((
(document.getElementById("comfyui-window") as HTMLIFrameElement)
?.contentWindow as Window & { app: Comfy }
)?.app as Comfy) ?? null;
export const use = create<State>((set) => ({
output: [],
max_lines: MAX_STDOUT_LENGTH,
print: (type, data) =>
set((state) => {
if (state.output.map((o) => o.data).includes(data)) return state;
const output = [...state.output, { type, data }];
if (output.length > MAX_STDOUT_LENGTH) output.shift();
return { output };
}),
}));
}

View File

@@ -2,13 +2,14 @@ import * as StableStudio from "@stability/stablestudio-plugin";
import { Comfy } from ".";
export const createPlugin = StableStudio.createPlugin(() => ({
export const createPlugin = StableStudio.createPlugin<any>(({ set, get }) => ({
manifest: {
name: "ComfyUI Backend",
author: "StabilityAI",
version: "0.0.1",
license: "MIT",
description: "An interface for generating images with ComfyUI",
},
statusStuff: {
indicator: "loading",
text: "Starting",
},
createStableDiffusionImages: async () => {
@@ -53,9 +54,15 @@ export const createPlugin = StableStudio.createPlugin(() => ({
},
getStatus: () => {
return {
indicator: "success",
text: "Ready",
};
fetch("/comfyui", { cache: "no-cache" }).then((resp) => {
set({
statusStuff: {
indicator: resp.ok ? "success" : "error",
text: resp.ok ? "Running" : "Not Running",
},
});
});
return get().statusStuff;
},
}));

View File

@@ -3,7 +3,8 @@ import {
PluginSettings,
PluginStatus,
} from "@stability/stablestudio-plugin";
import { Markdown } from "~/Markdown";
import { shallow } from "zustand/shallow";
import { Comfy } from "~/Comfy";
import { Plugin } from "~/Plugin";
import { Theme } from "~/Theme";
@@ -24,11 +25,11 @@ export function Manifest({
settings: PluginSettings;
setSetting: (key: string, value: any) => void;
}) {
const unloadPlugin = Plugin.useUnload();
const output = Comfy.use(({ output }) => output, shallow);
return (
<Panel className="flex flex-col gap-2">
<div className="flex flex-col">
<div className="mb-4">
<div className="flex flex-col gap-4">
<div>
<div className="flex items-start justify-between">
<div className="flex items-center gap-4">
{manifest?.icon && (
@@ -82,35 +83,17 @@ export function Manifest({
</div>
)}
</div>
{id && unloadPlugin && (
<Theme.Button
className="h-18"
icon={Theme.Icon.Trash}
onClick={() => id && unloadPlugin(id)}
>
Uninstall
</Theme.Button>
)}
</div>
<div className="mt-2 flex gap-5">
{manifest?.version && (
<MiniManifestField label="Version" value={manifest.version} />
)}
<MiniManifestField
label="License"
value={manifest?.license ?? "No license"}
/>
<MiniManifestField
label="Author"
value={manifest?.author ?? "No author"}
/>
</div>
</div>
<ManifestField
label="About"
value={manifest?.description ?? "No description"}
markdown
/>
{output.length > 0 && (
<>
<div className="whitespace-pre-wrap rounded bg-black/25 p-2 font-mono text-sm">
{output.map((line, index) => (
<p key={`${index}-${line}`}>{line.data}</p>
))}
</div>
</>
)}
</div>
{Object.keys(settings).length > 0 && (
@@ -130,25 +113,6 @@ export function Manifest({
);
}
function ManifestField({
label,
value,
markdown,
className,
}: {
label: string;
value: string | undefined;
markdown?: boolean;
className?: string;
}) {
return (
<div className={classes("flex flex-col gap-2", className)}>
<Theme.Label className="ml-0">{label}</Theme.Label>
{markdown ? <Markdown text={value ?? ""} /> : <p>{value}</p>}
</div>
);
}
function MiniManifestField({
label,
value,