diff options
-rw-r--r-- | Cargo.lock | 678 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | base/Cargo.toml | 11 | ||||
-rw-r--r-- | base/src/lib.rs | 42 | ||||
-rw-r--r-- | common/Cargo.toml | 2 | ||||
-rw-r--r-- | import/Cargo.toml | 2 | ||||
-rw-r--r-- | remuxer/Cargo.toml | 2 | ||||
-rw-r--r-- | server/Cargo.toml | 6 | ||||
-rw-r--r-- | server/src/database.rs | 3 | ||||
-rw-r--r-- | server/src/federation.rs | 2 | ||||
-rw-r--r-- | server/src/import.rs | 27 | ||||
-rw-r--r-- | server/src/main.rs | 16 | ||||
-rw-r--r-- | server/src/routes/mod.rs | 3 | ||||
-rw-r--r-- | server/src/routes/stream.rs | 3 | ||||
-rw-r--r-- | server/src/routes/ui/account/mod.rs | 3 | ||||
-rw-r--r-- | server/src/routes/ui/account/session/token.rs | 2 | ||||
-rw-r--r-- | server/src/routes/ui/assets.rs | 7 | ||||
-rw-r--r-- | server/src/routes/ui/home.rs | 2 | ||||
-rw-r--r-- | server/src/routes/ui/layout.rs | 3 | ||||
-rw-r--r-- | server/src/routes/ui/mod.rs | 1 | ||||
-rw-r--r-- | server/src/routes/ui/node.rs | 6 | ||||
-rw-r--r-- | server/src/routes/ui/player.rs | 2 | ||||
-rw-r--r-- | transcoder/Cargo.toml | 8 | ||||
-rw-r--r-- | transcoder/src/lib.rs | 5 |
24 files changed, 770 insertions, 68 deletions
@@ -147,6 +147,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] +name = "arbitrary" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569" + +[[package]] +name = "arg_enum_proc_macro" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c29b43ee8654590587cd033b3eca2f9c4f8cdff945ec0e6ee91ceb057d87f3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] name = "argon2" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -163,6 +180,9 @@ name = "arrayvec" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +dependencies = [ + "serde", +] [[package]] name = "async-channel" @@ -328,6 +348,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] +name = "av-metrics" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "996ce95bbdb0203e5b91d4a0c9b81c0d67d11c80f884482a0c1ea19e732e3530" +dependencies = [ + "crossbeam", + "itertools", + "lab", + "num-traits", + "rayon", + "thiserror", + "v_frame", +] + +[[package]] +name = "av1-grain" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f6ca6f0c18c02c2fbfc119df551b8aeb8a385f6d5980f1475ba0255f1e97f1e" +dependencies = [ + "anyhow", + "arrayvec", + "itertools", + "log", + "nom", + "num-rational", + "serde", + "v_frame", +] + +[[package]] +name = "avif-serialize" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2" +dependencies = [ + "arrayvec", +] + +[[package]] name = "backtrace" version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -401,6 +461,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84" [[package]] +name = "bitstream-io" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82704769cb85a22df2c54d6bdd6a158b7931d256cf3248a07d6ecbe9d58b31d7" + +[[package]] name = "blake2" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -434,12 +500,28 @@ dependencies = [ ] [[package]] +name = "built" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9c056b9ed43aee5e064b683aa1ec783e19c6acec7559e3ae931b7490472fbe" +dependencies = [ + "cargo-lock", + "git2", +] + +[[package]] name = "bumpalo" version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" [[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] name = "byteorder" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -452,10 +534,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] +name = "cargo-lock" +version = "8.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031718ddb8f78aa5def78a09e90defe30151d1f6c672f937af4dd916429ed996" +dependencies = [ + "semver", + "serde", + "toml 0.5.11", + "url", +] + +[[package]] name = "cc" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-expr" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9" +dependencies = [ + "smallvec", + "target-lexicon", +] [[package]] name = "cfg-if" @@ -510,6 +617,16 @@ dependencies = [ "anstyle", "clap_lex", "strsim", + "terminal_size", +] + +[[package]] +name = "clap_complete" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce" +dependencies = [ + "clap", ] [[package]] @@ -546,6 +663,25 @@ dependencies = [ ] [[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.45.0", +] + +[[package]] +name = "const_fn_assert" +version = "0.1.3+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c773f3d54b8826857668aafa3bfe14bd179911a5b571b241e192cac1ec1c0b5" + +[[package]] name = "cookie" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -597,6 +733,41 @@ dependencies = [ ] [[package]] +name = "crossbeam" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +dependencies = [ + "cfg-if", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] name = "crossbeam-epoch" version = "0.9.14" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -610,6 +781,16 @@ dependencies = [ ] [[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] name = "crossbeam-utils" version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -697,6 +878,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] name = "encoding_rs" version = "0.8.32" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -755,6 +942,15 @@ dependencies = [ ] [[package]] +name = "fern" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" +dependencies = [ + "log", +] + +[[package]] name = "figment" version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -763,7 +959,7 @@ dependencies = [ "atomic", "pear", "serde", - "toml", + "toml 0.7.4", "uncased", "version_check", ] @@ -972,6 +1168,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" [[package]] +name = "git2" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1" +dependencies = [ + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] name = "glob" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1155,6 +1364,12 @@ dependencies = [ ] [[package]] +name = "imgref" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c" + +[[package]] name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1190,6 +1405,17 @@ dependencies = [ ] [[package]] +name = "interpolate_name" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b35f4a811037cfdcd44c5db40678464b2d5d248fc1abeeaaa125b370d47f17" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] name = "io-lifetimes" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1219,12 +1445,41 @@ dependencies = [ ] [[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] name = "itoa" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] +name = "ivf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fb01c64361a3a67b511439f0dcd54fa3aa5581c861a17e2ede76e46b9c5b7e2" +dependencies = [ + "bitstream-io", +] + +[[package]] +name = "jellybase" +version = "0.1.0" +dependencies = [ + "base64", + "jellycommon", + "log", + "serde_json", + "sha2", +] + +[[package]] name = "jellyclient" version = "0.1.0" dependencies = [ @@ -1280,17 +1535,17 @@ dependencies = [ "chrono", "env_logger", "futures", + "jellybase", "jellyclient", "jellycommon", "jellyremuxer", + "jellytranscoder", "log", "markup", - "once_cell", "rand", "rocket", "serde", "serde_json", - "sha2", "sled", "tokio", "tokio-util", @@ -1318,6 +1573,23 @@ dependencies = [ ] [[package]] +name = "jellytranscoder" +version = "0.1.0" +dependencies = [ + "log", + "ravif", +] + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] name = "js-sys" version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1336,6 +1608,12 @@ dependencies = [ ] [[package]] +name = "lab" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f" + +[[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1348,6 +1626,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] +name = "libfuzzer-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef" +dependencies = [ + "arbitrary", + "cc", +] + +[[package]] +name = "libgit2-sys" +version = "0.14.2+1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libz-sys" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] name = "linux-raw-sys" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1388,6 +1700,15 @@ dependencies = [ ] [[package]] +name = "loop9" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a703804431e5927454bcaf2b2a162595e95db931130c2728c18d050090f69940" +dependencies = [ + "imgref", +] + +[[package]] name = "markup" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1418,6 +1739,16 @@ dependencies = [ ] [[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 = "memchr" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1439,6 +1770,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[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.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1479,6 +1816,15 @@ dependencies = [ ] [[package]] +name = "nasm-rs" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4d98d0065f4b1daf164b3eafb11974c94662e5e2396cf03f32d0bb5c17da51" +dependencies = [ + "rayon", +] + +[[package]] name = "native-tls" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1497,6 +1843,28 @@ dependencies = [ ] [[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[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 = "noop_proc_macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" + +[[package]] name = "nu-ansi-term" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1507,6 +1875,61 @@ dependencies = [ ] [[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e6a0fd4f737c707bd9086cc16c925f294943eb62eb71499e9fd4cf71f8b9f4e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.28", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] name = "num-traits" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1662,6 +2085,12 @@ dependencies = [ ] [[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] name = "pear" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1785,6 +2214,12 @@ dependencies = [ ] [[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] name = "quote" version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1824,6 +2259,92 @@ dependencies = [ ] [[package]] +name = "rav1e" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "277898094f0d03c6a609e491324102daf5080e71c06b4b25e5acf8b89d26c945" +dependencies = [ + "arbitrary", + "arg_enum_proc_macro", + "arrayvec", + "av-metrics", + "av1-grain", + "bitstream-io", + "built", + "cc", + "cfg-if", + "clap", + "clap_complete", + "console", + "const_fn_assert", + "fern", + "interpolate_name", + "itertools", + "ivf", + "libc", + "libfuzzer-sys", + "log", + "maybe-rayon", + "nasm-rs", + "new_debug_unreachable", + "nom", + "noop_proc_macro", + "num-derive 0.3.3", + "num-traits", + "once_cell", + "paste", + "rand", + "rand_chacha", + "rust_hawktracer", + "rustc_version", + "scan_fmt", + "signal-hook", + "simd_helpers", + "system-deps", + "thiserror", + "v_frame", + "wasm-bindgen", + "y4m", +] + +[[package]] +name = "ravif" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cd36aa2bc280b60619e0c4386a73ff2ac343551dcf400168562ce08cc0c32e0" +dependencies = [ + "avif-serialize", + "imgref", + "loop9", + "quick-error", + "rav1e", + "rayon", + "rgb", +] + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] name = "redox_syscall" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1931,6 +2452,15 @@ dependencies = [ ] [[package]] +name = "rgb" +version = "0.8.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +dependencies = [ + "bytemuck", +] + +[[package]] name = "rocket" version = "0.5.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2013,12 +2543,43 @@ dependencies = [ ] [[package]] +name = "rust_hawktracer" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3480a29b927f66c6e06527be7f49ef4d291a01d694ec1fe85b0de71d6b02ac1" +dependencies = [ + "rust_hawktracer_normal_macro", + "rust_hawktracer_proc_macro", +] + +[[package]] +name = "rust_hawktracer_normal_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a570059949e1dcdc6f35228fa389f54c2c84dfe0c94c05022baacd56eacd2e9" + +[[package]] +name = "rust_hawktracer_proc_macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb626abdbed5e93f031baae60d72032f56bc964e11ac2ff65f2ba3ed98d6d3e1" + +[[package]] name = "rustc-demangle" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] name = "rustix" version = "0.37.23" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2045,6 +2606,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] +name = "scan_fmt" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b53b0a5db882a8e2fdaae0a43f7b39e7e9082389e978398bdf223a55b581248" + +[[package]] name = "schannel" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2089,19 +2656,28 @@ dependencies = [ ] [[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +dependencies = [ + "serde", +] + +[[package]] name = "serde" -version = "1.0.180" +version = "1.0.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea67f183f058fe88a4e3ec6e2788e003840893b91bac4559cabedd00863b3ed" +checksum = "bdb30a74471f5b7a1fa299f40b4bf1be93af61116df95465b2b5fc419331e430" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.180" +version = "1.0.182" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e744d7782b686ab3b73267ef05697159cc0e5abbed3f47f9933165e5219036" +checksum = "6f4c2c6ea4bc09b5c419012eafcdb0fcef1d9119d626c8f3a0708a5b92d38a70" dependencies = [ "proc-macro2", "quote", @@ -2161,6 +2737,16 @@ dependencies = [ ] [[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] name = "signal-hook-registry" version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2170,6 +2756,15 @@ dependencies = [ ] [[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.8" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2269,6 +2864,25 @@ dependencies = [ ] [[package]] +name = "system-deps" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.7.4", + "version-compare", +] + +[[package]] +name = "target-lexicon" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" + +[[package]] name = "tempfile" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2291,6 +2905,16 @@ dependencies = [ ] [[package]] +name = "terminal_size" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" +dependencies = [ + "rustix", + "windows-sys 0.48.0", +] + +[[package]] name = "thiserror" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2440,6 +3064,15 @@ dependencies = [ [[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.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec" @@ -2606,6 +3239,12 @@ dependencies = [ ] [[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2639,6 +3278,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] +name = "v_frame" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85db69f33d00031c1b07f7292e56317d5aa9475bdbd3d27ef18f3633438a697e" +dependencies = [ + "cfg-if", + "noop_proc_macro", + "num-derive 0.4.0", + "num-traits", + "rust_hawktracer", +] + +[[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2657,6 +3309,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2999,6 +3657,12 @@ dependencies = [ ] [[package]] +name = "y4m" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a72a9921af8237fe25097a1ae31c92a05c1d39b2454653ad48f2f407cf7a0dae" + +[[package]] name = "yansi" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7,5 +7,7 @@ members = [ "matroska", "ebml_derive", "client", + "transcoder", + "base", ] resolver = "2" diff --git a/base/Cargo.toml b/base/Cargo.toml new file mode 100644 index 0000000..b9fba7e --- /dev/null +++ b/base/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "jellybase" +version = "0.1.0" +edition = "2021" + +[dependencies] +jellycommon = { path = "../common" } +serde_json = "1.0.104" +log = "0.4.19" +sha2 = "0.10.7" +base64 = "0.21.2" diff --git a/base/src/lib.rs b/base/src/lib.rs new file mode 100644 index 0000000..62f93e7 --- /dev/null +++ b/base/src/lib.rs @@ -0,0 +1,42 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> +*/ +#![feature(lazy_cell)] +use base64::Engine; +use jellycommon::config::GlobalConfig; +use std::{fs::File, path::PathBuf, str::FromStr, sync::LazyLock}; + +pub static CONF: LazyLock<GlobalConfig> = LazyLock::new(|| { + serde_json::from_reader( + File::open( + std::env::args() + .nth(1) + .expect("First argument must specify the config.json to use."), + ) + .unwrap(), + ) + .unwrap() +}); + +pub fn cache_file(seed: &[&str]) -> (PathBuf, Option<File>) { + use sha2::Digest; + let mut d = sha2::Sha512::new(); + for s in seed { + d.update(s.as_bytes()); + d.update(b"\0"); + } + let d = d.finalize(); + let fname = base64::engine::general_purpose::URL_SAFE.encode(d); + let fname = &fname[..22]; // about 128 bits + let fullpath = CONF.cache_path.join(fname); + let cachepath = PathBuf::from_str(fname).unwrap(); + + let f = if !fullpath.exists() { + Some(File::create(&fullpath).unwrap()) + } else { + None + }; + (cachepath, f) +} diff --git a/common/Cargo.toml b/common/Cargo.toml index 2e35feb..ce864eb 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -4,5 +4,5 @@ version = "0.1.0" edition = "2021" [dependencies] -serde = { version = "1.0.180", features = ["derive"] } +serde = { version = "1.0.182", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["derive"] } diff --git a/import/Cargo.toml b/import/Cargo.toml index 2e35e18..0d4fa27 100644 --- a/import/Cargo.toml +++ b/import/Cargo.toml @@ -14,7 +14,7 @@ anyhow = "1.0.72" clap = { version = "4.3.19", features = ["derive"] } reqwest = { version = "0.11.18", features = ["blocking", "json"] } -serde = { version = "1.0.180", features = ["derive"] } +serde = { version = "1.0.182", features = ["derive"] } serde_json = "1.0.104" bincode = { version = "2.0.0-rc.3", features = ["serde"] } base64 = "0.21.2" diff --git a/remuxer/Cargo.toml b/remuxer/Cargo.toml index f8f560f..cdbc05f 100644 --- a/remuxer/Cargo.toml +++ b/remuxer/Cargo.toml @@ -11,5 +11,5 @@ tokio = { version = "1.29.1", features = ["io-util"] } anyhow = "1.0.72" log = "0.4.19" -serde = { version = "1.0.180", features = ["derive"] } +serde = { version = "1.0.182", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["serde"] } diff --git a/server/Cargo.toml b/server/Cargo.toml index f9ecac2..7d6b18f 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -5,24 +5,24 @@ edition = "2021" [dependencies] jellycommon = { path = "../common" } +jellybase = { path = "../base" } jellyremuxer = { path = "../remuxer" } jellyclient = { path = "../client" } +jellytranscoder = { path = "../transcoder" } -serde = { version = "1.0.180", features = ["derive"] } +serde = { version = "1.0.182", features = ["derive"] } bincode = { version = "2.0.0-rc.3", features = ["serde", "derive"] } serde_json = "1.0.104" log = "0.4.19" env_logger = "0.10.0" anyhow = "1.0.72" -once_cell = "1.18.0" rand = "0.8.5" base64 = "0.21.2" chrono = { version = "0.4.26", features = ["serde"] } vte = "0.11.1" argon2 = "0.5.1" -sha2 = "0.10.7" aes-gcm-siv = "0.11.1" async-std = "1.12.0" diff --git a/server/src/database.rs b/server/src/database.rs index 12a6564..be71c98 100644 --- a/server/src/database.rs +++ b/server/src/database.rs @@ -3,8 +3,9 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2023 metamuffin <metamuffin.org> */ -use crate::{routes::ui::account::hash_password, CONF}; +use crate::routes::ui::account::hash_password; use anyhow::Context; +use jellybase::CONF; use jellycommon::{Node, SeekIndex}; use log::info; use serde::{Deserialize, Serialize}; diff --git a/server/src/federation.rs b/server/src/federation.rs index c31f95d..38863e2 100644 --- a/server/src/federation.rs +++ b/server/src/federation.rs @@ -3,8 +3,8 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2023 metamuffin <metamuffin.org> */ -use crate::CONF; use anyhow::anyhow; +use jellybase::CONF; use jellyclient::{Instance, Session}; use std::{collections::HashMap, sync::Arc, time::Duration}; use tokio::sync::RwLock; diff --git a/server/src/import.rs b/server/src/import.rs index 9ffab48..48bdcdc 100644 --- a/server/src/import.rs +++ b/server/src/import.rs @@ -6,14 +6,12 @@ use crate::{database::Database, federation::Federation, CONF}; use anyhow::{anyhow, bail, Context, Ok}; use async_recursion::async_recursion; -use base64::Engine; use futures::{stream::FuturesUnordered, StreamExt}; +use jellybase::cache_file; use jellyclient::Session; use jellycommon::{AssetLocation, MediaSource, Node, NodePrivate, RemoteImportOptions}; use log::{debug, error, info}; -use std::{ - ffi::OsStr, fs::File, os::unix::prelude::OsStrExt, path::PathBuf, str::FromStr, sync::LazyLock, -}; +use std::{ffi::OsStr, fs::File, os::unix::prelude::OsStrExt, path::PathBuf, sync::LazyLock}; use tokio::sync::Semaphore; static IMPORT_SEM: LazyLock<Semaphore> = LazyLock::new(|| Semaphore::new(1)); @@ -194,24 +192,3 @@ async fn cache_federation_asset( } Ok(poster) } - -fn cache_file(seed: &[&str]) -> (PathBuf, Option<File>) { - use sha2::Digest; - let mut d = sha2::Sha512::new(); - for s in seed { - d.update(s.as_bytes()); - d.update(b"\0"); - } - let d = d.finalize(); - let fname = base64::engine::general_purpose::URL_SAFE.encode(d); - let fname = &fname[..22]; // about 128 bits - let fullpath = CONF.cache_path.join(fname); - let cachepath = PathBuf::from_str(fname).unwrap(); - - let f = if !fullpath.exists() { - Some(File::create(&fullpath).unwrap()) - } else { - None - }; - (cachepath, f) -} diff --git a/server/src/main.rs b/server/src/main.rs index b10831f..73d90a4 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -8,29 +8,15 @@ use crate::routes::ui::admin::log::enable_logging; use database::Database; use federation::Federation; -use jellycommon::config::GlobalConfig; +use jellybase::CONF; use jellyremuxer::RemuxerContext; -use once_cell::sync::Lazy; use routes::build_rocket; -use std::fs::File; pub mod database; pub mod federation; pub mod import; pub mod routes; -pub static CONF: Lazy<GlobalConfig> = Lazy::new(|| { - serde_json::from_reader( - File::open( - std::env::args() - .nth(1) - .expect("First argument must specify the config.json to use."), - ) - .unwrap(), - ) - .unwrap() -}); - fn main() { enable_logging(); #[cfg(feature = "bypass-auth")] diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs index 38d0390..cdb7424 100644 --- a/server/src/routes/mod.rs +++ b/server/src/routes/mod.rs @@ -3,9 +3,10 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2023 metamuffin <metamuffin.org> */ -use crate::{database::Database, federation::Federation, routes::ui::error::MyResult, CONF}; +use crate::{database::Database, federation::Federation, routes::ui::error::MyResult}; use api::{r_api_account_login, r_api_root, r_api_version}; use base64::Engine; +use jellybase::CONF; use jellyremuxer::RemuxerContext; use log::warn; use rand::random; diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs index ee7880c..7e26500 100644 --- a/server/src/routes/stream.rs +++ b/server/src/routes/stream.rs @@ -4,8 +4,9 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ use super::ui::{account::session::Session, error::MyError}; -use crate::{database::Database, federation::Federation, CONF}; +use crate::{database::Database, federation::Federation}; use anyhow::{anyhow, Result}; +use jellybase::CONF; use jellycommon::MediaSource; use jellyremuxer::RemuxerContext; use log::{debug, info, warn}; diff --git a/server/src/routes/ui/account/mod.rs b/server/src/routes/ui/account/mod.rs index 6bdf65a..b7ba332 100644 --- a/server/src/routes/ui/account/mod.rs +++ b/server/src/routes/ui/account/mod.rs @@ -10,11 +10,12 @@ use super::{error::MyError, layout::LayoutPage}; use crate::{ database::{Database, User}, routes::ui::{error::MyResult, home::rocket_uri_macro_r_home, layout::DynLayoutPage}, - CONF, uri, + uri, }; use anyhow::anyhow; use argon2::{password_hash::Salt, Argon2, PasswordHasher}; use chrono::Duration; +use jellybase::CONF; use rocket::{ form::{Contextual, Form}, get, diff --git a/server/src/routes/ui/account/session/token.rs b/server/src/routes/ui/account/session/token.rs index c02eff7..e5e4baf 100644 --- a/server/src/routes/ui/account/session/token.rs +++ b/server/src/routes/ui/account/session/token.rs @@ -4,7 +4,6 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ use super::SessionData; -use crate::CONF; use aes_gcm_siv::{ aead::{generic_array::GenericArray, Aead}, KeyInit, @@ -12,6 +11,7 @@ use aes_gcm_siv::{ use anyhow::anyhow; use base64::Engine; use chrono::{Duration, Utc}; +use jellybase::CONF; use log::warn; use std::sync::LazyLock; diff --git a/server/src/routes/ui/assets.rs b/server/src/routes/ui/assets.rs index c00749f..8a14133 100644 --- a/server/src/routes/ui/assets.rs +++ b/server/src/routes/ui/assets.rs @@ -6,9 +6,9 @@ use crate::{ database::Database, routes::ui::{account::session::Session, error::MyError, CacheControlFile}, - CONF, }; use anyhow::anyhow; +use jellybase::CONF; use jellycommon::AssetLocation; use log::info; use rocket::{get, http::ContentType, FromFormField, State, UriDisplayQuery}; @@ -23,12 +23,13 @@ pub enum AssetRole { Backdrop, } -#[get("/n/<id>/asset?<role>")] +#[get("/n/<id>/asset?<role>&<width>")] pub async fn r_item_assets( _sess: Session, + db: &State<Database>, id: String, role: AssetRole, - db: &State<Database>, + width: Option<u32>, ) -> Result<(ContentType, CacheControlFile), MyError> { let node = db.node.get(&id)?.ok_or(anyhow!("node does not exist"))?; let mut asset = match role { diff --git a/server/src/routes/ui/home.rs b/server/src/routes/ui/home.rs index c4defd0..c544336 100644 --- a/server/src/routes/ui/home.rs +++ b/server/src/routes/ui/home.rs @@ -7,8 +7,8 @@ use super::{account::session::Session, layout::LayoutPage}; use crate::{ database::Database, routes::ui::{error::MyResult, layout::DynLayoutPage}, - CONF, }; +use jellybase::CONF; use rocket::{get, State}; use tokio::fs::read_to_string; diff --git a/server/src/routes/ui/layout.rs b/server/src/routes/ui/layout.rs index 0e0a429..fdda3e4 100644 --- a/server/src/routes/ui/layout.rs +++ b/server/src/routes/ui/layout.rs @@ -14,9 +14,10 @@ use crate::{ browser::rocket_uri_macro_r_all_items, node::rocket_uri_macro_r_library_node, }, - uri, CONF, + uri, }; use async_std::task::block_on; +use jellybase::CONF; use markup::{DynRender, Render}; use rocket::{ http::ContentType, diff --git a/server/src/routes/ui/mod.rs b/server/src/routes/ui/mod.rs index 7acc02a..d561627 100644 --- a/server/src/routes/ui/mod.rs +++ b/server/src/routes/ui/mod.rs @@ -82,6 +82,7 @@ impl<'r> Responder<'r, 'static> for CacheControlFile { Response::build() .status(Status::NotModified) .header(Header::new("cache-control", "private")) + .header(Header::new("etag", tag)) .ok() } else { debug!("file cache: transfer"); diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index 7b8548e..4574709 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -70,7 +70,7 @@ markup::define! { div[class=cls] { div.poster { a[href=uri!(r_library_node(id))] { - img[src=uri!(r_item_assets(id, AssetRole::Poster))]; + img[src=uri!(r_item_assets(id, AssetRole::Poster, Some(1024)))]; } @if matches!(node.kind, NodeKind::Collection | NodeKind::Channel) { div.hoverdir { a[href=&uri!(r_library_node(id))] { "Open" } } @@ -87,11 +87,11 @@ markup::define! { } NodePage<'a>(id: &'a str, node: &'a NodePublic, children: &'a Vec<(String, NodePublic)>) { @if !matches!(node.kind, NodeKind::Collection) { - img.backdrop[src=uri!(r_item_assets(id, AssetRole::Backdrop))]; + img.backdrop[src=uri!(r_item_assets(id, AssetRole::Backdrop, Some(2048)))]; } div.page.node { @if !matches!(node.kind, NodeKind::Collection) { - div.bigposter { img[src=uri!(r_item_assets(id, AssetRole::Poster))]; } + div.bigposter { img[src=uri!(r_item_assets(id, AssetRole::Poster, Some(2048)))]; } } div.title { h1 { @node.title } diff --git a/server/src/routes/ui/player.rs b/server/src/routes/ui/player.rs index 3bfb6a4..0e6962e 100644 --- a/server/src/routes/ui/player.rs +++ b/server/src/routes/ui/player.rs @@ -56,7 +56,7 @@ pub fn r_player( class: Some("player"), content: markup::new! { @if tracks.is_empty() { - img.backdrop[src=uri!(r_item_assets(&id, AssetRole::Backdrop)).to_string()]; + img.backdrop[src=uri!(r_item_assets(&id, AssetRole::Backdrop, Some(2048))).to_string()]; } else { video[src=uri!(r_stream(&id, &tracks, Some(true))), controls, preload="auto"]{} } diff --git a/transcoder/Cargo.toml b/transcoder/Cargo.toml new file mode 100644 index 0000000..bfdbedf --- /dev/null +++ b/transcoder/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "jellytranscoder" +version = "0.1.0" +edition = "2021" + +[dependencies] +log = "0.4.19" +ravif = "0.11.2" diff --git a/transcoder/src/lib.rs b/transcoder/src/lib.rs new file mode 100644 index 0000000..6ddc2a4 --- /dev/null +++ b/transcoder/src/lib.rs @@ -0,0 +1,5 @@ +/* + This file is part of jellything (https://codeberg.org/metamuffin/jellything) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2023 metamuffin <metamuffin.org> +*/ |