czkawka_cli-11.0.1/.cargo_vcs_info.json0000644000000001511046102023000134150ustar { "git": { "sha1": "9e40abeae2841cb3fb3e7e5cc7f1bfe049f215a9" }, "path_in_vcs": "czkawka_cli" }czkawka_cli-11.0.1/Cargo.lock0000644000004340011046102023000113750ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "ab_glyph" version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", ] [[package]] name = "ab_glyph_rasterizer" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "addr2line" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] [[package]] name = "adler2" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "adler32" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "aes" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", "cpufeatures 0.2.17", ] [[package]] name = "ahash" version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", "once_cell", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "aligned" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" dependencies = [ "as-slice", ] [[package]] name = "aligned-vec" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" dependencies = [ "equator", ] [[package]] name = "alloc-no-stdlib" version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] [[package]] name = "allocator-api2" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "anstream" version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", "windows-sys 0.61.2", ] [[package]] name = "anyhow" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "approx" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ "num-traits", ] [[package]] name = "arbitrary" version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" [[package]] name = "arc-swap" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9f3647c145568cec02c42054e07bdf9a5a698e15b466fb2341bfc393cd24aa5" dependencies = [ "rustversion", ] [[package]] name = "arg_enum_proc_macro" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "arrayref" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as-slice" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" dependencies = [ "stable_deref_trait", ] [[package]] name = "ashpd" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "522dc9bec59923af17c43c5911cdabbacdb32ed4f955e83ecf592855618b20b5" dependencies = [ "enumflags2", "futures-channel", "futures-util", "rand 0.9.2", "serde", "serde_repr", "tokio", "url", "zbus", ] [[package]] name = "async-broadcast" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", ] [[package]] name = "async-recursion" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "async-trait" version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "av-data" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fca67ba5d317924c02180c576157afd54babe48a76ebc66ce6d34bb8ba08308e" dependencies = [ "byte-slice-cast", "bytes", "num-derive", "num-rational", "num-traits", ] [[package]] name = "av-scenechange" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" dependencies = [ "aligned", "anyhow", "arg_enum_proc_macro", "arrayvec", "log", "num-rational", "num-traits", "pastey", "rayon", "thiserror 2.0.18", "v_frame", "y4m", ] [[package]] name = "av1-grain" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" dependencies = [ "anyhow", "arrayvec", "log", "nom 8.0.0", "num-rational", "v_frame", ] [[package]] name = "avif-serialize" version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" dependencies = [ "arrayvec", ] [[package]] name = "backtrace" version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", "windows-link", ] [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "basic-toml" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" dependencies = [ "serde", ] [[package]] name = "bincode" version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ "serde", ] [[package]] name = "bit_field" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" [[package]] name = "bitreader" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "886559b1e163d56c765bc3a985febb4eee8009f625244511d8ee3c432e08c066" dependencies = [ "cfg-if", ] [[package]] name = "bitstream-io" version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" dependencies = [ "core2", ] [[package]] name = "bitvec" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", "tap", "wyz", ] [[package]] name = "bk-tree" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8283fb8e64b873918f8bc527efa6aff34956296e48ea750a9c909cd47c01546" dependencies = [ "fnv", "triple_accel", ] [[package]] name = "blake3" version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", "cpufeatures 0.2.17", ] [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "block-padding" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ "generic-array", ] [[package]] name = "block2" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" dependencies = [ "objc2", ] [[package]] name = "brotli" version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", "brotli-decompressor", ] [[package]] name = "brotli-decompressor" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] [[package]] name = "built" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" [[package]] name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "byte-slice-cast" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" [[package]] name = "bytecount" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "byteorder-lite" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "bzip2" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" dependencies = [ "libbz2-rs-sys", ] [[package]] name = "cbc" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ "cipher", ] [[package]] name = "cc" version = "1.2.56" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" dependencies = [ "find-msvc-tools", "jobserver", "libc", "shlex", ] [[package]] name = "cfb" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" dependencies = [ "byteorder", "fnv", "uuid", ] [[package]] name = "cfg-expr" version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78cef5b5a1a6827c7322ae2a636368a573006b27cfa76c7ebd53e834daeaab6a" dependencies = [ "smallvec", "target-lexicon", ] [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chacha20" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", "cpufeatures 0.3.0", "rand_core 0.10.0", ] [[package]] name = "chrono" version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fac4744fb15ae8337dc853fee7fb3f4e48c0fbaa23d0afe49c447b4fab126118" dependencies = [ "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-link", ] [[package]] name = "cipher" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", ] [[package]] name = "clap" version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" dependencies = [ "clap_builder", "clap_derive", ] [[package]] name = "clap_builder" version = "4.5.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim 0.11.1", ] [[package]] name = "clap_derive" version = "4.5.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" dependencies = [ "heck", "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "clap_lex" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" [[package]] name = "color_quant" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "concurrent-queue" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] [[package]] name = "console" version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03e45a4a8926227e4197636ba97a9fc9b00477e9f4bd711395687c5f0734bec4" dependencies = [ "encode_unicode", "libc", "once_cell", "unicode-width", "windows-sys 0.61.2", ] [[package]] name = "constant_time_eq" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core2" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ "memchr", ] [[package]] name = "cpufeatures" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "cpufeatures" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" dependencies = [ "libc", ] [[package]] name = "crc" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d" dependencies = [ "crc-catalog", ] [[package]] name = "crc-catalog" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", ] [[package]] name = "ctrlc" version = "3.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790" dependencies = [ "dispatch2", "nix", "windows-sys 0.61.2", ] [[package]] name = "czkawka_cli" version = "11.0.1" dependencies = [ "clap", "crossbeam-channel", "ctrlc", "czkawka_core", "humansize", "indicatif", "log", ] [[package]] name = "czkawka_core" version = "11.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0801ef32e53fc7bab20bee3f1eae78bcc8ad015057b5961243683b145eb6e9" dependencies = [ "ashpd", "bincode", "bitflags 2.11.0", "bk-tree", "blake3", "crc32fast", "crossbeam-channel", "deunicode", "directories-next", "dunce", "file-id", "file-rotate", "filetime", "fun_time", "glibc_musl_version", "hamming-bitwise-fast", "handsome_logger", "humansize", "i18n-embed", "i18n-embed-fl", "image", "image_hasher", "indexmap", "infer", "itertools 0.14.0", "jxl-oxide", "libheif-rs", "libraw-rs", "little_exif", "lofty", "log", "log-panics", "lopdf", "mime_guess", "nom-exif", "once_cell", "open", "os_info", "rand 0.10.0", "rawler", "rayon", "rust-embed", "rustc_version", "rusty-chromaprint", "serde", "serde_json", "static_assertions", "symphonia", "tempfile", "tokio", "trash", "vid_dup_finder_lib", "xxhash-rust", "zip", ] [[package]] name = "darling" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", ] [[package]] name = "darling_core" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.10.0", "syn 1.0.109", ] [[package]] name = "darling_macro" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", "syn 1.0.109", ] [[package]] name = "dary_heap" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06d2e3287df1c007e74221c49ca10a95d557349e54b3a75dc2fb14712c751f04" [[package]] name = "data-encoding" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" [[package]] name = "dav1d" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80c3f80814db85397819d464bb553268992c393b4b3b5554b89c1655996d5926" dependencies = [ "av-data", "bitflags 2.11.0", "dav1d-sys", "static_assertions", ] [[package]] name = "dav1d-sys" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c91aea6668645415331133ed6f8ddf0e7f40160cd97a12d59e68716a58704b" dependencies = [ "libc", "system-deps", ] [[package]] name = "deranged" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" dependencies = [ "powerfmt", ] [[package]] name = "deunicode" version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", "subtle", ] [[package]] name = "directories-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ "cfg-if", "dirs-sys-next", ] [[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", "winapi", ] [[package]] name = "dispatch2" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" dependencies = [ "bitflags 2.11.0", "block2", "libc", "objc2", ] [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "document-features" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" dependencies = [ "litrs", ] [[package]] name = "dunce" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "ecb" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a8bfa975b1aec2145850fcaa1c6fe269a16578c44705a532ae3edc92b8881c7" dependencies = [ "cipher", ] [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "encoding_rs" version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "endi" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" [[package]] name = "enum-utils" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed327f716d0d351d86c9fd3398d20ee39ad8f681873cc081da2ca1c10fed398a" dependencies = [ "enum-utils-from-str", "failure", "proc-macro2", "quote", "serde_derive_internals", "syn 1.0.109", ] [[package]] name = "enum-utils-from-str" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49be08bad6e4ca87b2b8e74146987d4e5cb3b7512efa50ef505b51a22227ee1" dependencies = [ "proc-macro2", "quote", ] [[package]] name = "enumflags2" version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" dependencies = [ "enumflags2_derive", "serde", ] [[package]] name = "enumflags2_derive" version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "enumn" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "equator" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" dependencies = [ "equator-macro", ] [[package]] name = "equator-macro" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", "windows-sys 0.61.2", ] [[package]] name = "event-listener" version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", "pin-project-lite", ] [[package]] name = "event-listener-strategy" version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ "event-listener", "pin-project-lite", ] [[package]] name = "exr" version = "1.74.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" dependencies = [ "bit_field", "half", "lebe", "miniz_oxide", "rayon-core", "smallvec", "zune-inflate", ] [[package]] name = "extended" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365" [[package]] name = "failure" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ "backtrace", ] [[package]] name = "fallible_collections" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a88c69768c0a15262df21899142bc6df9b9b823546d4b4b9a7bc2d6c448ec6fd" dependencies = [ "hashbrown 0.13.2", ] [[package]] name = "fast_image_resize" version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbc7fe45cf92b43817ff62a3723e862b85bd1d06288f63007f7645d1d2f7a060" dependencies = [ "bytemuck", "cfg-if", "document-features", "image", "num-traits", "thiserror 2.0.18", ] [[package]] name = "fast_image_resize" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12dd43e5011e8d8411a3215a0d57a2ec5c68282fb90eb5d7221fab0113442174" dependencies = [ "bytemuck", "cfg-if", "document-features", "image", "num-traits", "thiserror 2.0.18", ] [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fax" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" dependencies = [ "fax_derive", ] [[package]] name = "fax_derive" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "fdeflate" version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] [[package]] name = "ffmpeg_cmdline_utils" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30cbcb92e5f36bda100292a8bf8989631f3b6c4e4b71454ca803a9b837f63441" dependencies = [ "image", "serde", "serde_json", "thiserror 2.0.18", "winapi", ] [[package]] name = "ffmpeg_gst_wrapper" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc2e75be881230e5808200de02c435cfee05b5e0b978ce50cdbcf6527e8d13de" dependencies = [ "cfg-if", "ffmpeg_cmdline_utils", "image", "serde", "thiserror 2.0.18", "url", ] [[package]] name = "file-id" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1fc6a637b6dc58414714eddd9170ff187ecb0933d4c7024d1abbd23a3cc26e9" dependencies = [ "windows-sys 0.60.2", ] [[package]] name = "file-rotate" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e8e2fa049328a1f3295991407a88585805d126dfaadf74b9fe8c194c730aafc" dependencies = [ "chrono", "flate2", ] [[package]] name = "filetime" version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" dependencies = [ "cfg-if", "libc", "libredox", ] [[package]] name = "find-crate" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2" dependencies = [ "toml 0.5.11", ] [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "flate2" version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" dependencies = [ "crc32fast", "miniz_oxide", "zlib-rs", ] [[package]] name = "fluent" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477" dependencies = [ "fluent-bundle", "unic-langid", ] [[package]] name = "fluent-bundle" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" dependencies = [ "fluent-langneg", "fluent-syntax", "intl-memoizer", "intl_pluralrules", "rustc-hash", "self_cell", "smallvec", "unic-langid", ] [[package]] name = "fluent-langneg" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" dependencies = [ "unic-langid", ] [[package]] name = "fluent-syntax" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" dependencies = [ "memchr", "thiserror 2.0.18", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] name = "four-cc" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "795cbfc56d419a7ce47ccbb7504dd9a5b7c484c083c356e797de08bd988d9629" [[package]] name = "fun_time" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee194d43605ea83cca7af42af5f9001fab1a8e2220cb8a012e21dda6167fdb0" dependencies = [ "fun_time_derive", "log", ] [[package]] name = "fun_time_derive" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71555fd2db00938d82d29d8fa62a2ae80aed2c162c328d775f79e98d9212f013" dependencies = [ "darling", "log", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "funty" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures-channel" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", ] [[package]] name = "futures-core" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-io" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand", "futures-core", "futures-io", "parking", "pin-project-lite", ] [[package]] name = "futures-macro" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "futures-task" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "slab", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "geo-types" version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24f8647af4005fa11da47cd56252c6ef030be8fa97bdbf355e7dfb6348f0a82c" dependencies = [ "approx", "num-traits", "serde", ] [[package]] name = "getrandom" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", "libc", "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", "wasip2", ] [[package]] name = "getrandom" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", "rand_core 0.10.0", "wasip2", "wasip3", "wasm-bindgen", ] [[package]] name = "gif" version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" dependencies = [ "color_quant", "weezl", ] [[package]] name = "gimli" version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glibc_musl_version" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b03526c417228f37a649e2697eb015f81c59817679bf01ac62445ce6a9b19ef" [[package]] name = "glob" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "half" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", "zerocopy", ] [[package]] name = "hamming-bitwise-fast" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06d16627a786f2f40f9079bd54a3c7987df493d421f2a6fecca7dc0886ebc7b9" [[package]] name = "handsome_logger" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "088e04bbb44412ba271e360f49b5f5f8d09095380c81a2b6edb9602caf5025b7" dependencies = [ "log", "termcolor", "time", "tz-rs", ] [[package]] name = "hashbrown" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ "ahash", ] [[package]] name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "foldhash 0.1.5", ] [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", "foldhash 0.2.0", ] [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ "digest", ] [[package]] name = "humansize" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" dependencies = [ "libm", ] [[package]] name = "i18n-config" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef" dependencies = [ "basic-toml", "log", "serde", "serde_derive", "thiserror 1.0.69", "unic-langid", ] [[package]] name = "i18n-embed" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a217bbb075dcaefb292efa78897fc0678245ca67f265d12c351e42268fcb0305" dependencies = [ "arc-swap", "fluent", "fluent-langneg", "fluent-syntax", "i18n-embed-impl", "intl-memoizer", "log", "parking_lot", "rust-embed", "sys-locale", "thiserror 1.0.69", "unic-langid", "walkdir", ] [[package]] name = "i18n-embed-fl" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e598ed73b67db92f61e04672e599eef2991a262a40e1666735b8a86d2e7e9f30" dependencies = [ "find-crate", "fluent", "fluent-syntax", "i18n-config", "i18n-embed", "proc-macro-error2", "proc-macro2", "quote", "strsim 0.11.1", "syn 2.0.117", "unic-langid", ] [[package]] name = "i18n-embed-impl" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2cc0e0523d1fe6fc2c6f66e5038624ea8091b3e7748b5e8e0c84b1698db6c2" dependencies = [ "find-crate", "i18n-config", "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "iana-time-zone" version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "log", "wasm-bindgen", "windows-core 0.62.2", ] [[package]] name = "iana-time-zone-haiku" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] name = "icu_collections" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_locale_core" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", "tinystr", "writeable", "zerovec", ] [[package]] name = "icu_normalizer" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", "zerovec", ] [[package]] name = "icu_normalizer_data" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", "writeable", "yoke", "zerofrom", "zerotrie", "zerovec", ] [[package]] name = "id-arena" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", "utf8_iter", ] [[package]] name = "idna_adapter" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] name = "image" version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" dependencies = [ "bytemuck", "byteorder-lite", "color_quant", "dav1d", "exr", "gif", "image-webp", "moxcms", "mp4parse", "num-traits", "png", "qoi", "ravif", "rayon", "rgb", "tiff", "zune-core 0.5.1", "zune-jpeg 0.5.12", ] [[package]] name = "image-webp" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" dependencies = [ "byteorder-lite", "quick-error", ] [[package]] name = "image_hasher" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300d892b049fb36ce62fb515b68aeade53dca784bc02093e359edc6625c479ac" dependencies = [ "base64", "fast_image_resize 6.0.0", "image", "rustdct", "serde", "transpose", ] [[package]] name = "imageproc" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2393fb7808960751a52e8a154f67e7dd3f8a2ef9bd80d1553078a7b4e8ed3f0d" dependencies = [ "ab_glyph", "approx", "getrandom 0.2.17", "image", "itertools 0.12.1", "nalgebra", "num", "rand 0.8.5", "rand_distr", "rayon", ] [[package]] name = "imgref" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", "serde", "serde_core", ] [[package]] name = "indicatif" version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" dependencies = [ "console", "portable-atomic", "unicode-width", "unit-prefix", "web-time", ] [[package]] name = "infer" version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" dependencies = [ "cfb", ] [[package]] name = "inout" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "block-padding", "generic-array", ] [[package]] name = "interpolate_name" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "intl-memoizer" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" dependencies = [ "type-map", "unic-langid", ] [[package]] name = "intl_pluralrules" version = "7.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" dependencies = [ "unic-langid", ] [[package]] name = "is-docker" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" dependencies = [ "once_cell", ] [[package]] name = "is-wsl" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" dependencies = [ "is-docker", "once_cell", ] [[package]] name = "is_terminal_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "iso6709parse" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5090db9c6a716d1f4eeb729957e889e9c28156061c825cbccd44950cf0f3c66" dependencies = [ "geo-types", "nom 7.1.3", ] [[package]] name = "itertools" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itertools" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jiff" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" dependencies = [ "jiff-static", "jiff-tzdb-platform", "log", "portable-atomic", "portable-atomic-util", "serde_core", "windows-sys 0.61.2", ] [[package]] name = "jiff-static" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "jiff-tzdb" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" [[package]] name = "jiff-tzdb-platform" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8" dependencies = [ "jiff-tzdb", ] [[package]] name = "jobserver" version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ "getrandom 0.3.4", "libc", ] [[package]] name = "js-sys" version = "0.3.85" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" dependencies = [ "once_cell", "wasm-bindgen", ] [[package]] name = "jxl-bitstream" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b480e752277e29eb4054f69546887a9b84656fe78c08f54ba5850ced98a378fe" dependencies = [ "tracing", ] [[package]] name = "jxl-coding" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd972bcd125e776f1eb241ac50e39f956095a1c2770c64736c968f8946bd9a3c" dependencies = [ "jxl-bitstream", "tracing", ] [[package]] name = "jxl-color" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f316b1358c1711755b3ee8e8cb5c4a1dad12e796233088a7a513440782de80b2" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-image", "jxl-oxide-common", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-frame" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d967c6fd669c7c01060b5022d8835fa82fd46b06ffc98b549f17600a097c2b3" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-image", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-grid" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0e0ef92d5d60e76bf41098e57e985f523185e08fad54268da448637feca6989" dependencies = [ "tracing", ] [[package]] name = "jxl-image" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5f752d62577c702a94dbbce4045caf08cb58639e8a4d56464b40ecf33ffe565" dependencies = [ "jxl-bitstream", "jxl-grid", "jxl-oxide-common", "tracing", ] [[package]] name = "jxl-jbr" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e35d032bcec660647828527ff42c6f5776d2fd44b8357f9f6d9ac6dc07218e46" dependencies = [ "brotli-decompressor", "jxl-bitstream", "jxl-frame", "jxl-grid", "jxl-image", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-modular" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da758b2f989aafd9eeb39489fe43d7be5a3a0d2ad61cf1bad705eb6990a6053c" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-oxide-common", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-oxide" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee8ecd2678ed70c1eda42b811ccb2e25ab836edeb18e7f1178c1f917ed36b772" dependencies = [ "brotli-decompressor", "bytemuck", "image", "jxl-bitstream", "jxl-color", "jxl-frame", "jxl-grid", "jxl-image", "jxl-jbr", "jxl-oxide-common", "jxl-render", "jxl-threadpool", "tracing", ] [[package]] name = "jxl-oxide-common" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62394c5021b3a9e7e0dbb2d639d555d019090c9946c39f6d3b09d390db4157b" dependencies = [ "jxl-bitstream", ] [[package]] name = "jxl-render" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa0c3100918bd3c41bb0f8ce1f4f1664e48f3032ff8eeab0d6a2cfc3276f462d" dependencies = [ "bytemuck", "jxl-bitstream", "jxl-coding", "jxl-color", "jxl-frame", "jxl-grid", "jxl-image", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "jxl-vardct", "tracing", ] [[package]] name = "jxl-threadpool" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25f15eb830aa77a7f21148d72e153562a26bfe570139bd4922eab1908dd499d3" dependencies = [ "rayon", "rayon-core", "tracing", ] [[package]] name = "jxl-vardct" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce72a18c6d3a47172ab6c479be2bdb56f22066b5d7092663f03b4490820b4511" dependencies = [ "jxl-bitstream", "jxl-coding", "jxl-grid", "jxl-modular", "jxl-oxide-common", "jxl-threadpool", "tracing", ] [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "leb128fmt" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "lebe" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" [[package]] name = "libbz2-rs-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" [[package]] name = "libc" version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" [[package]] name = "libflate" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3248b8d211bd23a104a42d81b4fa8bb8ac4a3b75e7a43d85d2c9ccb6179cd74" dependencies = [ "adler32", "core2", "crc32fast", "dary_heap", "libflate_lz77", ] [[package]] name = "libflate_lz77" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a599cb10a9cd92b1300debcef28da8f70b935ec937f44fcd1b70a7c986a11c5c" dependencies = [ "core2", "hashbrown 0.16.1", "rle-decode-fast", ] [[package]] name = "libfuzzer-sys" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" dependencies = [ "arbitrary", "cc", ] [[package]] name = "libheif-rs" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5de2912bca071d0f609cd6cb8d348c475439f69e808726374bea9e079591559e" dependencies = [ "cfg-if", "enumn", "four-cc", "image", "libc", "libheif-sys", ] [[package]] name = "libheif-sys" version = "5.2.0+1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "107c0d813a0cf5ddf7af2c58a60611f18efdb2830e84d9b37580fb20e6e27a2b" dependencies = [ "cfg-if", "libc", "system-deps", "vcpkg", "walkdir", ] [[package]] name = "libm" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libraw-rs" version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24ec60aab878560c299c6e70a0c6dc2278a2159ac6fe09650917266b8985387f" dependencies = [ "libraw-rs-sys", ] [[package]] name = "libraw-rs-sys" version = "0.0.4+libraw-0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba094a3b8b04cc42fdeafaff06f81d3b13a7d01cc7a8eae55b943dae1b65c3cc" dependencies = [ "cc", "libc", ] [[package]] name = "libredox" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ "bitflags 2.11.0", "libc", "redox_syscall 0.7.1", ] [[package]] name = "linux-raw-sys" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "litemap" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] name = "litrs" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "little_exif" version = "0.6.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21eeb58b22d31be8dc5c625004fcd4b9b385cd3c05df575f523bcca382c51122" dependencies = [ "brotli", "crc", "log", "miniz_oxide", "paste", "quick-xml", ] [[package]] name = "lock_api" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ "scopeguard", ] [[package]] name = "lofty" version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "179408be6ddda3771589a4e940b1b5718613fa9986d78f420890d20e2b6fc278" dependencies = [ "byteorder", "data-encoding", "flate2", "lofty_attr", "log", "ogg_pager", "paste", ] [[package]] name = "lofty_attr" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "458ace39169e4b83c4f77ae3d42d5d1d11c422feef590219a97c973d3b524557" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "log" version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "log-panics" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" dependencies = [ "backtrace", "log", ] [[package]] name = "loop9" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" dependencies = [ "imgref", ] [[package]] name = "lopdf" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f560f57dfb9142a02d673e137622fd515d4231e51feb8b4af28d92647d83f35b" dependencies = [ "aes", "bitflags 2.11.0", "cbc", "chrono", "ecb", "encoding_rs", "flate2", "getrandom 0.3.4", "indexmap", "itoa", "jiff", "log", "md-5", "nom 8.0.0", "nom_locate", "rand 0.9.2", "rangemap", "rayon", "sha2", "stringprep", "thiserror 2.0.18", "time", "ttf-parser", "weezl", ] [[package]] name = "matrixmultiply" version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", ] [[package]] name = "maybe-rayon" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" dependencies = [ "cfg-if", "rayon", ] [[package]] name = "md-5" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", "digest", ] [[package]] name = "md5" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0" [[package]] name = "memchr" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] [[package]] name = "memoffset" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", ] [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", ] [[package]] name = "mio" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", "windows-sys 0.61.2", ] [[package]] name = "moxcms" version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" dependencies = [ "num-traits", "pxfm", ] [[package]] name = "mp4parse" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63a35203d3c6ce92d5251c77520acb2e57108c88728695aa883f70023624c570" dependencies = [ "bitreader", "byteorder", "fallible_collections", "log", "num-traits", "static_assertions", ] [[package]] name = "multiversion" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edb7f0ff51249dfda9ab96b5823695e15a052dc15074c9dbf3d118afaf2c201" dependencies = [ "multiversion-macros", "target-features", ] [[package]] name = "multiversion-macros" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b093064383341eb3271f42e381cb8f10a01459478446953953c75d24bd339fc0" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", "target-features", ] [[package]] name = "nalgebra" version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" dependencies = [ "approx", "matrixmultiply", "num-complex", "num-rational", "num-traits", "simba", "typenum", ] [[package]] name = "ndarray" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" dependencies = [ "matrixmultiply", "num-complex", "num-integer", "num-traits", "portable-atomic", "portable-atomic-util", "rawpointer", ] [[package]] name = "new_debug_unreachable" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "nix" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ "bitflags 2.11.0", "cfg-if", "cfg_aliases", "libc", ] [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] name = "nom" version = "8.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" dependencies = [ "memchr", ] [[package]] name = "nom-exif" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e78a8215f056e78a6887b4872e61bab5690dec4648b37396b6721be6f89c4ea" dependencies = [ "bytes", "chrono", "iso6709parse", "nom 7.1.3", "regex", "thiserror 2.0.18", "tracing", ] [[package]] name = "nom_locate" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b577e2d69827c4740cba2b52efaad1c4cc7c73042860b199710b3575c68438d" dependencies = [ "bytecount", "memchr", "nom 8.0.0", ] [[package]] name = "noop_proc_macro" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" [[package]] name = "num" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ "num-bigint", "num-complex", "num-integer", "num-iter", "num-rational", "num-traits", ] [[package]] name = "num-bigint" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", ] [[package]] name = "num-complex" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] [[package]] name = "num-conv" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" [[package]] name = "num-derive" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ "num-traits", ] [[package]] name = "num-iter" version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-rational" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ "num-bigint", "num-integer", "num-traits", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", ] [[package]] name = "num_enum" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", ] [[package]] name = "num_enum_derive" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "num_threads" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] [[package]] name = "objc2" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" dependencies = [ "objc2-encode", ] [[package]] name = "objc2-cloud-kit" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ "bitflags 2.11.0", "objc2", "objc2-foundation", ] [[package]] name = "objc2-core-data" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ "objc2", "objc2-foundation", ] [[package]] name = "objc2-core-foundation" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ "bitflags 2.11.0", "dispatch2", "objc2", ] [[package]] name = "objc2-core-graphics" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ "bitflags 2.11.0", "dispatch2", "objc2", "objc2-core-foundation", "objc2-io-surface", ] [[package]] name = "objc2-core-image" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" dependencies = [ "objc2", "objc2-foundation", ] [[package]] name = "objc2-core-location" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" dependencies = [ "objc2", "objc2-foundation", ] [[package]] name = "objc2-core-text" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ "bitflags 2.11.0", "objc2", "objc2-core-foundation", "objc2-core-graphics", ] [[package]] name = "objc2-encode" version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" [[package]] name = "objc2-foundation" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ "bitflags 2.11.0", "block2", "libc", "objc2", "objc2-core-foundation", ] [[package]] name = "objc2-io-surface" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ "bitflags 2.11.0", "objc2", "objc2-core-foundation", ] [[package]] name = "objc2-quartz-core" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ "bitflags 2.11.0", "objc2", "objc2-core-foundation", "objc2-foundation", ] [[package]] name = "objc2-ui-kit" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" dependencies = [ "bitflags 2.11.0", "block2", "objc2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-foundation", "objc2-core-graphics", "objc2-core-image", "objc2-core-location", "objc2-core-text", "objc2-foundation", "objc2-quartz-core", "objc2-user-notifications", ] [[package]] name = "objc2-user-notifications" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" dependencies = [ "objc2", "objc2-foundation", ] [[package]] name = "object" version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] [[package]] name = "ogg_pager" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d6d1ca8364b84e0cf725eed06b1460c44671e6c0fb28765f5262de3ece07fdc" dependencies = [ "byteorder", ] [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" version = "5.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" dependencies = [ "is-wsl", "libc", "pathdiff", ] [[package]] name = "ordered-stream" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" dependencies = [ "futures-core", "pin-project-lite", ] [[package]] name = "os_info" version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4022a17595a00d6a369236fdae483f0de7f0a339960a53118b818238e132224" dependencies = [ "android_system_properties", "log", "nix", "objc2", "objc2-foundation", "objc2-ui-kit", "windows-sys 0.61.2", ] [[package]] name = "owned_ttf_parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" dependencies = [ "ttf-parser", ] [[package]] name = "parking" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall 0.5.18", "smallvec", "windows-link", ] [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pastey" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" [[package]] name = "pathdiff" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pbkdf2" version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest", "hmac", ] [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project-lite" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pkg-config" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "png" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ "bitflags 2.11.0", "crc32fast", "fdeflate", "flate2", "miniz_oxide", ] [[package]] name = "portable-atomic" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ "zerovec", ] [[package]] name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "prettyplease" version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn 2.0.117", ] [[package]] name = "primal-check" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc0d895b311e3af9902528fbb8f928688abbd95872819320517cc24ca6b2bd08" dependencies = [ "num-integer", ] [[package]] name = "proc-macro-crate" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit 0.23.10+spec-1.0.0", ] [[package]] name = "proc-macro-error-attr2" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" dependencies = [ "proc-macro2", "quote", ] [[package]] name = "proc-macro-error2" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "proc-macro2" version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" dependencies = [ "profiling-procmacros", ] [[package]] name = "profiling-procmacros" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", "syn 2.0.117", ] [[package]] name = "pxfm" version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" dependencies = [ "num-traits", ] [[package]] name = "qoi" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" dependencies = [ "bytemuck", ] [[package]] name = "quick-error" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", ] [[package]] name = "quote" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" [[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", ] [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", ] [[package]] name = "rand" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" dependencies = [ "chacha20", "getrandom 0.4.1", "rand_core 0.10.0", ] [[package]] name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core 0.6.4", ] [[package]] name = "rand_chacha" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", "rand_core 0.9.5", ] [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom 0.2.17", ] [[package]] name = "rand_core" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" dependencies = [ "getrandom 0.3.4", ] [[package]] name = "rand_core" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" [[package]] name = "rand_distr" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", "rand 0.8.5", ] [[package]] name = "rangemap" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "973443cf09a9c8656b574a866ab68dfa19f0867d0340648c7d2f6a71b8a8ea68" [[package]] name = "rav1e" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" dependencies = [ "aligned-vec", "arbitrary", "arg_enum_proc_macro", "arrayvec", "av-scenechange", "av1-grain", "bitstream-io", "built", "cfg-if", "interpolate_name", "itertools 0.14.0", "libc", "libfuzzer-sys", "log", "maybe-rayon", "new_debug_unreachable", "noop_proc_macro", "num-derive", "num-traits", "paste", "profiling", "rand 0.9.2", "rand_chacha 0.9.0", "simd_helpers", "thiserror 2.0.18", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" dependencies = [ "avif-serialize", "imgref", "loop9", "quick-error", "rav1e", "rayon", "rgb", ] [[package]] name = "rawler" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a888d0a4bf6a13c112c88d279d2d4a1f60dd8ca520fdd65193de54687cb9d2d" dependencies = [ "backtrace", "bitstream-io", "byteorder", "chrono", "enumn", "glob", "hex", "image", "itertools 0.14.0", "jxl-oxide", "lazy_static", "libflate", "log", "md5", "memmap2", "multiversion", "num", "num_enum", "rayon", "rustc_version", "serde", "thiserror 2.0.18", "toml 0.8.23", "uuid", "weezl", "zerocopy", ] [[package]] name = "rawpointer" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "realfft" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f821338fddb99d089116342c46e9f1fbf3828dba077674613e734e01d6ea8677" dependencies = [ "rustfft", ] [[package]] name = "redox_syscall" version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags 2.11.0", ] [[package]] name = "redox_syscall" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" dependencies = [ "bitflags 2.11.0", ] [[package]] name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] [[package]] name = "regex" version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" [[package]] name = "rgb" version = "0.8.52" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" [[package]] name = "rle-decode-fast" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" [[package]] name = "rubato" version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5258099699851cfd0082aeb645feb9c084d9a5e1f1b8d5372086b989fc5e56a1" dependencies = [ "num-complex", "num-integer", "num-traits", "realfft", ] [[package]] name = "rust-embed" version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04113cb9355a377d83f06ef1f0a45b8ab8cd7d8b1288160717d66df5c7988d27" dependencies = [ "rust-embed-impl", "rust-embed-utils", "walkdir", ] [[package]] name = "rust-embed-impl" version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0902e4c7c8e997159ab384e6d0fc91c221375f6894346ae107f47dd0f3ccaa" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", "syn 2.0.117", "walkdir", ] [[package]] name = "rust-embed-utils" version = "8.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bcdef0be6fe7f6fa333b1073c949729274b05f123a0ad7efcb8efd878e5c3b1" dependencies = [ "sha2", "walkdir", ] [[package]] name = "rustc-demangle" version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" [[package]] name = "rustc-hash" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustdct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b61555105d6a9bf98797c063c362a1d24ed8ab0431655e38f1cf51e52089551" dependencies = [ "rustfft", ] [[package]] name = "rustfft" version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21db5f9893e91f41798c88680037dba611ca6674703c1a18601b01a72c8adb89" dependencies = [ "num-complex", "num-integer", "num-traits", "primal-check", "strength_reduce", "transpose", ] [[package]] name = "rustix" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags 2.11.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.61.2", ] [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-chromaprint" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e4234523e38d9c12201955f8216e1a60313e64c5077f4e1cf49b0db77bd7e8" dependencies = [ "rubato", "rustfft", ] [[package]] name = "safe_arch" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "self_cell" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" [[package]] name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", ] [[package]] name = "serde_core" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "serde_derive_internals" version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] [[package]] name = "serde_json" version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", "serde", "serde_core", "zmij", ] [[package]] name = "serde_repr" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "serde_spanned" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] [[package]] name = "serde_spanned" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] [[package]] name = "sha1" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures 0.2.17", "digest", ] [[package]] name = "sha2" version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures 0.2.17", "digest", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ "errno", "libc", ] [[package]] name = "simba" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", "num-traits", "paste", "wide", ] [[package]] name = "simd-adler32" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "simd_helpers" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" dependencies = [ "quote", ] [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0" dependencies = [ "libc", "windows-sys 0.60.2", ] [[package]] name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strength_reduce" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" [[package]] name = "stringprep" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" dependencies = [ "unicode-bidi", "unicode-normalization", "unicode-properties", ] [[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "symphonia" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5773a4c030a19d9bfaa090f49746ff35c75dfddfa700df7a5939d5e076a57039" dependencies = [ "lazy_static", "symphonia-bundle-flac", "symphonia-bundle-mp3", "symphonia-codec-aac", "symphonia-codec-adpcm", "symphonia-codec-alac", "symphonia-codec-pcm", "symphonia-codec-vorbis", "symphonia-core", "symphonia-format-caf", "symphonia-format-isomp4", "symphonia-format-mkv", "symphonia-format-ogg", "symphonia-format-riff", "symphonia-metadata", ] [[package]] name = "symphonia-bundle-flac" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c91565e180aea25d9b80a910c546802526ffd0072d0b8974e3ebe59b686c9976" dependencies = [ "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-bundle-mp3" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4872dd6bb56bf5eac799e3e957aa1981086c3e613b27e0ac23b176054f7c57ed" dependencies = [ "lazy_static", "log", "symphonia-core", "symphonia-metadata", ] [[package]] name = "symphonia-codec-aac" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c263845aa86881416849c1729a54c7f55164f8b96111dba59de46849e73a790" dependencies = [ "lazy_static", "log", "symphonia-core", ] [[package]] name = "symphonia-codec-adpcm" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dddc50e2bbea4cfe027441eece77c46b9f319748605ab8f3443350129ddd07f" dependencies = [ "log", "symphonia-core", ] [[package]] name = "symphonia-codec-alac" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8413fa754942ac16a73634c9dfd1500ed5c61430956b33728567f667fdd393ab" dependencies = [ "log", "symphonia-core", ] [[package]] name = "symphonia-codec-pcm" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e89d716c01541ad3ebe7c91ce4c8d38a7cf266a3f7b2f090b108fb0cb031d95" dependencies = [ "log", "symphonia-core", ] [[package]] name = "symphonia-codec-vorbis" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f025837c309cd69ffef572750b4a2257b59552c5399a5e49707cc5b1b85d1c73" dependencies = [ "log", "symphonia-core", "symphonia-utils-xiph", ] [[package]] name = "symphonia-core" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea00cc4f79b7f6bb7ff87eddc065a1066f3a43fe1875979056672c9ef948c2af" dependencies = [ "arrayvec", "bitflags 1.3.2", "bytemuck", "lazy_static", "log", ] [[package]] name = "symphonia-format-caf" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8faf379316b6b6e6bbc274d00e7a592e0d63ff1a7e182ce8ba25e24edd3d096" dependencies = [ "log", "symphonia-core", "symphonia-metadata", ] [[package]] name = "symphonia-format-isomp4" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "243739585d11f81daf8dac8d9f3d18cc7898f6c09a259675fc364b382c30e0a5" dependencies = [ "encoding_rs", "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-format-mkv" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "122d786d2c43a49beb6f397551b4a050d8229eaa54c7ddf9ee4b98899b8742d0" dependencies = [ "lazy_static", "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-format-ogg" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b4955c67c1ed3aa8ae8428d04ca8397fbef6a19b2b051e73b5da8b1435639cb" dependencies = [ "log", "symphonia-core", "symphonia-metadata", "symphonia-utils-xiph", ] [[package]] name = "symphonia-format-riff" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2d7c3df0e7d94efb68401d81906eae73c02b40d5ec1a141962c592d0f11a96f" dependencies = [ "extended", "log", "symphonia-core", "symphonia-metadata", ] [[package]] name = "symphonia-metadata" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36306ff42b9ffe6e5afc99d49e121e0bd62fe79b9db7b9681d48e29fa19e6b16" dependencies = [ "encoding_rs", "lazy_static", "log", "symphonia-core", ] [[package]] name = "symphonia-utils-xiph" version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27c85ab799a338446b68eec77abf42e1a6f1bb490656e121c6e27bfbab9f16" dependencies = [ "symphonia-core", "symphonia-metadata", ] [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "syn" version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "synstructure" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "sys-locale" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" dependencies = [ "libc", ] [[package]] name = "system-deps" version = "7.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c8f33736f986f16d69b6cb8b03f55ddcad5c41acc4ccc39dd88e84aa805e7f" dependencies = [ "cfg-expr", "heck", "pkg-config", "toml 0.9.12+spec-1.1.0", "version-compare", ] [[package]] name = "tap" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-features" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1bbb9f3c5c463a01705937a24fdabc5047929ac764b2d5b9cf681c1f5041ed5" [[package]] name = "target-lexicon" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "tempfile" version = "3.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" dependencies = [ "fastrand", "getrandom 0.4.1", "once_cell", "rustix", "windows-sys 0.61.2", ] [[package]] name = "termcolor" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl 2.0.18", ] [[package]] name = "thiserror-impl" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "thiserror-impl" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "tiff" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" dependencies = [ "fax", "flate2", "half", "quick-error", "weezl", "zune-jpeg 0.4.21", ] [[package]] name = "time" version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", "js-sys", "libc", "num-conv", "num_threads", "powerfmt", "serde_core", "time-core", "time-macros", ] [[package]] name = "time-core" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" [[package]] name = "time-macros" version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" dependencies = [ "num-conv", "time-core", ] [[package]] name = "tinystr" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", "serde_core", "zerovec", ] [[package]] name = "tinyvec" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "signal-hook-registry", "socket2", "tracing", "windows-sys 0.61.2", ] [[package]] name = "toml" version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] name = "toml" version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_edit 0.22.27", ] [[package]] name = "toml" version = "0.9.12+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", "serde_spanned 1.0.4", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", "winnow", ] [[package]] name = "toml_datetime" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", "winnow", ] [[package]] name = "toml_edit" version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "winnow", ] [[package]] name = "toml_parser" version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ "winnow", ] [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tracing" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "tracing-core" version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] [[package]] name = "transpose" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad61aed86bc3faea4300c7aee358b4c6d0c8d6ccc36524c96e4c92ccf26e77e" dependencies = [ "num-integer", "strength_reduce", ] [[package]] name = "trash" version = "5.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9b93a14fcf658568eb11b3ac4cb406822e916e2c55cdebc421beeb0bd7c94d8" dependencies = [ "chrono", "libc", "log", "objc2", "objc2-foundation", "once_cell", "percent-encoding", "scopeguard", "urlencoding", "windows", ] [[package]] name = "triple_accel" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "622b09ce2fe2df4618636fb92176d205662f59803f39e70d1c333393082de96c" [[package]] name = "ttf-parser" version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "type-map" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" dependencies = [ "rustc-hash", ] [[package]] name = "typed-path" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "tz-rs" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fc6c929ffa10fb34f4a3c7e9a73620a83ef2e85e47f9ec3381b8289e6762f42" [[package]] name = "uds_windows" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ "memoffset", "tempfile", "winapi", ] [[package]] name = "unic-langid" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" dependencies = [ "unic-langid-impl", ] [[package]] name = "unic-langid-impl" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", "tinystr", ] [[package]] name = "unicase" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-bidi" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" dependencies = [ "tinyvec", ] [[package]] name = "unicode-properties" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-width" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unit-prefix" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" [[package]] name = "url" version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", "serde_derive", ] [[package]] name = "urlencoding" version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" dependencies = [ "getrandom 0.4.1", "js-sys", "serde_core", "wasm-bindgen", ] [[package]] name = "v_frame" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" dependencies = [ "aligned-vec", "num-traits", "wasm-bindgen", ] [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vid_dup_finder_common" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b601345173cab95df37a54b3351a77f85a9d11429487310b6a2e49ac37bc1942" dependencies = [ "fast_image_resize 5.5.0", "image", "imageproc", "itertools 0.14.0", "rand 0.9.2", "winapi", ] [[package]] name = "vid_dup_finder_lib" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2bcf6135b99bca822ea095fc485066bf8c0f8788f575d6808a12619ba721b38" dependencies = [ "bitvec", "cfg-if", "enum-utils", "ffmpeg_gst_wrapper", "image", "itertools 0.14.0", "ndarray", "rand 0.9.2", "rustdct", "serde", "thiserror 2.0.18", "vid_dup_finder_common", ] [[package]] name = "walkdir" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" version = "1.0.2+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasip3" version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", "quote", "syn 2.0.117", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-encoder" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" dependencies = [ "leb128fmt", "wasmparser", ] [[package]] name = "wasm-metadata" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", "indexmap", "wasm-encoder", "wasmparser", ] [[package]] name = "wasmparser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags 2.11.0", "hashbrown 0.15.5", "indexmap", "semver", ] [[package]] name = "web-time" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "weezl" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wide" version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", ] [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" dependencies = [ "windows-core 0.56.0", "windows-targets 0.52.6", ] [[package]] name = "windows-core" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ "windows-implement 0.56.0", "windows-interface 0.56.0", "windows-result 0.1.2", "windows-targets 0.52.6", ] [[package]] name = "windows-core" version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement 0.60.2", "windows-interface 0.59.3", "windows-link", "windows-result 0.4.1", "windows-strings", ] [[package]] name = "windows-implement" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "windows-implement" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "windows-interface" version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "windows-interface" version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ "windows-targets 0.53.5", ] [[package]] name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows-targets" version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", "windows_i686_gnullvm 0.53.1", "windows_i686_msvc 0.53.1", "windows_x86_64_gnu 0.53.1", "windows_x86_64_gnullvm 0.53.1", "windows_x86_64_msvc 0.53.1", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] [[package]] name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ "wit-bindgen-rust-macro", ] [[package]] name = "wit-bindgen-core" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" dependencies = [ "anyhow", "heck", "wit-parser", ] [[package]] name = "wit-bindgen-rust" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck", "indexmap", "prettyplease", "syn 2.0.117", "wasm-metadata", "wit-bindgen-core", "wit-component", ] [[package]] name = "wit-bindgen-rust-macro" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" dependencies = [ "anyhow", "prettyplease", "proc-macro2", "quote", "syn 2.0.117", "wit-bindgen-core", "wit-bindgen-rust", ] [[package]] name = "wit-component" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", "bitflags 2.11.0", "indexmap", "log", "serde", "serde_derive", "serde_json", "wasm-encoder", "wasm-metadata", "wasmparser", "wit-parser", ] [[package]] name = "wit-parser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", "indexmap", "log", "semver", "serde", "serde_derive", "serde_json", "unicode-xid", "wasmparser", ] [[package]] name = "writeable" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "wyz" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ "tap", ] [[package]] name = "xxhash-rust" version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "y4m" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" [[package]] name = "yoke" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" dependencies = [ "stable_deref_trait", "yoke-derive", "zerofrom", ] [[package]] name = "yoke-derive" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", "synstructure", ] [[package]] name = "zbus" version = "5.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfeff997a0aaa3eb20c4652baf788d2dfa6d2839a0ead0b3ff69ce2f9c4bdd1" dependencies = [ "async-broadcast", "async-recursion", "async-trait", "enumflags2", "event-listener", "futures-core", "futures-lite", "hex", "libc", "ordered-stream", "rustix", "serde", "serde_repr", "tokio", "tracing", "uds_windows", "uuid", "windows-sys 0.61.2", "winnow", "zbus_macros", "zbus_names", "zvariant", ] [[package]] name = "zbus_macros" version = "5.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bbd5a90dbe8feee5b13def448427ae314ccd26a49cac47905cafefb9ff846f1" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.117", "zbus_names", "zvariant", "zvariant_utils", ] [[package]] name = "zbus_names" version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" dependencies = [ "serde", "winnow", "zvariant", ] [[package]] name = "zerocopy" version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.8.39" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "zerofrom" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", "synstructure", ] [[package]] name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "zerotrie" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" dependencies = [ "displaydoc", "yoke", "zerofrom", ] [[package]] name = "zerovec" version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ "serde", "yoke", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", "syn 2.0.117", ] [[package]] name = "zip" version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e499faf5c6b97a0d086f4a8733de6d47aee2252b8127962439d8d4311a73f72" dependencies = [ "aes", "bzip2", "constant_time_eq", "crc32fast", "flate2", "getrandom 0.4.1", "hmac", "indexmap", "memchr", "pbkdf2", "sha1", "time", "typed-path", "zeroize", "zopfli", ] [[package]] name = "zlib-rs" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c745c48e1007337ed136dc99df34128b9faa6ed542d80a1c673cf55a6d7236c8" [[package]] name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" [[package]] name = "zopfli" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" dependencies = [ "bumpalo", "crc32fast", "log", "simd-adler32", ] [[package]] name = "zune-core" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" [[package]] name = "zune-core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" [[package]] name = "zune-inflate" version = "0.2.54" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] [[package]] name = "zune-jpeg" version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" dependencies = [ "zune-core 0.4.12", ] [[package]] name = "zune-jpeg" version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" dependencies = [ "zune-core 0.5.1", ] [[package]] name = "zvariant" version = "5.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68b64ef4f40c7951337ddc7023dd03528a57a3ce3408ee9da5e948bd29b232c4" dependencies = [ "endi", "enumflags2", "serde", "url", "winnow", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" version = "5.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "484d5d975eb7afb52cc6b929c13d3719a20ad650fea4120e6310de3fc55e415c" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.117", "zvariant_utils", ] [[package]] name = "zvariant_utils" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" dependencies = [ "proc-macro2", "quote", "serde", "syn 2.0.117", "winnow", ] czkawka_cli-11.0.1/Cargo.toml0000644000000110641046102023000114200ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2024" rust-version = "1.92.0" name = "czkawka_cli" version = "11.0.1" authors = ["Rafał Mikrut "] build = false autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "CLI frontend of Czkawka" homepage = "https://github.com/qarmin/czkawka" readme = "README.md" license = "MIT" repository = "https://github.com/qarmin/czkawka" [features] default = [] heif = ["czkawka_core/heif"] libavif = ["czkawka_core/libavif"] libraw = ["czkawka_core/libraw"] no_colors = [] xdg_portal_trash = ["czkawka_core/xdg_portal_trash"] [[bin]] name = "czkawka_cli" path = "src/main.rs" [dependencies.clap] version = "4.5" features = [ "derive", "color", ] [dependencies.crossbeam-channel] version = "0.5" features = [] [dependencies.ctrlc] version = "3.4" features = ["termination"] [dependencies.czkawka_core] version = "11.0.1" features = [] [dependencies.humansize] version = "2.1" [dependencies.indicatif] version = "0.18" [dependencies.log] version = "0.4.22" [lints.clippy] allow_attributes = "warn" assertions_on_result_states = "warn" bool_to_int_with_if = "warn" branches_sharing_code = "warn" collapsible_else_if = "allow" collection_is_never_read = "warn" dbg_macro = "warn" debug_assert_with_mut_call = "warn" doc_broken_link = "warn" elidable_lifetime_names = "warn" empty_enum_variants_with_brackets = "warn" enum_glob_use = "warn" enum_variant_names = "allow" equatable_if_let = "warn" error_impl_error = "warn" expl_impl_clone_on_copy = "warn" explicit_into_iter_loop = "warn" explicit_iter_loop = "warn" fallible_impl_from = "warn" filter_map_next = "warn" flat_map_option = "warn" float_cmp = "warn" from_iter_instead_of_collect = "warn" ignore_without_reason = "warn" ignored_unit_patterns = "warn" implicit_clone = "warn" index_refutable_slice = "warn" indexing_slicing = "warn" invalid_upcast_comparisons = "warn" ip_constant = "warn" iter_filter_is_ok = "warn" iter_filter_is_some = "warn" iter_on_empty_collections = "warn" iter_on_single_items = "allow" iter_with_drain = "warn" large_stack_arrays = "warn" large_types_passed_by_value = "warn" literal_string_with_formatting_args = "warn" lossy_float_literal = "warn" macro_use_imports = "warn" manual_assert = "warn" manual_instant_elapsed = "warn" manual_is_variant_and = "warn" manual_let_else = "warn" manual_midpoint = "warn" manual_ok_or = "warn" map_unwrap_or = "warn" match_bool = "warn" match_same_arms = "warn" match_wildcard_for_single_variants = "warn" mut_mut = "warn" mutex_atomic = "warn" mutex_integer = "warn" needless_bitwise_bool = "warn" needless_collect = "warn" needless_continue = "warn" needless_for_each = "warn" needless_pass_by_ref_mut = "warn" needless_pass_by_value = "warn" needless_raw_strings = "warn" non_std_lazy_statics = "warn" nonstandard_macro_braces = "warn" option_as_ref_cloned = "warn" path_buf_push_overwrite = "warn" pathbuf_init_then_push = "warn" print_stderr = "warn" print_stdout = "warn" pub_underscore_fields = "warn" question_mark = "warn" range_minus_one = "warn" range_plus_one = "warn" redundant_clone = "warn" redundant_else = "warn" ref_binding_to_reference = "warn" ref_option_ref = "warn" same_functions_in_if_condition = "warn" semicolon_if_nothing_returned = "warn" set_contains_or_insert = "warn" stable_sort_primitive = "warn" string_add_assign = "warn" string_slice = "warn" suspicious_operation_groupings = "warn" suspicious_xor_used_as_pow = "warn" todo = "warn" too_many_arguments = "allow" trait_duplication_in_bounds = "warn" trivial_regex = "warn" trivially_copy_pass_by_ref = "warn" type_complexity = "allow" type_repetition_in_bounds = "warn" undocumented_unsafe_blocks = "warn" unimplemented = "warn" uninlined_format_args = "warn" unnecessary_box_returns = "warn" unnecessary_join = "warn" unnecessary_semicolon = "warn" unnecessary_wraps = "warn" unnested_or_patterns = "warn" unreachable = "allow" unused_async = "warn" unused_result_ok = "warn" unused_rounding = "warn" unused_self = "warn" unwrap_used = "warn" use_self = "warn" used_underscore_binding = "warn" useless_let_if_seq = "warn" verbose_file_reads = "warn" wildcard_imports = "warn" czkawka_cli-11.0.1/Cargo.toml.orig000064400000000000000000000020041046102023000150510ustar 00000000000000[package] name = "czkawka_cli" version = "11.0.1" authors = ["Rafał Mikrut "] edition = "2024" rust-version = "1.92.0" description = "CLI frontend of Czkawka" license = "MIT" homepage = "https://github.com/qarmin/czkawka" repository = "https://github.com/qarmin/czkawka" [dependencies] clap = { version = "4.5", features = ["derive", "color"] } log = "0.4.22" czkawka_core = { path = "../czkawka_core", version = "11.0.1", features = [] } indicatif = "0.18" crossbeam-channel = { version = "0.5", features = [] } ctrlc = { version = "3.4", features = ["termination"] } humansize = "2.1" [features] default = [] heif = ["czkawka_core/heif"] libraw = ["czkawka_core/libraw"] libavif = ["czkawka_core/libavif"] # Allows to use trash on Linux when using xdg-portal, needed by e.g. flatpak where normal trash access always fails # No-op on other OSes, it is slower and provides less helpful error messages xdg_portal_trash = ["czkawka_core/xdg_portal_trash"] no_colors = [] [lints] workspace = true czkawka_cli-11.0.1/LICENSE_MIT000064400000000000000000000020621046102023000137040ustar 00000000000000MIT License Copyright (c) 2020-2026 Rafał Mikrut Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.czkawka_cli-11.0.1/README.md000064400000000000000000000043301046102023000134450ustar 00000000000000# Czkawka CLI CLI frontend that allows you to use Czkawka from the terminal. ## Requirements Precompiled binaries should work without any additional dependencies on Linux (Ubuntu 22.04+), Windows (10+), and macOS (10.15+). On Linux, it is even possible (with eyra) to avoid libc entirely and use a fully static Rust binary, but alternatively you can use musl for this task. If you want to use the similar videos tool, you need to install ffmpeg (runtime dependency). If you want to use heif/libraw/libavif (build/runtime dependency), you need to install the required packages. - macOS: `brew install ffmpeg libraw libheif libavif dav1d` – [ffmpeg formula](https://formulae.brew.sh/formula/ffmpeg) - Linux: `sudo apt install ffmpeg libraw-dev libheif-dev libavif-dev libdav1d-dev` - Windows: `choco install ffmpeg` – or, if not working, download from [ffmpeg.org](https://ffmpeg.org/download.html#build-windows) and unpack to the location with `czkawka_cli.exe`. Heif and libraw are not supported on Windows. ## Compilation To compile, you need to have Rust installed via [rustup](https://rustup.rs/). Then, build with: ```shell cargo run --release --bin czkawka_cli ``` You can enable additional features with: ```shell cargo run --release --bin czkawka_cli --features "heif,libraw,libavif" ``` ## How to use The application includes concise help for each tool, which you can display by running: ``` czkawka_cli --help ``` You can also get detailed information about the parameters of a specific tool by running, for example: ``` czkawka_cli dup --help ``` Example usage: ```shell czkawka dup -d /home/rafal -e /home/rafal/Obrazy -m 25 -x 7z rar IMAGE -s hash -f results.txt -D aeo czkawka empty-folders -d /home/rafal/rr /home/gateway -f results.txt czkawka big -d /home/rafal/ /home/piszczal -e /home/rafal/Roman -n 25 -x VIDEO -f results.txt czkawka empty-files -d /home/rafal /home/szczekacz -e /home/rafal/Pulpit -R -f results.txt czkawka temp -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt -D czkawka music -d /home/rafal -e /home/rafal/Pulpit -z "artist,year, ARTISTALBUM, ALBUM___tiTlE" -f results.txt czkawka symlinks -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt ``` ## LICENSE MITczkawka_cli-11.0.1/data/com.github.qarmin.czkawka.desktop000064400000000000000000000027611046102023000214570ustar 00000000000000[Desktop Entry] Categories=System;FileTools Exec=czkawka_gui Icon=com.github.qarmin.czkawka StartupWMClass=czkawka_gui Terminal=false TryExec=czkawka_gui Type=Application Name=Czkawka Name[it]=Singhiozzo Name[pt_BR]=Comparador de Arquivos Duplicados Czkawka Comment=Multi functional app to clean OS which allow to find duplicates, empty folders, similar files etc. Comment[it]=Programma multifunzionale per pulire il sistema, che permette di trovare file duplicati, cartelle vuote, file simili, ecc... Comment[pt_BR]=O ‘Czkawka’, que em idioma português significa ‘soluço’, é um programa que permite comparar e encontrar (buscar ou localizar ou pesquisar) arquivos duplicados, pastas ou diretórios vazios, arquivos equivalentes (semelhantes ou similares), criar arquivos de verificação da integridade (hash) de vários tipos de arquivos diferentes (por exemplo, arquivos de imagens, músicas, vídeos, etc.), mover para a lixeira os arquivos duplicados, excluir permanentemente os arquivos duplicados, etc., possibilita realizar a limpeza do sistema operacional Comment[zh_CN]=可用于清理文件副本、空文件夹、相似文件等的系统清理工具 Comment[zh_TW]=可用於清理重複檔案、空資料夾、相似檔案等的系統清理工具 Keywords=Hiccup;duplicate;same;similar;cleaner;copy;copies;compare;files; Keywords[pt_BR]=czkawka;hiccup;soluço;arquivos;ficheiros;duplicado;igual;iguais;equivalentes;similares;semelhantes;limpar;limpeza;mais limpo;cópia;cópias;comparar;pastas; czkawka_cli-11.0.1/data/com.github.qarmin.czkawka.metainfo.xml000064400000000000000000000031151046102023000224010ustar 00000000000000 com.github.qarmin.czkawka Czkawka Multi functional app to find duplicates, empty folders, similar images, broken files etc. CC0-1.0 MIT

Czkawka is simple, fast and easy to use app to remove unnecessary files from your computer.

com.github.qarmin.czkawka.desktop https://user-images.githubusercontent.com/41945903/147875238-7f82fa27-c6dd-47e7-87ed-e253fb2cbc3e.png https://user-images.githubusercontent.com/41945903/147875239-bcf9776c-885d-45ac-ba82-5a426d8e1647.png https://user-images.githubusercontent.com/41945903/147875243-e654e683-37f7-46fa-8321-119a4c5775e7.png Rafał Mikrut Rafał Mikrut https://github.com/qarmin/czkawka https://github.com/qarmin/czkawka/issues https://github.com/sponsors/qarmin https://crowdin.com/project/czkawka
czkawka_cli-11.0.1/data/icons/com.github.qarmin.czkawka-symbolic.svg000064400000000000000000000120161046102023000235310ustar 00000000000000 czkawka_cli-11.0.1/data/icons/com.github.qarmin.czkawka.Devel.svg000064400000000000000000000421761046102023000227620ustar 00000000000000 czkawka_cli-11.0.1/data/icons/com.github.qarmin.czkawka.svg000064400000000000000000000240101046102023000217070ustar 00000000000000 czkawka_cli-11.0.1/data/icons/io.github.qarmin.krokiet.svg000064400000000000000000000735171046102023000215750ustar 00000000000000 czkawka_cli-11.0.1/data/io.github.qarmin.krokiet.desktop000064400000000000000000000005471046102023000213250ustar 00000000000000[Desktop Entry] Categories=System;FileTools Exec=krokiet Icon=io.github.qarmin.krokiet StartupWMClass=krokiet Terminal=false TryExec=krokiet Type=Application Name=Krokiet Comment=Krokiet - multi-functional app to find duplicates, empty folders, similar files and many more. Keywords=Krokiet;duplicate;same;similar;cleaner;copy;copies;compare;files;krokiet czkawka_cli-11.0.1/data/io.github.qarmin.krokiet.metainfo.xml000064400000000000000000000034541046102023000222550ustar 00000000000000 io.github.qarmin.krokiet Krokiet Multi functional app to find duplicates, similar images and many more CC0-1.0 GPL-3.0-only

Krokiet is a multi functional app that finds:

  • Duplicates
  • Similar images
  • Similar audio files
  • Similar videos
  • Empty folders
  • Empty files
  • Broken files
  • Temporary files
  • Big files
  • Invalid symlinks
  • Bad names
  • Videos that can be optimized/cropped
  • Exif tags
io.github.qarmin.krokiet.desktop https://github.com/user-attachments/assets/720e98c3-598a-41aa-a04b-0c0c1d8a28e6 https://github.com/user-attachments/assets/c95e51bf-1ae0-49ec-af92-0195efc98e5d https://github.com/user-attachments/assets/4fe7bec3-4d67-48bb-91bc-91e7d3b82bdc Rafał Mikrut https://github.com/qarmin/czkawka https://github.com/qarmin/czkawka/issues https://github.com/sponsors/qarmin https://crowdin.com/project/czkawka
czkawka_cli-11.0.1/src/commands.rs000064400000000000000000001355121046102023000151330ustar 00000000000000use std::path::PathBuf; #[cfg(not(feature = "no_colors"))] use clap::builder::Styles; #[cfg(not(feature = "no_colors"))] use clap::builder::styling::AnsiColor; use czkawka_core::CZKAWKA_VERSION; use czkawka_core::common::model::{CheckingMethod, HashType}; use czkawka_core::common::tool_data::DeleteMethod; use czkawka_core::re_exported::{Cropdetect, FilterType, HashAlg}; use czkawka_core::tools::broken_files::CheckedTypes; use czkawka_core::tools::same_music::MusicSimilarity; use czkawka_core::tools::similar_videos::{ALLOWED_SKIP_FORWARD_AMOUNT, ALLOWED_VID_HASH_DURATION, DEFAULT_SKIP_FORWARD_AMOUNT, crop_detect_from_str_opt}; use czkawka_core::tools::video_optimizer::VideoCodec; #[cfg(not(feature = "no_colors"))] pub const CLAP_STYLING: Styles = Styles::styled() .header(AnsiColor::Green.on_default().bold()) .usage(AnsiColor::Green.on_default().bold()) .literal(AnsiColor::Cyan.on_default().bold()) .placeholder(AnsiColor::Cyan.on_default().bold()) .error(AnsiColor::Red.on_default().bold()) .valid(AnsiColor::Green.on_default().bold()) .invalid(AnsiColor::Yellow.on_default().bold()); #[derive(clap::Parser)] #[clap( name = "czkawka", help_template = HELP_TEMPLATE, version = CZKAWKA_VERSION, )] #[cfg_attr(not(feature = "no_colors"), clap(styles = CLAP_STYLING))] pub struct Args { #[command(subcommand)] pub command: Commands, } #[derive(Debug, clap::Subcommand)] pub enum Commands { #[clap( name = "dup", about = "Finds duplicate files", after_help = "EXAMPLE:\n czkawka dup -d /home/rafal -e /home/rafal/Obrazy -m 25 -x 7z rar IMAGE -s hash -f results.txt -D aeo" )] Duplicates(DuplicatesArgs), #[clap( name = "empty-folders", about = "Finds empty folders", after_help = "EXAMPLE:\n czkawka empty-folders -d /home/rafal/rr /home/gateway -f results.txt" )] EmptyFolders(EmptyFoldersArgs), #[clap( name = "big", about = "Finds big files", after_help = "EXAMPLE:\n czkawka big -d /home/rafal/ /home/piszczal -e /home/rafal/Roman -n 25 -J -x VIDEO -f results.txt" )] BiggestFiles(BiggestFilesArgs), #[clap( name = "empty-files", about = "Finds empty files", after_help = "EXAMPLE:\n czkawka empty-files -d /home/rafal /home/szczekacz -e /home/rafal/Pulpit -R -f results.txt" )] EmptyFiles(EmptyFilesArgs), #[clap( name = "temp", about = "Finds temporary files", after_help = "EXAMPLE:\n czkawka temp -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt -D" )] Temporary(TemporaryArgs), #[clap( name = "image", about = "Finds similar images", after_help = "EXAMPLE:\n czkawka image -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt" )] SimilarImages(SimilarImagesArgs), #[clap(name = "music", about = "Finds same music by tags", after_help = "EXAMPLE:\n czkawka music -d /home/rafal -f results.txt")] SameMusic(SameMusicArgs), #[clap( name = "symlinks", about = "Finds invalid symlinks", after_help = "EXAMPLE:\n czkawka symlinks -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt" )] InvalidSymlinks(InvalidSymlinksArgs), #[clap( name = "broken", about = "Finds broken files", after_help = "EXAMPLE:\n czkawka broken -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt" )] BrokenFiles(BrokenFilesArgs), #[clap(name = "video", about = "Finds similar video files", after_help = "EXAMPLE:\n czkawka video -d /home/rafal -f results.txt")] SimilarVideos(SimilarVideosArgs), #[clap( name = "ext", about = "Finds files with invalid extensions", after_help = "EXAMPLE:\n czkawka ext -d /home/czokolada/ -f results.txt" )] BadExtensions(BadExtensionsArgs), #[clap( name = "bad-names", about = "Finds files with bad names", after_help = "EXAMPLE:\n czkawka bad-names -d /home/rafal -f results.txt" )] BadNames(BadNamesArgs), #[clap( name = "video-optimizer", about = "Optimizes video files (transcode or crop)", after_help = "EXAMPLE:\n czkawka video-optimizer -d /home/rafal -f results.txt" )] VideoOptimizer(VideoOptimizerArgs), #[clap( name = "exif-remover", about = "Finds and removes EXIF tags from images", after_help = "EXAMPLE:\n czkawka exif-remover -d /home/rafal -f results.txt" )] ExifRemover(ExifRemoverArgs), } #[derive(Debug, clap::Args)] pub struct DuplicatesArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub reference_directories: ReferenceDirectories, #[clap( short = 'Z', long, value_parser = parse_minimal_file_size, default_value = "257144", help = "Minimum prehash cache file size in bytes", long_help = "Minimum size of prehash cached files in bytes" )] pub minimal_prehash_cache_file_size: u64, #[clap( short = 'u', long, help = "Use prehash cache", long_help = "Use prehash cache to speed up the scanning process by avoiding rehashing files that have already been hashed" )] pub use_prehash_cache: bool, #[clap( short, long, value_parser = parse_minimal_file_size, default_value = "8192", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching" )] pub minimal_file_size: u64, #[clap( short = 'i', long, value_parser = parse_maximal_file_size, default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching" )] pub maximal_file_size: u64, #[clap( short = 'c', long, value_parser = parse_minimal_file_size, default_value = "257144", help = "Minimum cached file size in bytes", long_help = "Minimum size of cached files in bytes, assigning bigger value may speed up the scan but loading the cache will be slower, assigning smaller value may slow down the scan and some files may need to be hashed again but loading the cache will be faster" )] pub minimal_cached_file_size: u64, #[clap( short, long, default_value = "HASH", value_parser = parse_checking_method_duplicate, help = "Search method (NAME, SIZE, HASH)", long_help = "Methods to search files.\nNAME - Fast but rarely usable,\nSIZE - Fast but not accurate, checking by the file's size,\nHASH - The slowest method, checking by the hash of the entire file" )] pub search_method: CheckingMethod, #[clap(flatten)] pub delete_method: DMethod, #[clap( short = 't', long, default_value = "BLAKE3", value_parser = parse_hash_type, help = "Hash type (BLAKE3, CRC32, XXH3)", long_help = "Hash algorithm used to calculate file hashes. BLAKE3 is recommended for most cases (fast and secure), CRC32 is faster but less reliable, XXH3 is very fast but not cryptographically secure." )] pub hash_type: HashType, #[clap(flatten)] pub case_sensitive_name_comparison: CaseSensitiveNameComparison, #[clap(flatten)] pub allow_hard_links: AllowHardLinks, } #[derive(Debug, clap::Args)] pub struct EmptyFoldersArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub delete_method: SDMethod, } #[derive(Debug, clap::Args)] pub struct BiggestFilesArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap( short, long, default_value = "50", help = "Number of files to be shown", long_help = "Number of biggest (or smallest with -J flag) files to display in results" )] pub number_of_files: usize, #[clap(flatten)] pub delete_method: SDMethod, #[clap( short = 'J', long, help = "Finds the smallest files instead the biggest", long_help = "Switch mode to find smallest files instead of biggest ones" )] pub smallest_mode: bool, } #[derive(Debug, clap::Args)] pub struct EmptyFilesArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub delete_method: SDMethod, } #[derive(Debug, clap::Args)] pub struct TemporaryArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub delete_method: SDMethod, } #[derive(Debug, clap::Args)] pub struct SimilarImagesArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub reference_directories: ReferenceDirectories, #[clap( short, long, value_parser = parse_minimal_file_size, default_value = "16384", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching" )] pub minimal_file_size: u64, #[clap( short = 'i', long, value_parser = parse_minimal_file_size, default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching" )] pub maximal_file_size: u64, #[clap( short = 's', long, default_value = "5", value_parser = clap::value_parser!(u32).range(0..=40), help = "Maximum difference between images (0-40)", long_help = "Maximum difference between images to be considered as similar (0-40). Lower values mean more strict matching. For hash_size 8, values up to 10 are recommended, for hash_size 16 up to 20 are recommended." )] pub max_difference: u32, #[clap(flatten)] pub delete_method: DMethod, #[clap(flatten)] pub allow_hard_links: AllowHardLinks, #[clap(flatten)] pub ignore_same_size: IgnoreSameSize, #[clap( short = 'g', long, default_value = "Gradient", value_parser = parse_similar_hash_algorithm, help = "Hash algorithm (Mean, Gradient, Blockhash, VertGradient, DoubleGradient, Median)", long_help = "Perceptual hash algorithm used to compare images. Gradient (default) works well for most cases, Mean is faster but less accurate, Blockhash is good for finding very similar images, VertGradient/DoubleGradient provide different matching characteristics, Median is robust against color changes." )] pub hash_alg: HashAlg, #[clap( short = 'z', long, default_value = "Nearest", value_parser = parse_similar_image_filter, help = "Image resize filter (Lanczos3, Nearest, Triangle, Gaussian, CatmullRom)", long_help = "Filter algorithm used when resizing images for comparison. Lanczos3 provides highest quality but is slower, Nearest is fastest but lowest quality, Triangle/Gaussian/CatmullRom offer different quality-speed tradeoffs." )] pub image_filter: FilterType, #[clap( short = 'c', long, default_value = "16", value_parser = parse_image_hash_size, help = "Hash size (8, 16, 32, 64)", long_help = "Size of the perceptual hash. Larger values provide more detailed comparison but require higher max_difference values. 8 is fastest and least detailed, 64 is slowest but most detailed. Recommended: 8 or 16 for typical use." )] pub hash_size: u8, } #[derive(Debug, clap::Args)] pub struct SameMusicArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub reference_directories: ReferenceDirectories, #[clap(flatten)] pub delete_method: DMethod, #[clap( short, long, help = "Approximate comparison of music tags", long_help = "Use approximate comparison when comparing music tags (allows small differences in tag values)" )] pub approximate_comparison: bool, #[clap( short, long, help = "Compare fingerprints only with similar titles", long_help = "When using audio content comparison, only compare files that have similar titles to reduce false positives and speed up the process" )] pub compare_fingerprints_only_with_similar_titles: bool, #[clap( short = 'z', long, default_value = "track_title,track_artist", value_parser = parse_music_duplicate_type, help = "Search method (track_title,track_artist,year,bitrate,genre,length)", long_help = "Sets which rows must be equal to set these files as duplicates (may be mixed, but must be divided by commas)." )] pub music_similarity: MusicSimilarity, #[clap( short, long, default_value = "TAGS", value_parser = parse_checking_method_same_music, help = "Search method (CONTENT, TAGS)", long_help = "Methods to search files.\nCONTENT - finds similar audio files by content, TAGS - finds similar music by tags." )] pub search_method: CheckingMethod, #[clap( short, long, value_parser = parse_minimal_file_size, default_value = "8192", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching" )] pub minimal_file_size: u64, #[clap( short = 'i', long, value_parser = parse_maximal_file_size, default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching" )] pub maximal_file_size: u64, #[clap( short = 'l', long, value_parser = parse_minimum_segment_duration, default_value = "10.0", help = "Minimum segment duration in seconds", long_help = "Minimum duration of audio segment to compare in seconds. Smaller values will find shorter similar segments but may increase false positives. Values should be between 0.0 and 3600.0" )] pub minimum_segment_duration: f32, #[clap( short = 'Y', long, value_parser = parse_maximum_difference, default_value = "2.0", help = "Maximum difference between audio segments", long_help = "Maximum allowed difference between audio segments (0.0-10.0). Value 0.0 will find only identical segments, while 10.0 will find segments that are barely similar. Lower values mean stricter matching." )] pub maximum_difference: f64, } fn parse_maximum_difference(src: &str) -> Result { match src.parse::() { Ok(maximum_difference) => { if maximum_difference <= 0.0 { Err("Maximum difference must be bigger than 0".to_string()) } else if maximum_difference >= 10.0 { Err("Maximum difference must be smaller than 10.0".to_string()) } else { Ok(maximum_difference) } } Err(e) => Err(e.to_string()), } } fn parse_minimum_segment_duration(src: &str) -> Result { match src.parse::() { Ok(minimum_segment_duration) => { if minimum_segment_duration <= 0.0 { Err("Minimum segment duration must be bigger than 0".to_string()) } else if minimum_segment_duration >= 3600.0 { Err("Minimum segment duration must be smaller than 3600(greater values not have much sense)".to_string()) } else { Ok(minimum_segment_duration) } } Err(e) => Err(e.to_string()), } } #[derive(Debug, clap::Args)] pub struct InvalidSymlinksArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub delete_method: SDMethod, } #[derive(Debug, clap::Args)] pub struct BrokenFilesArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub delete_method: SDMethod, #[clap( short, long, default_value = "PDF", value_parser = parse_broken_files, help = "Checking file types (PDF, AUDIO, IMAGE, ARCHIVE, VIDEO)", long_help = "Methods to search files - default PDF.\nPDF - finds broken PDF files,\nAUDIO - finds broken audio files,\nIMAGE - finds broken image files,\nARCHIVE - finds broken archive files,\nVIDEO - finds broken video files" )] pub checked_types: Vec, } #[derive(Debug, clap::Args)] pub struct SimilarVideosArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub reference_directories: ReferenceDirectories, #[clap(flatten)] pub delete_method: DMethod, #[clap(flatten)] pub allow_hard_links: AllowHardLinks, #[clap(flatten)] pub ignore_same_size: IgnoreSameSize, #[clap( short, long, value_parser = parse_minimal_file_size, default_value = "8192", help = "Minimum size in bytes", long_help = "Minimum size of checked files in bytes, assigning bigger value may speed up searching" )] pub minimal_file_size: u64, #[clap( short = 'i', long, value_parser = parse_maximal_file_size, default_value = "18446744073709551615", help = "Maximum size in bytes", long_help = "Maximum size of checked files in bytes, assigning lower value may speed up searching" )] pub maximal_file_size: u64, #[clap( short = 't', long, value_parser = parse_tolerance, default_value = "10", help = "Video maximum difference (allowed values <0,20>)", long_help = "Maximum difference between video frames, bigger value means that videos can looks more and more different (allowed values <0,20>)" )] pub tolerance: i32, #[clap( short = 'U', long, default_value_t = DEFAULT_SKIP_FORWARD_AMOUNT, value_parser = parse_skip_forward_amount, help = "Skip forward amount in seconds (allowed values: 0-300, default: 15)", long_help = "Amount of seconds to skip forward in video. Allowed values are from 0 to 300. 0 means that no skipping will be done. Default is 15." )] pub skip_forward_amount: u32, #[clap( short = 'B', long, default_value = "letterbox", value_parser = parse_crop_detect, help = "Crop detect method (none, letterbox, motion)", long_help = "Method to detect and crop black bars from video frames before comparison. 'none' disables cropping, 'letterbox' removes static black bars, 'motion' uses motion detection to find content area." )] pub crop_detect: Cropdetect, #[clap( short = 'A', long, default_value = "10", value_parser = parse_scan_duration, help = "Scan duration in seconds", long_help = "Duration of video scanning in seconds. Longer duration provides more accurate results but takes more time. Allowed values are predefined in the application." )] pub scan_duration: u32, } #[derive(Debug, clap::Args)] pub struct BadExtensionsArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap( short = 'F', long, help = "Fix bad extensions", long_help = "Automatically rename files to use proper extensions based on their detected file type" )] pub fix_extensions: bool, } #[derive(Debug, clap::Args)] pub struct BadNamesArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(flatten)] pub delete_method: SDMethod, #[clap( short = 'u', long, help = "Check for uppercase extensions", long_help = "Detects files with uppercase extensions (e.g., .JPG instead of .jpg)" )] pub uppercase_extension: bool, #[clap(short = 'j', long, help = "Check for emoji in filenames", long_help = "Detects files with emoji characters in their names")] pub emoji_used: bool, #[clap( short = 'w', long, help = "Check for spaces at start or end", long_help = "Detects files with spaces at the beginning or end of their names" )] pub space_at_start_or_end: bool, #[clap( short = 'n', long, help = "Check for non-ASCII characters", long_help = "Detects files with non-ASCII graphical characters in their names" )] pub non_ascii_graphical: bool, #[clap( short = 'r', long, help = "Restricted charset (comma-separated)", long_help = "List of allowed special characters. Any other characters will be flagged as problematic. Example: '_- .' for underscore, dash, space, and dot" )] pub restricted_charset: Option, #[clap( short = 'a', long, help = "Check for duplicated non-alphanumeric characters", long_help = "Detects files with duplicated non-alphanumeric characters (e.g., 'file__name' or 'file..txt')" )] pub remove_duplicated_non_alphanumeric: bool, #[clap( short = 'F', long, help = "Fix bad names automatically", long_help = "Automatically rename files to fix detected naming issues" )] pub fix_names: bool, } #[derive(Debug, clap::Args)] pub struct VideoOptimizerArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap(subcommand)] pub mode: VideoOptimizerMode, } #[derive(Debug, clap::Subcommand)] pub enum VideoOptimizerMode { #[clap(name = "transcode", about = "Transcode videos to different codec")] Transcode(TranscodeArgs), #[clap(name = "crop", about = "Crop black bars from videos")] Crop(CropArgs), } #[derive(Debug, clap::Args)] pub struct TranscodeArgs { #[clap( short = 'c', long, help = "Excluded video codecs (comma-separated)", long_help = "Comma-separated list of video codecs to exclude from transcoding (e.g., 'h265,av1,vp9')" )] pub excluded_codecs: Option, #[clap(short = 't', long, help = "Generate thumbnails", long_help = "Generate video thumbnails for preview")] pub generate_thumbnails: bool, #[clap( short = 'V', long, default_value = "10", value_parser = clap::value_parser!(u8).range(1..=99), help = "Thumbnail position percentage (1-99)", long_help = "Percentage from start of video where thumbnail should be taken (1-99%)" )] pub thumbnail_percentage: u8, #[clap(short = 'g', long, help = "Generate thumbnail grid", long_help = "Generate a grid of thumbnails instead of single thumbnail")] pub thumbnail_grid: bool, #[clap( short = 'Z', long, default_value = "3", value_parser = clap::value_parser!(u8).range(2..=6), help = "Thumbnail grid tiles per side (2-6)", long_help = "Number of tiles per side for thumbnail grid (2-6). Only used if -g is enabled." )] pub thumbnail_grid_tiles_per_side: u8, #[clap(short = 'F', long, help = "Fix/optimize videos", long_help = "Actually perform the transcoding on found videos")] pub fix_videos: bool, #[clap( long, default_value = "h265", value_parser = parse_video_codec, help = "Target codec (h264, h265, av1, vp9)", long_help = "Target video codec for transcoding (h264, h265, av1, vp9). Only used with -F flag." )] pub target_codec: VideoCodec, #[clap( long, default_value = "23", value_parser = clap::value_parser!(u32).range(0..=51), help = "Encoding quality (0-51)", long_help = "Video encoding quality (0-51). Lower values mean better quality. 23 is default for h264/h265, 30 for av1/vp9." )] pub quality: u32, #[clap(long, help = "Fail if result not smaller", long_help = "Fail the optimization if resulting file is not smaller than original")] pub fail_if_not_smaller: bool, #[clap(long, help = "Overwrite original files", long_help = "Overwrite original video files with optimized versions")] pub overwrite_original: bool, #[clap(long, help = "Limit video size", long_help = "Limit maximum video dimensions")] pub limit_video_size: bool, #[clap( long, default_value = "1920", value_parser = clap::value_parser!(u32), help = "Maximum video width", long_help = "Maximum video width in pixels when limit_video_size is enabled" )] pub max_width: u32, #[clap( long, default_value = "1080", value_parser = clap::value_parser!(u32), help = "Maximum video height", long_help = "Maximum video height in pixels when limit_video_size is enabled" )] pub max_height: u32, } #[derive(Debug, clap::Args)] pub struct CropArgs { #[clap( short = 'm', long, default_value = "blackbars", value_parser = parse_crop_mechanism, help = "Crop detection mechanism (blackbars, staticcontent)", long_help = "Mechanism for detecting areas to crop: 'blackbars' for removing black bars, 'staticcontent' for detecting static content areas" )] pub crop_mechanism: String, #[clap( short = 'k', long, default_value = "32", value_parser = clap::value_parser!(u8).range(0..=128), help = "Black pixel threshold (0-128)", long_help = "Threshold for considering a pixel as black when detecting black bars (0-128). Lower values are stricter." )] pub black_pixel_threshold: u8, #[clap( short = 'b', long, default_value = "90", value_parser = clap::value_parser!(u8).range(50..=100), help = "Black bar minimum percentage (50-100)", long_help = "Minimum percentage of black pixels in a line to consider it a black bar (50-100%)" )] pub black_bar_percentage: u8, #[clap( short = 's', long, default_value = "20", value_parser = parse_max_samples, help = "Maximum samples (5-1000)", long_help = "Maximum number of video frames to sample when detecting black bars (5-1000)" )] pub max_samples: usize, #[clap( short = 'z', long, default_value = "10", value_parser = parse_min_crop_size, help = "Minimum crop size (1-1000)", long_help = "Minimum size in pixels for crop area to be considered (1-1000)" )] pub min_crop_size: u32, #[clap(short = 't', long, help = "Generate thumbnails", long_help = "Generate video thumbnails for preview")] pub generate_thumbnails: bool, #[clap( short = 'V', long, default_value = "10", value_parser = clap::value_parser!(u8).range(1..=99), help = "Thumbnail position percentage (1-99)", long_help = "Percentage from start of video where thumbnail should be taken (1-99%)" )] pub thumbnail_percentage: u8, #[clap(short = 'g', long, help = "Generate thumbnail grid", long_help = "Generate a grid of thumbnails instead of single thumbnail")] pub thumbnail_grid: bool, #[clap( short = 'Z', long, default_value = "3", value_parser = clap::value_parser!(u8).range(2..=6), help = "Thumbnail grid tiles per side (2-6)", long_help = "Number of tiles per side for thumbnail grid (2-6). Only used if -g is enabled." )] pub thumbnail_grid_tiles_per_side: u8, #[clap(short = 'F', long, help = "Fix/crop videos", long_help = "Actually perform the cropping on found videos")] pub fix_videos: bool, #[clap(long, help = "Overwrite original files", long_help = "Overwrite original video files with cropped versions")] pub overwrite_original: bool, #[clap( long, value_parser = parse_video_codec, help = "Target codec (h264, h265, av1, vp9)", long_help = "Optional: Also transcode to different codec while cropping. Only used with -F flag." )] pub target_codec: Option, #[clap( long, value_parser = clap::value_parser!(u32).range(0..=51), help = "Encoding quality (0-51)", long_help = "Video encoding quality when transcoding (0-51). Only used when target_codec is specified." )] pub quality: Option, } #[derive(Debug, clap::Args)] pub struct ExifRemoverArgs { #[clap(flatten)] pub common_cli_items: CommonCliItems, #[clap( short = 'i', long, help = "Ignored EXIF tags (comma-separated)", long_help = "Comma-separated list of EXIF tag names to ignore (not remove). Example: 'Orientation,DateTime,Software'" )] pub ignored_tags: Option, #[clap(short = 'F', long, help = "Remove EXIF tags", long_help = "Actually remove EXIF tags from files")] pub fix_exif: bool, #[clap( short = 'o', long, help = "Override original files", long_help = "Override original files instead of creating backup files with '_cleaned' suffix" )] pub override_file: bool, } #[derive(Debug, clap::Args)] pub struct CommonCliItems { #[clap( short = 'T', long, default_value = "0", help = "Number of threads to use (0 = all available)", long_help = "Limits the number of threads used for scanning. Value 0 (default) will use all available CPU threads. Lower values can reduce CPU usage." )] pub thread_number: usize, #[clap( short, long, required = true, help = "Directory(ies) to search", long_help = "List of directory(ies) to search (absolute paths). These directories will be scanned but not set as reference folders." )] pub directories: Vec, #[clap( short, long, help = "Excluded directory(ies)", long_help = "List of directory(ies) to exclude from search (absolute paths). Files in these directories will be completely ignored." )] pub excluded_directories: Vec, #[clap( short = 'E', long, help = "Excluded item(s)", long_help = "List of excluded items using wildcards (e.g., */temp*, *.tmp). May be slower than -e, so use -e for directories when possible." )] pub excluded_items: Vec, #[clap( short = 'x', long, help = "Allowed file extension(s)", long_help = "List of file extensions to check. Helpful macros are available: IMAGE (jpg,kra,gif,png,bmp,tiff,hdr,svg), TEXT (txt,doc,docx,odt,rtf), VIDEO (mp4,flv,mkv,webm,vob,ogv,gifv,avi,mov,wmv,mpg,m4v,m4p,mpeg,3gp,m2ts), MUSIC (mp3,flac,ogg,tta,wma,webm)" )] pub allowed_extensions: Vec, #[clap(short = 'P', long, help = "Excluded file extension(s)", long_help = "List of file extensions to exclude from search.")] pub excluded_extensions: Vec, #[clap(flatten)] pub file_to_save: FileToSave, #[clap(flatten)] pub json_compact_file_to_save: JsonCompactFileToSave, #[clap(flatten)] pub json_pretty_file_to_save: JsonPrettyFileToSave, #[clap( short = 'R', long, help = "Prevents recursive check of folders", long_help = "Disables recursive directory traversal. Only files in the top-level directories will be scanned." )] pub not_recursive: bool, #[cfg(target_family = "unix")] #[clap( short = 'X', long, help = "Exclude files on other filesystems", long_help = "Prevents scanning files on different filesystems (useful to avoid scanning mounted drives, network shares, etc.)" )] pub exclude_other_filesystems: bool, #[clap(flatten)] pub do_not_print: DoNotPrint, #[clap( short = 'W', long, help = "Ignore error code when files are found", long_help = "Suppresses error exit code when duplicate/similar files are found. Useful for scripts that should continue regardless of findings." )] pub ignore_error_code_on_found: bool, #[clap( short = 'H', long, help = "Disable cache", long_help = "Disables the cache system. This will make scanning slower but ensures fresh results without cached data." )] pub disable_cache: bool, } #[derive(Debug, clap::Args, Clone, Copy)] pub struct DoNotPrint { #[clap( short = 'N', long, help = "Do not print results to console", long_help = "Suppresses printing of search results to the console. Useful when only saving results to files." )] pub do_not_print_results: bool, #[clap( short = 'M', long, help = "Do not print messages to console", long_help = "Suppresses all informational messages, warnings, and errors from being printed to console." )] pub do_not_print_messages: bool, } #[derive(Debug, clap::Args, Clone, Copy)] pub struct DMethod { #[clap( short = 'D', long, default_value = "NONE", value_parser = parse_delete_method, help = "Delete method (AEN, AEO, ON, OO, AEB, AES, OB, OS, HARD)", long_help = "Method for selecting which files to delete from duplicate groups:\nAEN - All files Except Newest (keeps newest)\nAEO - All files Except Oldest (keeps oldest)\nON - Only 1 file, the Newest (deletes all but newest)\nOO - Only 1 file, the Oldest (deletes all but oldest)\nAEB - All files Except Biggest (keeps biggest)\nAES - All files Except Smallest (keeps smallest)\nOB - Only 1 file, the Biggest (deletes all but biggest)\nOS - Only 1 file, the Smallest (deletes all but smallest)\nHARD - create hard links to save space\nNONE - do not delete files (default)" )] pub delete_method: DeleteMethod, #[clap( short = 'Q', long, help = "Dry run - preview operations", long_help = "Performs a dry run showing what operations would be performed without actually executing them." )] pub dry_run: bool, #[clap( short = 'y', long, help = "Move items to trash", long_help = "Instead of permanently deleting files, move them to the system trash/recycle bin where they can be recovered." )] pub move_to_trash: bool, } // Simple delete method - delete files or not #[derive(Debug, clap::Args, Clone, Copy)] pub struct SDMethod { #[clap(short = 'D', long, help = "Delete found items", long_help = "Automatically delete all found items matching the criteria.")] pub delete_files: bool, #[clap( short = 'Q', long, help = "Dry run - preview operations", long_help = "Performs a dry run showing what operations would be performed without actually executing them." )] pub dry_run: bool, #[clap( short = 'y', long, help = "Move items to trash", long_help = "Instead of permanently deleting files, move them to the system trash/recycle bin where they can be recovered." )] pub move_to_trash: bool, } #[derive(Debug, clap::Args)] pub struct FileToSave { #[clap( short, long, value_name = "file-name", help = "Save results to formatted text file", long_help = "Saves the search results into a human-readable formatted text file." )] pub file_to_save: Option, } #[derive(Debug, clap::Args)] pub struct ReferenceDirectories { #[clap( short, long, help = "Reference directory(ies)", long_help = "List of reference directory(ies) to search (absolute paths). Files in these directories will be scanned but won't appear in the results (useful for comparing against a known good set of files)." )] pub reference_directories: Vec, } #[derive(Debug, clap::Args)] pub struct JsonCompactFileToSave { #[clap( short = 'C', long, value_name = "json-file-name", help = "Save results to compact JSON file", long_help = "Saves the search results into a compact (minified) JSON file without extra whitespace." )] pub compact_file_to_save: Option, } #[derive(Debug, clap::Args)] pub struct JsonPrettyFileToSave { #[clap( short, long, value_name = "pretty-json-file-name", help = "Save results to pretty JSON file", long_help = "Saves the search results into a pretty-printed (indented) JSON file for better readability." )] pub pretty_file_to_save: Option, } #[derive(Debug, clap::Args)] pub struct AllowHardLinks { #[clap( short = 'L', long, help = "Do not ignore hard links", long_help = "Treats hard links as separate files rather than ignoring them. By default, hard links are detected and only counted once." )] pub allow_hard_links: bool, } #[derive(Debug, clap::Args)] pub struct CaseSensitiveNameComparison { #[clap( short = 'l', long, help = "Use case-sensitive name comparison", long_help = "Enables case-sensitive file name comparison. By default, comparisons are case-insensitive (e.g., 'File.txt' equals 'file.txt')." )] pub case_sensitive_name_comparison: bool, } #[derive(Debug, clap::Args)] pub struct IgnoreSameSize { #[clap( short = 'J', long, help = "Ignore files with same size", long_help = "Groups files by size and keeps only one file from each size group, ignoring files with identical sizes (useful for quick deduplication based solely on file size)." )] pub ignore_same_size: bool, } impl FileToSave { pub(crate) fn file_name(&self) -> Option<&str> { if let Some(file_name) = &self.file_to_save { return file_name.to_str(); } None } } impl JsonCompactFileToSave { pub(crate) fn file_name(&self) -> Option<&str> { if let Some(file_name) = &self.compact_file_to_save { return file_name.to_str(); } None } } impl JsonPrettyFileToSave { pub(crate) fn file_name(&self) -> Option<&str> { if let Some(file_name) = &self.pretty_file_to_save { return file_name.to_str(); } None } } fn parse_scan_duration(s: &str) -> Result { match s.parse::() { Ok(scan_duration) => { if ALLOWED_VID_HASH_DURATION.contains(&scan_duration) { Ok(scan_duration) } else { Err(format!("Scan duration must be one of: {ALLOWED_VID_HASH_DURATION:?}")) } } Err(e) => Err(e.to_string()), } } fn parse_crop_detect(src: &str) -> Result { match crop_detect_from_str_opt(src) { Some(crop_detect) => Ok(crop_detect), None => Err(format!("Crop detect \"{src}\" is not valid")), } } fn parse_skip_forward_amount(src: &str) -> Result { match src.parse::() { Ok(skip_forward_amount) => { if !ALLOWED_SKIP_FORWARD_AMOUNT.contains(&skip_forward_amount) { Err(format!("Skip forward amount must be one of: {ALLOWED_SKIP_FORWARD_AMOUNT:?}")) } else { Ok(skip_forward_amount) } } Err(e) => Err(e.to_string()), } } fn parse_hash_type(src: &str) -> Result { match src.to_ascii_lowercase().as_str() { "blake3" => Ok(HashType::Blake3), "crc32" => Ok(HashType::Crc32), "xxh3" => Ok(HashType::Xxh3), _ => Err("Couldn't parse the hash type (allowed: BLAKE3, CRC32, XXH3)"), } } fn parse_tolerance(src: &str) -> Result { match src.parse::() { Ok(t) => { if (0..=20).contains(&t) { Ok(t) } else { Err("Tolerance should be in range <0,20>(Higher and lower similarity )") } } _ => Err("Failed to parse tolerance as i32 value."), } } fn parse_checking_method_duplicate(src: &str) -> Result { match src.to_ascii_lowercase().as_str() { "name" => Ok(CheckingMethod::Name), "size" => Ok(CheckingMethod::Size), "size_name" => Ok(CheckingMethod::SizeName), "hash" => Ok(CheckingMethod::Hash), _ => Err("Couldn't parse the search method (allowed: NAME, SIZE, HASH)"), } } fn parse_broken_files(src: &str) -> Result { match src.to_ascii_lowercase().as_str() { "pdf" => Ok(CheckedTypes::PDF), "audio" => Ok(CheckedTypes::AUDIO), "image" => Ok(CheckedTypes::IMAGE), "archive" => Ok(CheckedTypes::ARCHIVE), "video" => Ok(CheckedTypes::VIDEO), _ => Err("Couldn't parse the broken files type (allowed: PDF, AUDIO, IMAGE, ARCHIVE, VIDEO)"), } } fn parse_checking_method_same_music(src: &str) -> Result { match src.to_ascii_lowercase().as_str() { "tags" => Ok(CheckingMethod::AudioTags), "content" => Ok(CheckingMethod::AudioContent), _ => Err("Couldn't parse the search method (allowed: TAGS, CONTENT)"), } } fn parse_video_codec(src: &str) -> Result { match src.to_ascii_lowercase().as_str() { "h264" => Ok(VideoCodec::H264), "h265" | "hevc" => Ok(VideoCodec::H265), "av1" => Ok(VideoCodec::Av1), "vp9" => Ok(VideoCodec::Vp9), _ => Err("Couldn't parse the video codec (allowed: h264, h265, av1, vp9)"), } } fn parse_max_samples(src: &str) -> Result { match src.parse::() { Ok(val) if (5..=1000).contains(&val) => Ok(val), Ok(_) => Err("Maximum samples must be between 5 and 1000".to_string()), Err(e) => Err(e.to_string()), } } fn parse_min_crop_size(src: &str) -> Result { match src.parse::() { Ok(val) if (1..=1000).contains(&val) => Ok(val), Ok(_) => Err("Minimum crop size must be between 1 and 1000".to_string()), Err(e) => Err(e.to_string()), } } fn parse_delete_method(src: &str) -> Result { match src.to_ascii_lowercase().as_str() { "none" => Ok(DeleteMethod::None), "aen" => Ok(DeleteMethod::AllExceptNewest), "aeo" => Ok(DeleteMethod::AllExceptOldest), "hard" => Ok(DeleteMethod::HardLink), "on" => Ok(DeleteMethod::OneNewest), "oo" => Ok(DeleteMethod::OneOldest), "aeb" => Ok(DeleteMethod::AllExceptBiggest), "aes" => Ok(DeleteMethod::AllExceptSmallest), "ob" => Ok(DeleteMethod::OneBiggest), "os" => Ok(DeleteMethod::OneSmallest), _ => Err("Couldn't parse the delete method (allowed: AEN, AEO, ON, OO, HARD, AEB, AES, OB, OS)"), } } fn parse_minimal_file_size(src: &str) -> Result { match src.parse::() { Ok(minimal_file_size) => { if minimal_file_size > 0 { Ok(minimal_file_size) } else { Err("Minimum file size must be at least 1 byte".to_string()) } } Err(e) => Err(e.to_string()), } } fn parse_maximal_file_size(src: &str) -> Result { match src.parse::() { Ok(maximal_file_size) => Ok(maximal_file_size), Err(e) => Err(e.to_string()), } } fn parse_similar_image_filter(src: &str) -> Result { let filter_type = match src.to_lowercase().as_str() { "lanczos3" => FilterType::Lanczos3, "nearest" => FilterType::Nearest, "triangle" => FilterType::Triangle, "gaussian" => FilterType::Gaussian, "catmullrom" => FilterType::CatmullRom, _ => return Err("Couldn't parse the image resize filter (allowed: Lanczos3, Nearest, Triangle, Gaussian, Catmullrom)".to_string()), }; Ok(filter_type) } fn parse_similar_hash_algorithm(src: &str) -> Result { let algorithm = match src.to_lowercase().as_str() { "mean" => HashAlg::Mean, "gradient" => HashAlg::Gradient, "blockhash" => HashAlg::Blockhash, "vertgradient" => HashAlg::VertGradient, "doublegradient" => HashAlg::DoubleGradient, "median" => HashAlg::Median, _ => return Err("Couldn't parse the hash algorithm (allowed: Mean, Gradient, Blockhash, VertGradient, DoubleGradient, Median)".to_string()), }; Ok(algorithm) } fn parse_image_hash_size(src: &str) -> Result { let hash_size = match src.to_lowercase().as_str() { "8" => 8, "16" => 16, "32" => 32, "64" => 64, _ => return Err("Couldn't parse the image hash size (allowed: 8, 16, 32, 64)".to_string()), }; Ok(hash_size) } fn parse_music_duplicate_type(src: &str) -> Result { if src.trim().is_empty() { return Ok(MusicSimilarity::NONE); } let mut similarity: MusicSimilarity = MusicSimilarity::NONE; let parts: Vec = src.split(',').map(|e| e.to_lowercase().replace('_', "")).collect(); if parts.contains(&"tracktitle".into()) { similarity |= MusicSimilarity::TRACK_TITLE; } if parts.contains(&"trackartist".into()) { similarity |= MusicSimilarity::TRACK_ARTIST; } if parts.contains(&"year".into()) { similarity |= MusicSimilarity::YEAR; } if parts.contains(&"bitrate".into()) { similarity |= MusicSimilarity::BITRATE; } if parts.contains(&"genre".into()) { similarity |= MusicSimilarity::GENRE; } if parts.contains(&"length".into()) { similarity |= MusicSimilarity::LENGTH; } if similarity == MusicSimilarity::NONE { return Err("Couldn't parse the music search method (allowed: track_title,track_artist,year,bitrate,genre,length)".to_string()); } Ok(similarity) } fn parse_crop_mechanism(src: &str) -> Result { match src.to_lowercase().as_str() { "blackbars" | "staticcontent" => Ok(src.to_lowercase()), _ => Err("Invalid crop mechanism. Allowed values: blackbars, staticcontent".to_string()), } } const HELP_TEMPLATE: &str = r#" {bin} {version} USAGE: {usage} [FLAGS] [OPTIONS] OPTIONS: {options} COMMANDS: {subcommands} try "{usage} -h" to get more info about a specific tool EXAMPLES: {bin} dup -d /home/rafal -e /home/rafal/Obrazy -m 25 -x 7z rar IMAGE -s hash -f results.txt -D aeo {bin} empty-folders -d /home/rafal/rr /home/gateway -f results.txt {bin} big -d /home/rafal/ /home/piszczal -e /home/rafal/Roman -n 25 -x VIDEO -f results.txt {bin} empty-files -d /home/rafal /home/szczekacz -e /home/rafal/Pulpit -R -f results.txt {bin} temp -d /home/rafal/ -E */.git */tmp* *Pulpit -f results.txt -D {bin} image -d /home/rafal -e /home/rafal/Pulpit -f results.txt {bin} music -d /home/rafal -e /home/rafal/Pulpit -z \"artist,year,ARTISTALBUM,ALBUM___tiTlE\" -f results.txt {bin} symlinks -d /home/kicikici/ /home/szczek -e /home/kicikici/jestempsem -x jpg -f results.txt {bin} broken -d /home/mikrut/ -e /home/mikrut/trakt -f results.txt {bin} ext -d /home/mikrut/ -e /home/mikrut/trakt -f results.txt {bin} bad-names -d /home/rafal -u -j -w -n -f results.txt {bin} video-optimizer -d /home/rafal transcode -c h264 -f results.txt {bin} video-optimizer -d /home/rafal crop -m blackbars -f results.txt {bin} exif-remover -d /home/rafal -x IMAGE -f results.txt"#; czkawka_cli-11.0.1/src/main.rs000064400000000000000000000602371046102023000142570ustar 00000000000000use std::path::PathBuf; use std::sync::Arc; use std::sync::atomic::AtomicBool; use std::thread; use clap::Parser; use commands::Commands; use crossbeam_channel::{Receiver, Sender, unbounded}; use czkawka_core::common::config_cache_path::{print_infos_and_warnings, set_config_cache_path}; use czkawka_core::common::consts::DEFAULT_THREAD_SIZE; use czkawka_core::common::image::register_image_decoding_hooks; use czkawka_core::common::logger::{filtering_messages, print_version_mode, setup_logger}; use czkawka_core::common::progress_data::ProgressData; use czkawka_core::common::set_number_of_threads; use czkawka_core::common::tool_data::{CommonData, DeleteMethod}; use czkawka_core::common::traits::{AllTraits, FixingItems, PrintResults, Search}; use czkawka_core::tools::bad_extensions::{BadExtensions, BadExtensionsFixParams, BadExtensionsParameters}; use czkawka_core::tools::bad_names::{BadNames, BadNamesParameters, NameFixerParams, NameIssues}; use czkawka_core::tools::big_file::{BigFile, BigFileParameters, SearchMode}; use czkawka_core::tools::broken_files::{BrokenFiles, BrokenFilesParameters, CheckedTypes}; use czkawka_core::tools::duplicate::{DuplicateFinder, DuplicateFinderParameters}; use czkawka_core::tools::empty_files::EmptyFiles; use czkawka_core::tools::empty_folder::EmptyFolder; use czkawka_core::tools::exif_remover::{ExifRemover, ExifRemoverParameters, ExifTagsFixerParams}; use czkawka_core::tools::invalid_symlinks::InvalidSymlinks; use czkawka_core::tools::same_music::{SameMusic, SameMusicParameters}; use czkawka_core::tools::similar_images::{SimilarImages, SimilarImagesParameters}; use czkawka_core::tools::similar_videos::{SimilarVideos, SimilarVideosParameters}; use czkawka_core::tools::temporary::Temporary; use czkawka_core::tools::video_optimizer::{ VideoCropFixParams, VideoCropParams, VideoCroppingMechanism, VideoOptimizer, VideoOptimizerFixParams, VideoOptimizerParameters, VideoTranscodeFixParams, VideoTranscodeParams, }; use log::{debug, error, info}; use crate::commands::{ Args, BadExtensionsArgs, BadNamesArgs, BiggestFilesArgs, BrokenFilesArgs, CommonCliItems, DMethod, DuplicatesArgs, EmptyFilesArgs, EmptyFoldersArgs, ExifRemoverArgs, InvalidSymlinksArgs, SDMethod, SameMusicArgs, SimilarImagesArgs, SimilarVideosArgs, TemporaryArgs, VideoOptimizerArgs, }; use crate::progress::connect_progress; mod commands; mod progress; #[derive(Debug)] pub struct CliOutput { pub found_any_files: bool, pub ignored_error_code_on_found: bool, pub output: String, } fn main() { register_image_decoding_hooks(); if cfg!(debug_assertions) { use clap::CommandFactory; Args::command().debug_assert(); } let command = Args::parse().command; let config_cache_path_set_result = set_config_cache_path("Czkawka", "Czkawka"); setup_logger(true, "czkawka_cli", filtering_messages); print_version_mode("Czkawka cli"); print_infos_and_warnings(config_cache_path_set_result.infos, config_cache_path_set_result.warnings); if cfg!(debug_assertions) { debug!("Running command - {command:?}"); } let (progress_sender, progress_receiver): (Sender, Receiver) = unbounded(); let stop_flag = Arc::new(AtomicBool::new(false)); let store_flag_cloned = stop_flag.clone(); let calculate_thread = thread::Builder::new() .stack_size(DEFAULT_THREAD_SIZE) .spawn(move || match command { Commands::Duplicates(duplicates_args) => duplicates(duplicates_args, &stop_flag, &progress_sender), Commands::EmptyFolders(empty_folders_args) => empty_folders(empty_folders_args, &stop_flag, &progress_sender), Commands::BiggestFiles(biggest_files_args) => biggest_files(biggest_files_args, &stop_flag, &progress_sender), Commands::EmptyFiles(empty_files_args) => empty_files(empty_files_args, &stop_flag, &progress_sender), Commands::Temporary(temporary_args) => temporary(temporary_args, &stop_flag, &progress_sender), Commands::SimilarImages(similar_images_args) => similar_images(similar_images_args, &stop_flag, &progress_sender), Commands::SameMusic(same_music_args) => same_music(same_music_args, &stop_flag, &progress_sender), Commands::InvalidSymlinks(invalid_symlinks_args) => invalid_symlinks(invalid_symlinks_args, &stop_flag, &progress_sender), Commands::BrokenFiles(broken_files_args) => broken_files(broken_files_args, &stop_flag, &progress_sender), Commands::SimilarVideos(similar_videos_args) => similar_videos(similar_videos_args, &stop_flag, &progress_sender), Commands::BadExtensions(bad_extensions_args) => bad_extensions(bad_extensions_args, &stop_flag, &progress_sender), Commands::BadNames(bad_names_args) => bad_names(bad_names_args, &stop_flag, &progress_sender), Commands::VideoOptimizer(video_optimizer_args) => video_optimizer(video_optimizer_args, &stop_flag, &progress_sender), Commands::ExifRemover(exif_remover_args) => exif_remover(exif_remover_args, &stop_flag, &progress_sender), }) .expect("Failed to spawn calculation thread"); ctrlc::set_handler(move || { if store_flag_cloned.load(std::sync::atomic::Ordering::SeqCst) { return; } info!("Got Ctrl+C signal, stopping..."); store_flag_cloned.store(true, std::sync::atomic::Ordering::SeqCst); }) .expect("Error setting Ctrl-C handler"); connect_progress(&progress_receiver); let cli_output = calculate_thread.join().expect("Failed to join calculation thread"); #[expect(clippy::print_stdout)] if !cli_output.output.is_empty() { println!("{}", cli_output.output); } if cli_output.found_any_files && !cli_output.ignored_error_code_on_found { std::process::exit(11); } else { std::process::exit(0); } } fn duplicates(duplicates: DuplicatesArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let DuplicatesArgs { common_cli_items, reference_directories, minimal_file_size, maximal_file_size, minimal_cached_file_size, search_method, delete_method, hash_type, allow_hard_links, case_sensitive_name_comparison, minimal_prehash_cache_file_size, use_prehash_cache, } = duplicates; let params = DuplicateFinderParameters::new( search_method, hash_type, use_prehash_cache, minimal_cached_file_size, minimal_prehash_cache_file_size, case_sensitive_name_comparison.case_sensitive_name_comparison, ); let mut tool = DuplicateFinder::new(params); set_common_settings(&mut tool, &common_cli_items, Some(reference_directories.reference_directories.as_ref())); tool.set_minimal_file_size(minimal_file_size); tool.set_maximal_file_size(maximal_file_size); tool.set_hide_hard_links(!allow_hard_links.allow_hard_links); set_advanced_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn empty_folders(empty_folders: EmptyFoldersArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let EmptyFoldersArgs { common_cli_items, delete_method } = empty_folders; let mut tool = EmptyFolder::new(); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn biggest_files(biggest_files: BiggestFilesArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let BiggestFilesArgs { common_cli_items, number_of_files, delete_method, smallest_mode, } = biggest_files; let big_files_mode = if smallest_mode { SearchMode::SmallestFiles } else { SearchMode::BiggestFiles }; let params = BigFileParameters::new(number_of_files, big_files_mode); let mut tool = BigFile::new(params); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn empty_files(empty_files: EmptyFilesArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let EmptyFilesArgs { common_cli_items, delete_method } = empty_files; let mut tool = EmptyFiles::new(); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn temporary(temporary: TemporaryArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let TemporaryArgs { common_cli_items, delete_method } = temporary; let mut tool = Temporary::new(); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn similar_images(similar_images: SimilarImagesArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let SimilarImagesArgs { common_cli_items, reference_directories, minimal_file_size, maximal_file_size, max_difference, hash_alg, image_filter, hash_size, delete_method, allow_hard_links, ignore_same_size, } = similar_images; let params = SimilarImagesParameters::new(max_difference, hash_size, hash_alg, image_filter, ignore_same_size.ignore_same_size); let mut tool = SimilarImages::new(params); set_common_settings(&mut tool, &common_cli_items, Some(reference_directories.reference_directories.as_ref())); tool.set_minimal_file_size(minimal_file_size); tool.set_maximal_file_size(maximal_file_size); tool.set_hide_hard_links(!allow_hard_links.allow_hard_links); set_advanced_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn same_music(same_music: SameMusicArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let SameMusicArgs { common_cli_items, reference_directories, delete_method, minimal_file_size, maximal_file_size, music_similarity, minimum_segment_duration, maximum_difference, search_method, approximate_comparison, compare_fingerprints_only_with_similar_titles, } = same_music; let params = SameMusicParameters::new( music_similarity, approximate_comparison, search_method, minimum_segment_duration, maximum_difference, compare_fingerprints_only_with_similar_titles, ); let mut tool = SameMusic::new(params); set_common_settings(&mut tool, &common_cli_items, Some(reference_directories.reference_directories.as_ref())); tool.set_minimal_file_size(minimal_file_size); tool.set_maximal_file_size(maximal_file_size); set_advanced_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn invalid_symlinks(invalid_symlinks: InvalidSymlinksArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let InvalidSymlinksArgs { common_cli_items, delete_method } = invalid_symlinks; let mut tool = InvalidSymlinks::new(); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn broken_files(broken_files: BrokenFilesArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let BrokenFilesArgs { common_cli_items, delete_method, checked_types, } = broken_files; let mut checked_type = CheckedTypes::NONE; for check_type in checked_types { checked_type |= check_type; } let params = BrokenFilesParameters::new(checked_type); let mut tool = BrokenFiles::new(params); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn similar_videos(similar_videos: SimilarVideosArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let SimilarVideosArgs { reference_directories, common_cli_items, tolerance, minimal_file_size, maximal_file_size, delete_method, allow_hard_links, ignore_same_size, skip_forward_amount, crop_detect, scan_duration, } = similar_videos; let params = SimilarVideosParameters::new( tolerance, ignore_same_size.ignore_same_size, skip_forward_amount, scan_duration, crop_detect, false, // creating thumbnails in CLI, makes almost no sense 10, // creating thumbnails in CLI, makes almost no sense false, // creating thumbnails in CLI, makes almost no sense 2, // creating thumbnails in CLI, makes almost no sense ); let mut tool = SimilarVideos::new(params); set_common_settings(&mut tool, &common_cli_items, Some(reference_directories.reference_directories.as_ref())); tool.set_minimal_file_size(minimal_file_size); tool.set_maximal_file_size(maximal_file_size); tool.set_hide_hard_links(!allow_hard_links.allow_hard_links); set_advanced_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); save_and_write_results_to_writer(&tool, &common_cli_items) } fn bad_extensions(bad_extensions: BadExtensionsArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let BadExtensionsArgs { common_cli_items, fix_extensions } = bad_extensions; let params = BadExtensionsParameters::new(); let mut tool = BadExtensions::new(params); set_common_settings(&mut tool, &common_cli_items, None); tool.search(stop_flag, Some(progress_sender)); if fix_extensions { let fix_params = BadExtensionsFixParams {}; tool.fix_items(stop_flag, Some(progress_sender), fix_params); } save_and_write_results_to_writer(&tool, &common_cli_items) } fn bad_names(bad_names: BadNamesArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let BadNamesArgs { common_cli_items, delete_method, uppercase_extension, emoji_used, space_at_start_or_end, non_ascii_graphical, restricted_charset, remove_duplicated_non_alphanumeric, fix_names, } = bad_names; let restricted_charset_allowed = restricted_charset.and_then(|s| { let mut items: Vec<_> = s.chars().collect(); items.sort_unstable(); items.dedup(); if items.is_empty() { None } else { Some(items) } }); let name_issues = NameIssues { uppercase_extension, emoji_used, space_at_start_or_end, non_ascii_graphical, restricted_charset_allowed, remove_duplicated_non_alphanumeric, }; let params = BadNamesParameters::new(name_issues); let mut tool = BadNames::new(params); set_common_settings(&mut tool, &common_cli_items, None); set_simple_delete(&mut tool, delete_method); tool.search(stop_flag, Some(progress_sender)); if fix_names { let fix_params = NameFixerParams::default(); tool.fix_items(stop_flag, Some(progress_sender), fix_params); } save_and_write_results_to_writer(&tool, &common_cli_items) } fn video_optimizer(video_optimizer: VideoOptimizerArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { use crate::commands::{CropArgs, TranscodeArgs, VideoOptimizerMode as CliVideoOptimizerMode}; let VideoOptimizerArgs { common_cli_items, mode } = video_optimizer; match mode { CliVideoOptimizerMode::Transcode(transcode_args) => { let TranscodeArgs { excluded_codecs, generate_thumbnails, thumbnail_percentage, thumbnail_grid, fix_videos, target_codec, quality, fail_if_not_smaller, overwrite_original, limit_video_size, max_width, max_height, thumbnail_grid_tiles_per_side, } = transcode_args; let excluded_codecs_vec = excluded_codecs.map_or_else( || vec!["hevc".to_string(), "h265".to_string(), "av1".to_string(), "vp9".to_string()], |s| s.split(',').map(|c| c.trim().to_string()).collect(), ); let params = VideoOptimizerParameters::VideoTranscode(VideoTranscodeParams::new( excluded_codecs_vec, generate_thumbnails, thumbnail_percentage, thumbnail_grid, thumbnail_grid_tiles_per_side, )); let mut tool = VideoOptimizer::new(params); set_common_settings(&mut tool, &common_cli_items, None); tool.search(stop_flag, Some(progress_sender)); if fix_videos { let fix_params = VideoOptimizerFixParams::VideoTranscode(VideoTranscodeFixParams { codec: target_codec, quality, fail_if_not_smaller, overwrite_original, limit_video_size, max_width, max_height, }); tool.fix_items(stop_flag, Some(progress_sender), fix_params); } save_and_write_results_to_writer(&tool, &common_cli_items) } CliVideoOptimizerMode::Crop(crop_args) => { let CropArgs { crop_mechanism, black_pixel_threshold, black_bar_percentage, max_samples, min_crop_size, generate_thumbnails, thumbnail_percentage, thumbnail_grid, thumbnail_grid_tiles_per_side, fix_videos, overwrite_original, target_codec, quality, } = crop_args; #[expect(clippy::match_same_arms)] let crop_mech = match crop_mechanism.as_str() { "blackbars" => VideoCroppingMechanism::BlackBars, "staticcontent" => VideoCroppingMechanism::StaticContent, _ => VideoCroppingMechanism::BlackBars, }; let params = VideoOptimizerParameters::VideoCrop(VideoCropParams::with_custom_params( crop_mech, black_pixel_threshold, black_bar_percentage, max_samples, min_crop_size, generate_thumbnails, thumbnail_percentage, thumbnail_grid, thumbnail_grid_tiles_per_side, )); let mut tool = VideoOptimizer::new(params); set_common_settings(&mut tool, &common_cli_items, None); tool.search(stop_flag, Some(progress_sender)); if fix_videos { let fix_params = VideoOptimizerFixParams::VideoCrop(VideoCropFixParams { overwrite_original, target_codec, quality, crop_mechanism: crop_mech, }); tool.fix_items(stop_flag, Some(progress_sender), fix_params); } save_and_write_results_to_writer(&tool, &common_cli_items) } } } fn exif_remover(exif_remover: ExifRemoverArgs, stop_flag: &Arc, progress_sender: &Sender) -> CliOutput { let ExifRemoverArgs { common_cli_items, ignored_tags, fix_exif, override_file, } = exif_remover; let ignored_tags_vec = ignored_tags.map(|s| s.split(',').map(|tag| tag.trim().to_string()).collect()).unwrap_or_default(); let params = ExifRemoverParameters::new(ignored_tags_vec); let mut tool = ExifRemover::new(params); set_common_settings(&mut tool, &common_cli_items, None); tool.search(stop_flag, Some(progress_sender)); if fix_exif { let fix_params = ExifTagsFixerParams { override_file }; tool.fix_items(stop_flag, Some(progress_sender), fix_params); } save_and_write_results_to_writer(&tool, &common_cli_items) } fn save_and_write_results_to_writer(component: &T, common_cli_items: &CommonCliItems) -> CliOutput { if let Some(file_name) = common_cli_items.file_to_save.file_name() && let Err(e) = component.print_results_to_file(file_name) { error!("Failed to save results to file {e}"); } if let Some(file_name) = common_cli_items.json_compact_file_to_save.file_name() && let Err(e) = component.save_results_to_file_as_json(file_name, false) { error!("Failed to save compact json results to file {e}"); } if let Some(file_name) = common_cli_items.json_pretty_file_to_save.file_name() && let Err(e) = component.save_results_to_file_as_json(file_name, true) { error!("Failed to save pretty json results to file {e}"); } let mut buf_writer = std::io::BufWriter::new(Vec::new()); if !common_cli_items.do_not_print.do_not_print_results { let _ = component.print_results_to_writer(&mut buf_writer).map_err(|e| { error!("Failed to print results to output: {e}"); }); } if !common_cli_items.do_not_print.do_not_print_messages { let _ = component.get_text_messages().print_messages_to_writer(&mut buf_writer).map_err(|e| { error!("Failed to print results to output: {e}"); }); } let mut cli_output = CliOutput { found_any_files: component.found_any_items(), ignored_error_code_on_found: common_cli_items.ignore_error_code_on_found, output: String::new(), }; if let Ok(file_vec) = buf_writer.into_inner() && let Ok(output) = String::from_utf8(file_vec) { cli_output.output = output; } cli_output } fn set_simple_delete(component: &mut T, s_delete: SDMethod) where T: AllTraits, { if s_delete.delete_files { component.set_delete_method(DeleteMethod::Delete); } component.set_dry_run(s_delete.dry_run); component.set_move_to_trash(s_delete.move_to_trash); } fn set_advanced_delete(component: &mut T, a_delete: DMethod) where T: AllTraits, { component.set_delete_method(a_delete.delete_method); component.set_dry_run(a_delete.dry_run); component.set_move_to_trash(a_delete.move_to_trash); } fn set_common_settings(component: &mut T, common_cli_items: &CommonCliItems, reference_directories: Option<&Vec>) where T: AllTraits, { set_number_of_threads(common_cli_items.thread_number); let mut included_directories = common_cli_items.directories.clone(); if let Some(reference_directories) = reference_directories { included_directories.extend_from_slice(reference_directories); component.set_reference_paths(reference_directories.clone()); } component.set_included_paths(included_directories); component.set_excluded_paths(common_cli_items.excluded_directories.clone()); component.set_excluded_items(common_cli_items.excluded_items.clone()); component.set_recursive_search(!common_cli_items.not_recursive); #[cfg(target_family = "unix")] component.set_exclude_other_filesystems(common_cli_items.exclude_other_filesystems); component.set_allowed_extensions(common_cli_items.allowed_extensions.clone()); component.set_excluded_extensions(common_cli_items.excluded_extensions.clone()); component.set_use_cache(!common_cli_items.disable_cache); } czkawka_cli-11.0.1/src/progress.rs000064400000000000000000000146541046102023000152010ustar 00000000000000use std::time::Duration; use crossbeam_channel::Receiver; use czkawka_core::common::model::ToolType; use czkawka_core::common::progress_data::{CurrentStage, ProgressData}; use humansize::{BINARY, format_size}; use indicatif::{ProgressBar, ProgressStyle}; pub(crate) fn connect_progress(progress_receiver: &Receiver) { let mut pb = ProgressBar::new(1); let mut latest_id = None; while let Ok(progress_data) = progress_receiver.recv() { // We only need to recreate progress bar if stage changed if latest_id != Some(progress_data.current_stage_idx) { pb.finish_and_clear(); if progress_data.current_stage_idx == 0 { pb = get_progress_bar_for_collect_files(); } else if progress_data.sstage.check_if_loading_saving_cache() { pb = get_progress_loading_saving_cache(progress_data.sstage.check_if_loading_cache()); } else if progress_data.bytes_to_check != 0 { pb = get_progress_known_values(progress_data.bytes_to_check); } else { pb = get_progress_known_values(progress_data.entries_to_check as u64); } latest_id = Some(progress_data.current_stage_idx); } if progress_data.sstage == CurrentStage::CollectingFiles && progress_data.tool_type != ToolType::EmptyFolders { pb.set_message(format!("Collecting files: {}", progress_data.entries_checked)); } else if progress_data.sstage == CurrentStage::CollectingFiles { pb.set_message(format!("Collecting folders: {}", progress_data.entries_checked)); } else if !progress_data.sstage.check_if_loading_saving_cache() { if progress_data.bytes_to_check != 0 { pb.set_position(progress_data.bytes_checked); pb.set_message(format!( "{}: {}/{} ({}/{})", get_progress_message(&progress_data), progress_data.entries_checked, progress_data.entries_to_check, format_size(progress_data.bytes_checked, BINARY), format_size(progress_data.bytes_to_check, BINARY) )); } else { pb.set_position(progress_data.entries_checked as u64); pb.set_message(format!( "{}: {}/{}", get_progress_message(&progress_data), progress_data.entries_checked, progress_data.entries_to_check )); } } } pb.finish_and_clear(); } pub(crate) fn get_progress_message(progress_data: &ProgressData) -> String { match progress_data.sstage { CurrentStage::SameMusicReadingTags => "Reading tags", CurrentStage::SameMusicCalculatingFingerprints => "Calculating fingerprints", CurrentStage::SameMusicComparingTags => "Comparing tags", CurrentStage::SameMusicComparingFingerprints => "Comparing fingerprints", CurrentStage::DuplicatePreHashing => "Calculating prehashes", CurrentStage::DuplicateFullHashing => "Calculating hashes", CurrentStage::SimilarImagesCalculatingHashes => "Calculating image hashes", CurrentStage::SimilarImagesComparingHashes => "Comparing image hashes", CurrentStage::SimilarVideosCalculatingHashes => "Reading similar values", CurrentStage::SimilarVideosCreatingThumbnails | CurrentStage::VideoOptimizerCreatingThumbnails => "Creating video thumbnails", CurrentStage::BrokenFilesChecking => "Checking broken files", CurrentStage::BadExtensionsChecking => "Checking extensions of files", CurrentStage::DeletingFiles => "Deleting files/folders", CurrentStage::RenamingFiles => "Renaming files", CurrentStage::MovingFiles => "Moving files", CurrentStage::HardlinkingFiles => "Creating hardlinks", CurrentStage::SymlinkingFiles => "Creating symlinks", CurrentStage::OptimizingVideos => "Optimizing videos", CurrentStage::CleaningExif => "Cleaning EXIF data", CurrentStage::ExifRemoverExtractingTags => "Extracting EXIF tags", CurrentStage::VideoOptimizerProcessingVideos => "Processing videos", CurrentStage::BadNamesChecking => "Checking names of files", CurrentStage::CollectingFiles | CurrentStage::DuplicateCacheSaving | CurrentStage::DuplicateCacheLoading | CurrentStage::DuplicatePreHashCacheSaving | CurrentStage::DuplicatePreHashCacheLoading | CurrentStage::DuplicateScanningName | CurrentStage::DuplicateScanningSizeName | CurrentStage::DuplicateScanningSize | CurrentStage::SameMusicCacheSavingTags | CurrentStage::SameMusicCacheLoadingTags | CurrentStage::SameMusicCacheSavingFingerprints | CurrentStage::SameMusicCacheLoadingFingerprints | CurrentStage::ExifRemoverCacheLoading | CurrentStage::ExifRemoverCacheSaving => unreachable!("This stages(caches, initial files scanning) should be handled somewhere else"), } .to_string() } pub(crate) fn get_progress_bar_for_collect_files() -> ProgressBar { let pb = ProgressBar::new_spinner(); pb.enable_steady_tick(Duration::from_millis(120)); #[expect(clippy::literal_string_with_formatting_args)] pb.set_style( ProgressStyle::with_template("{msg} {spinner:.blue}") .expect("Failed to create progress bar style") .tick_strings(&["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸", "▪▪▪▪▪"]), ); pb } pub(crate) fn get_progress_known_values(max_value: u64) -> ProgressBar { let pb = ProgressBar::new(max_value); pb.set_style( ProgressStyle::with_template("{msg} [{bar}]") .expect("Failed to create progress bar style") .progress_chars("=> "), ); pb } pub(crate) fn get_progress_loading_saving_cache(loading: bool) -> ProgressBar { let msg = if loading { "Loading cache" } else { "Saving cache" }; let pb = ProgressBar::new_spinner(); pb.enable_steady_tick(Duration::from_millis(120)); pb.set_style( ProgressStyle::with_template(&format!("{msg} {{spinner:.blue}}")) .expect("Failed to create progress bar style") .tick_strings(&["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸", "▪▪▪▪▪"]), ); pb }