diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 82c6d18..00d633b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -121,7 +121,7 @@ jobs: $v = (Select-String -Path Cargo.toml -Pattern '^version = "(.*)"').Matches[0].Groups[1].Value $p = "TeXora-$v-windows-x64" New-Item -ItemType Directory -Force "stage/$p", "dist/$v" | Out-Null - Copy-Item target/release/TeXora.exe, target/release/pdfium.dll, README.md, CREDITS.md, LICENSE "stage/$p/" + Copy-Item target/release/TeXora.exe, target/release/pdfium.dll, README.md, CREDITS.md, THIRD-PARTY-LICENSES.md, LICENSE "stage/$p/" Compress-Archive -Path "stage/$p" -DestinationPath "dist/$v/$p.zip" "PKG=$p" | Out-File -Append $env:GITHUB_ENV "VER=$v" | Out-File -Append $env:GITHUB_ENV diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c29b7..f7da34a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,31 @@ All notable changes to TeXora. The newest version is first. +## 1.5.0 + +### Security + +- ffmpeg opens a clip with `-nostdin -protocol_whitelist file` and a list of real video formats only, so a file that is really a playlist or a concat list cannot make ffmpeg read other files or web addresses. Tested with such files: plain ffmpeg follows them, TeXora's ffmpeg refuses them. +- VLC gets the clip's full path after `--`, so a file name starting with `-` is never read as an option, and only files that really are videos (from their first bytes, not their name): never a playlist. +- Which player runs, and where it is, comes only from your own Settings. A presentation, its `.tex` file, a PDF or anything in its folder can never set the program or add arguments; this is tested. + +### New + +- Videos and GIFs in your slides: `\usepackage{texoravideo}` and `\includevideo[width=0.5\textwidth]{clip.mp4}`. TeXora ships the LaTeX package and finds it by itself when it compiles. A second optional argument takes `autoplay`, `loop`, `posterat=` and `poster=`. +- **GIFs play by themselves.** **MP4 playback uses VLC or ffmpeg installed on your computer**: with ffmpeg the clip plays inside the slide, with VLC in VLC's own window. TeXora contains no video decoder and never downloads or installs one. +- Settings > Video chooses the player (Auto, ffmpeg, VLC or Off), with a path and a **Test** button for each. +- A video that needs a player when none is installed says "This video needs VLC or ffmpeg installed on your computer.", with **Get VLC**, **Get ffmpeg** and **Copy install command**. TeXora only opens the pages and copies the command; it never runs it. +- Before compiling, TeXora makes each clip's poster in a `texora-video` folder (again only when the clip changes; a video's poster needs ffmpeg), so every PDF viewer shows the poster; a click in TeXora plays or pauses the clip, and another slide stops it and its ffmpeg. +- A missing file, a file that is not a video or a path outside the presentation's folder shows a message over the poster and under Problems. +- A video can be in the `.tex` file's folder or in any folder inside it; a video in a folder is written with the folder name, as in `\includevideo{videos/clip.mp4}`. "Video not found" says this in plain words. +- One poster per video, however often it is used; posters no longer used are removed. +- A new template, **Video Guide**, explains `\includevideo` slide by slide: what you need, a video, a looping GIF, every option, posters, overlays and what to do when a clip does not play. Its sample video and GIF are saved in a `media` folder beside the new file. + +### Fixed + +- Check packages finds packages, classes, themes and TikZ libraries of your own that sit beside the `.tex` file (or in a folder you name, as in `\usepackage{styles/house}`), as LaTeX does, and no longer reports them as missing or suggests `tlmgr install` for them (#3). +- The control bar under an animation (first, previous, play/pause, next, last) works again: its buttons now get the click, instead of the slide underneath taking it. + ## 1.4.1 ### Fixed diff --git a/CREDITS.md b/CREDITS.md index 80b117b..88e58ab 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -4,6 +4,10 @@ TeXora is original code by Khalid Alkhaldi, licensed under PolyForm Noncommercia bundled sample lecture and the five presentation templates are neutral placeholder text written for it. - PDFium, prebuilt by bblanchon/pdfium-binaries: BSD-3-Clause and Apache-2.0. Downloaded into `vendor/` when building. +- md-5 (names video posters): MIT or Apache-2.0. GIFs are decoded by the image crate. +- No video decoder, ffmpeg, VLC, libvlc or codec library is included. MP4 playback uses VLC or ffmpeg + installed on your computer, started as separate programs. Every library inside TeXora, with its + licence, is listed in `THIRD-PARTY-LICENSES.md`. - egui and eframe: MIT or Apache-2.0. - pdfium-render: MIT or Apache-2.0. - ureq, serde, serde_json, image, rfd, display-info, dirs: MIT or Apache-2.0 style licences. diff --git a/Cargo.lock b/Cargo.lock index 8d6df97..9344cd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,6 +142,15 @@ version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "block2" version = "0.5.1" @@ -327,6 +336,12 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + [[package]] name = "combine" version = "4.6.9" @@ -366,6 +381,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "cookie" version = "0.18.2" @@ -456,6 +477,15 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + [[package]] name = "cursor-icon" version = "1.2.0" @@ -468,6 +498,17 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", +] + [[package]] name = "dirs" version = "7.0.0" @@ -990,6 +1031,16 @@ dependencies = [ "r-efi 6.0.0", ] +[[package]] +name = "gif" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gl_generator" version = "0.14.0" @@ -1169,6 +1220,15 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hybrid-array" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" +dependencies = [ + "typenum", +] + [[package]] name = "iana-time-zone" version = "0.1.65" @@ -1305,6 +1365,8 @@ checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ "bytemuck", "byteorder-lite", + "color_quant", + "gif", "moxcms", "num-traits", "png", @@ -1530,6 +1592,16 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" +[[package]] +name = "md-5" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +dependencies = [ + "cfg-if", + "digest", +] + [[package]] name = "memchr" version = "2.8.3" @@ -2863,7 +2935,7 @@ dependencies = [ [[package]] name = "texora" -version = "1.4.1" +version = "1.5.0" dependencies = [ "dirs", "display-info", @@ -2872,6 +2944,7 @@ dependencies = [ "embed-resource", "fontique", "image", + "md-5", "miniz_oxide 0.8.9", "pdfium-render", "rfd", @@ -3072,6 +3145,12 @@ dependencies = [ "rustc-hash 2.1.3", ] +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + [[package]] name = "unicode-bidi" version = "0.3.18" diff --git a/Cargo.toml b/Cargo.toml index 1be8b8a..002b962 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "texora" -version = "1.4.1" +version = "1.5.0" edition = "2021" description = "TeXora: a LaTeX-native presenter for Beamer and PDF slides" license = "PolyForm-Noncommercial-1.0.0" @@ -15,7 +15,7 @@ path = "src/main.rs" eframe = { version = "0.37", default-features = false, features = ["glow", "default_fonts", "wayland", "x11", "clipboard", "links", "system_fonts"] } egui = "0.37" pdfium-render = "0.9.5" -image = { version = "0.25", default-features = false, features = ["png"] } +image = { version = "0.25", default-features = false, features = ["png", "gif", "jpeg"] } rfd = "0.17" serde = { version = "1", features = ["derive"] } unicode-bidi = "0.3" @@ -24,6 +24,10 @@ serde_json = "1" ureq = { version = "3", features = ["json"] } display-info = "0.5" dirs = "7" +# Video inside slides: GIFs are decoded by the image crate. TeXora contains no other video decoder; +# MP4 and other formats play through ffmpeg or VLC that the person installed (src/video.rs). md-5 names +# the posters. +md-5 = "0.11" # Fonts for other writing systems (Arabic, Hebrew, Chinese, Japanese, Korean, Hindi, Thai...) come from # the computer itself. On Linux, fontconfig is opened when the program runs instead of being linked, so diff --git a/README.md b/README.md index f21343a..3624efb 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,8 @@ The audience window shows only the slide, fullscreen on a projector or second sc source, from a `.pdfpc` file, or from a Markdown file beside the presentation. **Edit notes** for any slide right in the notes panel. - **Animations and videos**: animations made with the LaTeX `animate` package play on the slide, with - autoplay, looping and play controls; video clips open in your video player. + autoplay, looping and play controls. Videos and GIFs placed with the built-in `texoravideo` package + play inside the slide; `\movie` and media9 clips open in your video player. - **Drawing and pointing**: pen, highlighter, eraser, a laser pointer in several colours, and zoom into an area. Ink is kept per slide. - **Zoom** any slide with the wheel or a pinch, around the pointer. @@ -128,11 +129,13 @@ Nothing else is needed to present PDFs: each package carries the program and its LaTeX project**, pick a recent file, or drop a file on the window. **Try the sample lecture** opens a ready-made talk to explore. - **New LaTeX presentation** offers eight templates, each a complete Beamer file with speaker notes: - Classic Green, Midnight, Minimal White, Conference and Sunrise, and three animated ones. **Motion + **New LaTeX presentation** offers nine templates, each a complete Beamer file with speaker notes: + Classic Green, Midnight, Minimal White, Conference and Sunrise, and four animated ones. **Motion Lab** shows animations drawn with TikZ, **Flipbook** plays the frames of a GIF and charts that - grow, and **Media Studio** has a video clip and charts that draw themselves. Flipbook and Media - Studio save their pictures and clip in a `media` folder beside the new file. + grow, **Media Studio** has a video clip and charts that draw themselves, and **Video Guide** + explains `\includevideo` slide by slide, with a video and a GIF that play inside the slides. + Flipbook, Media Studio and Video Guide save their pictures and clips in a `media` folder beside + the new file. 3. A `.tex` file is compiled for you. Edit it in the **LaTeX studio** (Cmd/Ctrl+E), or in your own LaTeX editor: the slides rebuild either way. 4. Press **F5** to show the slides to the room, then move with the arrow keys or **Space**. @@ -358,7 +361,48 @@ For a large GIF, shrink it while splitting, for example `ffmpeg -i anim.gif -vf "fps=10,scale=640:-1" frames/f%d.png`, and keep the `frames` folder beside the `.tex` file. -**Videos.** Use Beamer's `\movie` (the `multimedia` package) or media9's `\includemedia`. Each shows a +**Videos inside the slide.** TeXora comes with its own LaTeX package, `texoravideo`, and finds it by +itself when it compiles; there is no package to install or copy. **GIFs play by themselves. MP4 +playback uses VLC or ffmpeg installed on your computer**: with ffmpeg the clip plays inside the slide, +with VLC in VLC's own window. TeXora contains no video decoder and never downloads or installs one. + +```latex +\usepackage{texoravideo} +\hypersetup{hidelinks} +... +\includevideo[width=0.5\textwidth]{clip.mp4} +\includevideo[height=5cm][loop,autoplay]{media/wave.gif} +\includevideo[width=\textwidth][poster=cover.png,posterat=25]{talk.mp4} +``` + +- The first optional argument goes to `\includegraphics` as it is. The second takes `autoplay`, `loop`, + `posterat=` (where the poster is taken from; default the first frame) and `poster=`. +- The video must be in the `.tex` file's folder, or in a folder inside it (any name). If it is in a + folder, write the folder name too: `{videos/clip.mp4}`. Otherwise TeXora shows "Video not found". +- Before LaTeX runs, TeXora makes one poster per video in a `texora-video` folder beside the + presentation, again only when the clip changes; if a video is used with different `posterat` + values, the first counts. `texora-video/index.json` keeps what was found, so the + PDF still plays when opened later. Every PDF viewer shows the poster; only TeXora plays the clip. +- Click to play, click again to pause; another slide stops it, and overlay steps of the same slide keep + it playing. GIFs work the same way, with no splitting. +- GIFs always play. MP4 and other formats play when ffmpeg or VLC is installed; ffmpeg also makes + their posters. Choose the player in **Settings > Video** (Auto, ffmpeg, VLC or Off); each has a path + field and a **Test** button. +- No player installed: the clip says "This video needs VLC or ffmpeg installed on your computer.", with + **Get VLC** (videolan.org), **Get ffmpeg** (ffmpeg.org/download.html) and, on macOS and Linux, + **Copy install command** (`brew install ffmpeg`, or `sudo apt install ffmpeg`). TeXora copies the + command; you run it yourself. +- A missing file, a file that is not a video, or a path outside the presentation's folder (an absolute + path, `..`, a link leading out, a web address) shows a message over the poster and under Problems. + Names may have spaces and accents, but not `%` or `#`. +- ffmpeg and VLC run as separate programs, with a list of arguments and never through a shell; TeXora + ends ffmpeg when you leave the slide. Sound is not played yet. +- ffmpeg reads a clip with `-nostdin -protocol_whitelist file` and real video formats only, so a file + that is really a playlist or concat list cannot reach other files or the web. VLC gets the full path + after `--`, and only real video files. Which program runs comes only from your Settings: a + presentation or anything in its folder can never set it or add arguments. + +**Videos in your video player.** Use Beamer's `\movie` (the `multimedia` package) or media9's `\includemedia`. Each shows a play button in the presenter view. Click it and the video opens in your computer's video player, which you can move to the projector. The player may start paused, so press play there. @@ -374,7 +418,7 @@ which you can move to the projector. The player may start paused, so press play unpacked by TeXora. - Write `\movie` without `externalviewer`. `\movie[externalviewer]` and `\href{run:...}` links are not opened yet, and links to local files (`\href{file:...}`) are not opened. -- Videos do not play inside the slide itself. +- These clips do not play inside the slide; use `\includevideo` for that. ### Presenting to the room @@ -487,5 +531,3 @@ Copyright 2026 Khalid Alkhaldi. Licensed under [PolyForm Noncommercial 1.0.0](LI non-commercial purpose, including personal use, study, teaching, research and non-profit work. Commercial use needs the author's permission. The app icon and Home picture are the author's artwork and are not covered by the licence. See [CREDITS.md](CREDITS.md) for the libraries and fonts used. - -Made by Khalid Alkhaldi. diff --git a/THIRD-PARTY-LICENSES.md b/THIRD-PARTY-LICENSES.md new file mode 100644 index 0000000..27a5a02 --- /dev/null +++ b/THIRD-PARTY-LICENSES.md @@ -0,0 +1,415 @@ +# Third-party licences + +TeXora is built from the libraries below; each keeps its own licence. This list is made by +`scripts/third-party.py` from Cargo's records, so it matches the program exactly. + +## Not included + +TeXora contains **no video decoder, encoder or player**: no H.264 or other codec, no ffmpeg, no VLC +or libvlc. GIFs are decoded by the `image` library. **MP4 playback uses VLC or ffmpeg installed on +your computer**, started as separate programs; TeXora never downloads, installs, ships or updates them. +ffmpeg and VLC have their own licences (LGPL/GPL), which apply to the copies you install. + +## Shipped beside the program + +| Component | Licence | Source | +|---|---|---| +| PDFium (prebuilt by bblanchon/pdfium-binaries) | BSD-3-Clause and Apache-2.0 | https://github.com/bblanchon/pdfium-binaries | +| Inter font (Rasmus Andersson) | SIL Open Font License 1.1 | https://rsms.me/inter/ | +| Hack and Ubuntu Light fonts (inside egui) | MIT; Ubuntu Font Licence | https://github.com/emilk/egui | + +## Rust libraries built into the program (391) + +| Library | Version | Licence | Source | +|---|---|---|---| +| accesskit | 0.25.2 | MIT OR Apache-2.0 | https://github.com/AccessKit/accesskit | +| adler2 | 2.0.1 | 0BSD OR MIT OR Apache-2.0 | https://github.com/oyvindln/adler2 | +| ahash | 0.8.12 | MIT OR Apache-2.0 | https://github.com/tkaitchuck/ahash | +| android-activity | 0.6.1 | MIT OR Apache-2.0 | https://github.com/rust-mobile/android-activity | +| android-properties | 0.2.2 | MIT | https://github.com/miklelappo/android-properties | +| android_system_properties | 0.1.6 | MIT OR Apache-2.0 | https://github.com/nical/android_system_properties | +| arboard | 3.7.0 | MIT OR Apache-2.0 | https://github.com/1Password/arboard | +| arrayvec | 0.7.8 | MIT OR Apache-2.0 | https://github.com/bluss/arrayvec | +| as-raw-xcb-connection | 1.0.1 | MIT OR Apache-2.0 | https://github.com/psychon/as-raw-xcb-connection | +| atomic-waker | 1.1.2 | Apache-2.0 OR MIT | https://github.com/smol-rs/atomic-waker | +| base64 | 0.23.1 | MIT OR Apache-2.0 | https://github.com/marshallpierce/rust-base64 | +| bit-set | 0.10.0 | Apache-2.0 OR MIT | https://github.com/contain-rs/bit-set | +| bit-vec | 0.9.1 | Apache-2.0 OR MIT | https://github.com/contain-rs/bit-vec | +| bitflags | 1.3.2 | MIT/Apache-2.0 | https://github.com/bitflags/bitflags | +| bitflags | 2.13.2 | MIT OR Apache-2.0 | https://github.com/bitflags/bitflags | +| block-buffer | 0.12.1 | MIT OR Apache-2.0 | https://github.com/RustCrypto/utils | +| block2 | 0.5.1 | MIT | https://github.com/madsmtm/objc2 | +| block2 | 0.6.2 | MIT | https://github.com/madsmtm/objc2 | +| bumpalo | 3.20.3 | MIT OR Apache-2.0 | https://github.com/fitzgen/bumpalo | +| bytemuck | 1.25.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/Lokathor/bytemuck | +| bytemuck_derive | 1.12.1 | Zlib OR Apache-2.0 OR MIT | https://github.com/Lokathor/bytemuck | +| byteorder | 1.5.0 | Unlicense OR MIT | https://github.com/BurntSushi/byteorder | +| byteorder-lite | 0.1.0 | Unlicense OR MIT | https://github.com/image-rs/byteorder-lite | +| bytes | 1.12.1 | MIT | https://github.com/tokio-rs/bytes | +| calloop | 0.13.0 | MIT | https://github.com/Smithay/calloop | +| calloop | 0.14.5 | MIT | https://github.com/Smithay/calloop | +| calloop-wayland-source | 0.3.0 | MIT | https://github.com/smithay/calloop-wayland-source | +| calloop-wayland-source | 0.4.1 | MIT | https://github.com/smithay/calloop-wayland-source | +| cfg-if | 1.0.5 | MIT OR Apache-2.0 | https://github.com/rust-lang/cfg-if | +| cgl | 0.3.2 | MIT / Apache-2.0 | https://github.com/servo/cgl-rs | +| chrono | 0.4.45 | MIT OR Apache-2.0 | https://github.com/chronotope/chrono | +| clipboard-win | 5.4.3 | BSL-1.0 | https://github.com/DoumanAsh/clipboard-win | +| codespan-reporting | 0.13.1 | Apache-2.0 | https://github.com/brendanzab/codespan | +| color | 0.3.3 | Apache-2.0 OR MIT | https://github.com/linebender/color | +| color_quant | 1.1.0 | MIT | https://github.com/image-rs/color_quant.git | +| combine | 4.6.9 | MIT | https://github.com/Marwes/combine | +| concurrent-queue | 2.5.0 | Apache-2.0 OR MIT | https://github.com/smol-rs/concurrent-queue | +| console_error_panic_hook | 0.1.7 | Apache-2.0/MIT | https://github.com/rustwasm/console_error_panic_hook | +| console_log | 1.1.0 | MIT/Apache-2.0 | https://github.com/iamcodemaker/console_log | +| const-oid | 0.10.2 | Apache-2.0 OR MIT | https://github.com/RustCrypto/formats | +| cookie | 0.18.2 | MIT OR Apache-2.0 | https://github.com/SergioBenitez/cookie-rs | +| cookie_store | 0.22.1 | MIT OR Apache-2.0 | https://github.com/pfernie/cookie_store | +| core-foundation | 0.9.4 | MIT OR Apache-2.0 | https://github.com/servo/core-foundation-rs | +| core-foundation-sys | 0.8.7 | MIT OR Apache-2.0 | https://github.com/servo/core-foundation-rs | +| core-graphics | 0.23.2 | MIT OR Apache-2.0 | https://github.com/servo/core-foundation-rs | +| core-graphics-types | 0.1.3 | MIT OR Apache-2.0 | https://github.com/servo/core-foundation-rs | +| crc32fast | 1.5.4 | MIT OR Apache-2.0 | https://github.com/srijs/rust-crc32fast | +| crossbeam-utils | 0.8.23 | MIT OR Apache-2.0 | https://github.com/crossbeam-rs/crossbeam | +| crunchy | 0.2.4 | MIT | https://github.com/eira-fransham/crunchy | +| crypto-common | 0.2.2 | MIT OR Apache-2.0 | https://github.com/RustCrypto/traits | +| cursor-icon | 1.2.0 | MIT OR Apache-2.0 OR Zlib | https://github.com/rust-windowing/cursor-icon | +| deranged | 0.5.9 | MIT OR Apache-2.0 | https://github.com/jhpratt/deranged | +| digest | 0.11.3 | MIT OR Apache-2.0 | https://github.com/RustCrypto/traits | +| dirs | 7.0.0 | MIT OR Apache-2.0 | https://codeberg.org/dirs/dirs-rs | +| dirs-sys | 0.5.0 | MIT OR Apache-2.0 | https://github.com/dirs-dev/dirs-sys-rs | +| dispatch | 0.2.0 | MIT | http://github.com/SSheldon/rust-dispatch | +| dispatch2 | 0.3.1 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| display-info | 0.5.10 | Apache-2.0 | https://github.com/nashaofu/display-info.git | +| displaydoc | 0.2.7 | MIT OR Apache-2.0 | https://github.com/yaahc/displaydoc | +| dlib | 0.5.3 | MIT | https://github.com/elinorbgr/dlib | +| document-features | 0.2.12 | MIT OR Apache-2.0 | https://github.com/slint-ui/document-features | +| downcast-rs | 1.2.1 | MIT/Apache-2.0 | https://github.com/marcianx/downcast-rs | +| dpi | 0.1.2 | Apache-2.0 AND MIT | https://github.com/rust-windowing/winit | +| ecolor | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui | +| eframe | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/eframe | +| egui | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui | +| egui-wgpu | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/egui-wgpu | +| egui-winit | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/egui-winit | +| egui_glow | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/egui_glow | +| egui_system_font_provider | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/egui_system_font_provider | +| either | 1.19.0 | MIT OR Apache-2.0 | https://github.com/rayon-rs/either | +| emath | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/emath | +| epaint | 0.37.0 | MIT OR Apache-2.0 | https://github.com/emilk/egui/tree/main/crates/epaint | +| epaint_default_fonts | 0.37.0 | (MIT OR Apache-2.0) AND OFL-1.1 AND Ubuntu-font-1.0 | https://github.com/emilk/egui/tree/main/crates/epaint_default_fonts | +| equivalent | 1.0.3 | Apache-2.0 OR MIT | https://github.com/indexmap-rs/equivalent | +| errno | 0.3.14 | MIT OR Apache-2.0 | https://github.com/lambda-fairy/rust-errno | +| error-code | 3.4.0 | BSL-1.0 | https://github.com/DoumanAsh/error-code | +| euclid | 0.22.14 | MIT OR Apache-2.0 | https://github.com/servo/euclid | +| fax | 0.2.7 | MIT | https://github.com/pdf-rs/fax | +| fdeflate | 0.3.7 | MIT OR Apache-2.0 | https://github.com/image-rs/fdeflate | +| fearless_simd | 0.4.1 | Apache-2.0 OR MIT | https://github.com/linebender/fearless_simd | +| fixedbitset | 0.5.7 | MIT OR Apache-2.0 | https://github.com/petgraph/fixedbitset | +| flate2 | 1.1.10 | MIT OR Apache-2.0 | https://github.com/rust-lang/flate2-rs | +| foldhash | 0.1.5 | Zlib | https://github.com/orlp/foldhash | +| foldhash | 0.2.0 | Zlib | https://github.com/orlp/foldhash | +| font-types | 0.12.7 | MIT OR Apache-2.0 | https://github.com/googlefonts/fontations | +| fontique | 0.11.1 | Apache-2.0 OR MIT | https://github.com/linebender/parley | +| foreign-types | 0.5.0 | MIT/Apache-2.0 | https://github.com/sfackler/foreign-types | +| foreign-types-macros | 0.2.4 | MIT/Apache-2.0 | https://github.com/sfackler/foreign-types | +| foreign-types-shared | 0.3.1 | MIT/Apache-2.0 | https://github.com/sfackler/foreign-types | +| form_urlencoded | 1.2.2 | MIT OR Apache-2.0 | https://github.com/servo/rust-url | +| futures-core | 0.3.34 | MIT OR Apache-2.0 | https://github.com/rust-lang/futures-rs | +| futures-task | 0.3.34 | MIT OR Apache-2.0 | https://github.com/rust-lang/futures-rs | +| futures-util | 0.3.34 | MIT OR Apache-2.0 | https://github.com/rust-lang/futures-rs | +| gethostname | 1.1.0 | Apache-2.0 | https://codeberg.org/swsnr/gethostname.rs.git | +| getrandom | 0.2.17 | MIT OR Apache-2.0 | https://github.com/rust-random/getrandom | +| getrandom | 0.3.4 | MIT OR Apache-2.0 | https://github.com/rust-random/getrandom | +| gif | 0.14.2 | MIT OR Apache-2.0 | https://github.com/image-rs/image-gif | +| glifo | 0.3.0 | Apache-2.0 OR MIT | https://github.com/linebender/vello | +| glow | 0.17.0 | MIT OR Apache-2.0 OR Zlib | https://github.com/grovesNL/glow | +| glutin | 0.32.3 | Apache-2.0 | https://github.com/rust-windowing/glutin | +| glutin-winit | 0.5.0 | MIT | https://github.com/rust-windowing/glutin | +| glutin_egl_sys | 0.7.1 | Apache-2.0 | https://github.com/rust-windowing/glutin | +| glutin_glx_sys | 0.6.1 | Apache-2.0 | https://github.com/rust-windowing/glutin | +| glutin_wgl_sys | 0.6.1 | Apache-2.0 | https://github.com/rust-windowing/glutin | +| guillotiere | 0.7.0 | MIT/Apache-2.0 | https://github.com/nical/guillotiere | +| half | 2.7.1 | MIT OR Apache-2.0 | https://github.com/VoidStarKat/half-rs | +| harfrust | 0.12.0 | MIT | https://github.com/harfbuzz/harfrust | +| hashbrown | 0.15.5 | MIT OR Apache-2.0 | https://github.com/rust-lang/hashbrown | +| hashbrown | 0.17.1 | MIT OR Apache-2.0 | https://github.com/rust-lang/hashbrown | +| hermit-abi | 0.5.3 | MIT OR Apache-2.0 | https://github.com/hermit-os/hermit-rs | +| http | 1.5.0 | MIT OR Apache-2.0 | https://github.com/hyperium/http | +| httparse | 1.10.1 | MIT OR Apache-2.0 | https://github.com/seanmonstar/httparse | +| hybrid-array | 0.4.15 | MIT OR Apache-2.0 | https://github.com/RustCrypto/hybrid-array | +| iana-time-zone | 0.1.65 | MIT OR Apache-2.0 | https://github.com/strawlab/iana-time-zone | +| iana-time-zone-haiku | 0.1.2 | MIT OR Apache-2.0 | https://github.com/strawlab/iana-time-zone | +| icu_collections | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| icu_locale_core | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| icu_normalizer | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| icu_normalizer_data | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| icu_properties | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| icu_properties_data | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| icu_provider | 2.4.0 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| idna | 1.1.0 | MIT OR Apache-2.0 | https://github.com/servo/rust-url/ | +| idna_adapter | 1.2.2 | Apache-2.0 OR MIT | https://github.com/hsivonen/idna_adapter | +| image | 0.25.10 | MIT OR Apache-2.0 | https://github.com/image-rs/image | +| indexmap | 2.14.2 | Apache-2.0 OR MIT | https://github.com/indexmap-rs/indexmap | +| itertools | 0.15.0 | MIT OR Apache-2.0 | https://github.com/rust-itertools/itertools | +| itoa | 1.0.18 | MIT OR Apache-2.0 | https://github.com/dtolnay/itoa | +| jni | 0.22.4 | MIT OR Apache-2.0 | https://github.com/jni-rs/jni-rs | +| jni-macros | 0.22.4 | MIT OR Apache-2.0 | https://github.com/jni-rs/jni-rs | +| jni-sys | 0.3.1 | MIT OR Apache-2.0 | https://github.com/jni-rs/jni-sys | +| jni-sys | 0.4.1 | MIT OR Apache-2.0 | https://github.com/jni-rs/jni-sys | +| jni-sys-macros | 0.4.1 | MIT OR Apache-2.0 | https://github.com/jni-rs/jni-sys | +| js-sys | 0.3.107 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/js-sys | +| kurbo | 0.13.1 | Apache-2.0 OR MIT | https://github.com/linebender/kurbo | +| libc | 0.2.191 | MIT OR Apache-2.0 | https://github.com/rust-lang/libc | +| libloading | 0.8.9 | ISC | https://github.com/nagisa/rust_libloading/ | +| libloading | 0.9.0 | ISC | https://github.com/nagisa/rust_libloading/ | +| libm | 0.2.16 | MIT | https://github.com/rust-lang/compiler-builtins | +| libredox | 0.1.25 | MIT | https://gitlab.redox-os.org/redox-os/libredox.git | +| linebender_resource_handle | 0.1.1 | Apache-2.0 OR MIT | https://github.com/linebender/raw_resource_handle | +| linux-raw-sys | 0.12.1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/sunfishcode/linux-raw-sys | +| linux-raw-sys | 0.4.15 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/sunfishcode/linux-raw-sys | +| litemap | 0.8.3 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| litrs | 1.0.1 | MIT OR Apache-2.0 | https://github.com/LukasKalbertodt/litrs | +| lock_api | 0.4.14 | MIT OR Apache-2.0 | https://github.com/Amanieu/parking_lot | +| log | 0.4.35 | MIT OR Apache-2.0 | https://github.com/rust-lang/log | +| maybe-owned | 0.3.4 | MIT OR Apache-2.0 | https://github.com/rustonaut/maybe-owned | +| md-5 | 0.11.0 | MIT OR Apache-2.0 | https://github.com/RustCrypto/hashes | +| memchr | 2.8.3 | Unlicense OR MIT | https://github.com/BurntSushi/memchr | +| memmap2 | 0.9.12 | MIT OR Apache-2.0 | https://github.com/RazrFalcon/memmap2-rs | +| miniz_oxide | 0.8.9 | MIT OR Zlib OR Apache-2.0 | https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide | +| miniz_oxide | 0.9.1 | MIT OR Zlib OR Apache-2.0 | https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide | +| moxcms | 0.8.1 | BSD-3-Clause OR Apache-2.0 | https://github.com/awxkee/moxcms.git | +| naga | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| naga-types | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| ndk | 0.9.0 | MIT OR Apache-2.0 | https://github.com/rust-mobile/ndk | +| ndk-context | 0.1.1 | MIT OR Apache-2.0 | https://github.com/rust-windowing/android-ndk-rs | +| ndk-sys | 0.6.0+11769913 | MIT OR Apache-2.0 | https://github.com/rust-mobile/ndk | +| nohash-hasher | 0.2.0 | Apache-2.0 OR MIT | https://github.com/paritytech/nohash-hasher | +| nom | 8.0.0 | MIT | https://github.com/rust-bakery/nom | +| num-conv | 0.2.2 | MIT OR Apache-2.0 | https://github.com/jhpratt/num-conv | +| num-traits | 0.2.19 | MIT OR Apache-2.0 | https://github.com/rust-num/num-traits | +| num_enum | 0.7.6 | BSD-3-Clause OR MIT OR Apache-2.0 | https://github.com/illicitonion/num_enum | +| num_enum_derive | 0.7.6 | BSD-3-Clause OR MIT OR Apache-2.0 | https://github.com/illicitonion/num_enum | +| objc-sys | 0.3.5 | MIT | https://github.com/madsmtm/objc2 | +| objc2 | 0.5.3 | MIT | https://github.com/madsmtm/objc2 | +| objc2 | 0.6.5 | MIT | https://github.com/madsmtm/objc2 | +| objc2-app-kit | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-app-kit | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-cloud-kit | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-cloud-kit | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-contacts | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-core-data | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-core-data | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-core-foundation | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-core-graphics | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-core-image | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-core-image | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-core-location | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-core-text | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-core-video | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-encode | 4.1.0 | MIT | https://github.com/madsmtm/objc2 | +| objc2-foundation | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-foundation | 0.3.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-io-surface | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-link-presentation | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-metal | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-metal | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-quartz-core | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-quartz-core | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-symbols | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-ui-kit | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-ui-kit | 0.3.2 | Zlib OR Apache-2.0 OR MIT | https://github.com/madsmtm/objc2 | +| objc2-uniform-type-identifiers | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| objc2-user-notifications | 0.2.2 | MIT | https://github.com/madsmtm/objc2 | +| once_cell | 1.21.4 | MIT OR Apache-2.0 | https://github.com/matklad/once_cell | +| option-ext | 0.2.0 | MPL-2.0 | https://github.com/soc/option-ext.git | +| orbclient | 0.3.55 | MIT | https://gitlab.redox-os.org/redox-os/orbclient | +| os_pipe | 1.2.3 | MIT | https://github.com/oconnor663/os_pipe.rs | +| parking_lot | 0.12.5 | MIT OR Apache-2.0 | https://github.com/Amanieu/parking_lot | +| parking_lot_core | 0.9.12 | MIT OR Apache-2.0 | https://github.com/Amanieu/parking_lot | +| parlance | 0.1.1 | Apache-2.0 OR MIT | https://github.com/linebender/parley | +| pdfium-render | 0.9.5 | MIT OR Apache-2.0 | https://github.com/ajrcarey/pdfium-render | +| peniko | 0.6.1 | Apache-2.0 OR MIT | https://github.com/linebender/peniko | +| percent-encoding | 2.3.2 | MIT OR Apache-2.0 | https://github.com/servo/rust-url/ | +| petgraph | 0.8.3 | MIT OR Apache-2.0 | https://github.com/petgraph/petgraph | +| pin-project | 1.1.13 | Apache-2.0 OR MIT | https://github.com/taiki-e/pin-project | +| pin-project-internal | 1.1.13 | Apache-2.0 OR MIT | https://github.com/taiki-e/pin-project | +| pin-project-lite | 0.2.17 | Apache-2.0 OR MIT | https://github.com/taiki-e/pin-project-lite | +| piston-float | 1.0.1 | MIT | https://github.com/pistondevelopers/float.git | +| plain | 0.2.3 | MIT/Apache-2.0 | https://github.com/randomites/plain | +| png | 0.18.1 | MIT OR Apache-2.0 | https://github.com/image-rs/image-png | +| poll-promise | 0.3.0 | MIT OR Apache-2.0 | https://github.com/EmbarkStudios/poll-promise | +| polling | 3.11.0 | Apache-2.0 OR MIT | https://github.com/smol-rs/polling | +| pollster | 0.4.0 | Apache-2.0/MIT | https://github.com/zesterer/pollster | +| polycool | 0.4.0 | MIT OR Apache-2.0 | https://github.com/linebender/kurbo | +| portable-atomic | 1.15.0 | Apache-2.0 OR MIT | https://github.com/taiki-e/portable-atomic | +| portable-atomic-util | 0.2.8 | Apache-2.0 OR MIT | https://github.com/taiki-e/portable-atomic-util | +| potential_utf | 0.1.6 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| powerfmt | 0.2.1 | MIT OR Apache-2.0 | https://github.com/jhpratt/powerfmt | +| proc-macro-crate | 3.5.0 | MIT OR Apache-2.0 | https://github.com/bkchr/proc-macro-crate | +| proc-macro2 | 1.0.107 | MIT OR Apache-2.0 | https://github.com/dtolnay/proc-macro2 | +| profiling | 1.0.18 | MIT OR Apache-2.0 | https://github.com/aclysma/profiling | +| pxfm | 0.1.30 | BSD-3-Clause OR Apache-2.0 | https://github.com/awxkee/pxfm | +| quick-error | 2.0.1 | MIT/Apache-2.0 | http://github.com/tailhook/quick-error | +| quick-xml | 0.41.0 | MIT | https://github.com/tafia/quick-xml | +| quote | 1.0.47 | MIT OR Apache-2.0 | https://github.com/dtolnay/quote | +| r-efi | 5.3.0 | MIT OR Apache-2.0 OR LGPL-2.1-or-later | https://github.com/r-efi/r-efi | +| raw-window-handle | 0.6.2 | MIT OR Apache-2.0 OR Zlib | https://github.com/rust-windowing/raw-window-handle | +| read-fonts | 0.41.0 | MIT OR Apache-2.0 | https://github.com/googlefonts/fontations | +| redox_syscall | 0.4.1 | MIT | https://gitlab.redox-os.org/redox-os/syscall | +| redox_syscall | 0.5.18 | MIT | https://gitlab.redox-os.org/redox-os/syscall | +| redox_syscall | 0.9.5 | MIT | https://gitlab.redox-os.org/redox-os/kernel | +| redox_users | 0.5.3 | MIT | https://gitlab.redox-os.org/redox-os/users | +| renderdoc-sys | 1.1.0 | MIT OR Apache-2.0 | https://github.com/ebkalderon/renderdoc-rs | +| rfd | 0.17.2 | MIT | https://github.com/PolyMeilex/rfd | +| ring | 0.17.14 | Apache-2.0 AND ISC | https://github.com/briansmith/ring | +| roxmltree | 0.21.2 | MIT OR Apache-2.0 | https://github.com/RazrFalcon/roxmltree | +| rustc-hash | 1.1.0 | Apache-2.0/MIT | https://github.com/rust-lang-nursery/rustc-hash | +| rustc-hash | 2.1.3 | Apache-2.0 OR MIT | https://github.com/rust-lang/rustc-hash | +| rustix | 0.38.44 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/bytecodealliance/rustix | +| rustix | 1.1.6 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/bytecodealliance/rustix | +| rustls | 0.23.46 | Apache-2.0 OR ISC OR MIT | https://github.com/rustls/rustls | +| rustls-pki-types | 1.15.1 | MIT OR Apache-2.0 | https://github.com/rustls/pki-types | +| rustls-webpki | 0.103.16 | ISC | https://github.com/rustls/webpki | +| rustversion | 1.0.23 | MIT OR Apache-2.0 | https://github.com/dtolnay/rustversion | +| scoped-tls | 1.0.1 | MIT/Apache-2.0 | https://github.com/alexcrichton/scoped-tls | +| scopeguard | 1.2.0 | MIT OR Apache-2.0 | https://github.com/bluss/scopeguard | +| self_cell | 1.3.0 | Apache-2.0 OR GPL-2.0-only | https://github.com/Voultapher/self_cell | +| send_wrapper | 0.6.0 | MIT/Apache-2.0 | https://github.com/thk1/send_wrapper | +| serde | 1.0.229 | MIT OR Apache-2.0 | https://github.com/serde-rs/serde | +| serde_core | 1.0.229 | MIT OR Apache-2.0 | https://github.com/serde-rs/serde | +| serde_derive | 1.0.229 | MIT OR Apache-2.0 | https://github.com/serde-rs/serde | +| serde_json | 1.0.154 | MIT OR Apache-2.0 | https://github.com/serde-rs/json | +| simd-adler32 | 0.3.10 | MIT | https://github.com/mcountryman/simd-adler32 | +| simd_cesu8 | 1.2.0 | Apache-2.0 OR MIT | https://github.com/seancroach/simd_cesu8 | +| simdutf8 | 0.1.5 | MIT OR Apache-2.0 | https://github.com/rusticstuff/simdutf8 | +| skrifa | 0.44.0 | MIT OR Apache-2.0 | https://github.com/googlefonts/fontations | +| slab | 0.4.12 | MIT | https://github.com/tokio-rs/slab | +| slotmap | 1.1.1 | Zlib | https://github.com/orlp/slotmap | +| smallvec | 1.16.4 | MIT OR Apache-2.0 | https://github.com/servo/rust-smallvec | +| smithay-client-toolkit | 0.19.2 | MIT | https://github.com/smithay/client-toolkit | +| smithay-client-toolkit | 0.20.0 | MIT | https://github.com/smithay/client-toolkit | +| smithay-clipboard | 0.7.3 | MIT | https://github.com/smithay/smithay-clipboard | +| smol_str | 0.2.2 | MIT OR Apache-2.0 | https://github.com/rust-analyzer/smol_str | +| stable_deref_trait | 1.2.1 | MIT OR Apache-2.0 | https://github.com/storyyeller/stable_deref_trait | +| static_assertions | 1.1.0 | MIT OR Apache-2.0 | https://github.com/nvzqz/static-assertions-rs | +| subtle | 2.6.1 | BSD-3-Clause | https://github.com/dalek-cryptography/subtle | +| syn | 2.0.119 | MIT OR Apache-2.0 | https://github.com/dtolnay/syn | +| syn | 3.0.9 | MIT OR Apache-2.0 | https://github.com/dtolnay/syn | +| synstructure | 0.14.0 | MIT | https://github.com/mystor/synstructure | +| sys-locale | 0.3.2 | MIT OR Apache-2.0 | https://github.com/1Password/sys-locale | +| thiserror | 1.0.69 | MIT OR Apache-2.0 | https://github.com/dtolnay/thiserror | +| thiserror | 2.0.21 | MIT OR Apache-2.0 | https://github.com/dtolnay/thiserror | +| thiserror-impl | 1.0.69 | MIT OR Apache-2.0 | https://github.com/dtolnay/thiserror | +| thiserror-impl | 2.0.21 | MIT OR Apache-2.0 | https://github.com/dtolnay/thiserror | +| tiff | 0.11.3 | MIT | https://github.com/image-rs/image-tiff | +| time | 0.3.55 | MIT OR Apache-2.0 | https://github.com/time-rs/time | +| time-core | 0.1.9 | MIT OR Apache-2.0 | https://github.com/time-rs/time | +| time-macros | 0.2.32 | MIT OR Apache-2.0 | https://github.com/time-rs/time | +| tinystr | 0.8.5 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| tokio | 1.54.1 | MIT | https://github.com/tokio-rs/tokio | +| toml_datetime | 1.1.2+spec-1.1.0 | MIT OR Apache-2.0 | https://github.com/toml-rs/toml | +| toml_edit | 0.25.17+spec-1.1.0 | MIT OR Apache-2.0 | https://github.com/toml-rs/toml | +| toml_parser | 1.1.5+spec-1.1.0 | MIT OR Apache-2.0 | https://github.com/toml-rs/toml | +| tracing | 0.1.44 | MIT | https://github.com/tokio-rs/tracing | +| tracing-core | 0.1.36 | MIT | https://github.com/tokio-rs/tracing | +| tree_magic_mini | 3.2.2 | MIT | https://github.com/mbrubeck/tree_magic/ | +| type-map | 0.5.1 | MIT/Apache-2.0 | https://github.com/kardeiz/type-map | +| typenum | 1.20.1 | MIT OR Apache-2.0 | https://github.com/paholg/typenum | +| unicode-bidi | 0.3.18 | MIT OR Apache-2.0 | https://github.com/servo/unicode-bidi | +| unicode-general-category | 1.1.0 | Apache-2.0 | https://github.com/yeslogic/unicode-general-category | +| unicode-ident | 1.0.27 | (MIT OR Apache-2.0) AND Unicode-3.0 | https://github.com/dtolnay/unicode-ident | +| unicode-properties | 0.1.5 | (MIT OR Apache-2.0) AND Unicode-3.0 | https://github.com/unicode-rs/unicode-properties | +| unicode-script | 0.5.9 | MIT OR Apache-2.0 | https://github.com/unicode-rs/unicode-script | +| unicode-segmentation | 1.13.3 | MIT OR Apache-2.0 | https://github.com/unicode-rs/unicode-segmentation | +| unicode-width | 0.2.3 | MIT OR Apache-2.0 | https://github.com/unicode-rs/unicode-width | +| untrusted | 0.9.0 | ISC | https://github.com/briansmith/untrusted | +| ureq | 3.5.0 | MIT OR Apache-2.0 | https://github.com/algesten/ureq | +| ureq-proto | 0.6.5 | MIT OR Apache-2.0 | https://github.com/algesten/ureq-proto | +| url | 2.5.8 | MIT OR Apache-2.0 | https://github.com/servo/rust-url | +| utf16string | 0.2.0 | MIT OR Apache-2.0 | https://github.com/getsentry/utf16string | +| utf8-zero | 0.8.1 | MIT OR Apache-2.0 | https://github.com/algesten/utf8-zero | +| utf8_iter | 1.1.0 | Apache-2.0 OR MIT | https://github.com/hsivonen/utf8_iter | +| utf_types | 1.0.0 | Apache-2.0 OR MIT | https://github.com/hsivonen/utf_types | +| uuid | 1.29.0 | Apache-2.0 OR MIT | https://github.com/uuid-rs/uuid | +| vecmath | 1.0.0 | MIT | https://github.com/pistondevelopers/vecmath.git | +| vello_common | 0.2.0 | Apache-2.0 OR MIT | https://github.com/linebender/vello | +| vello_cpu | 0.2.0 | Apache-2.0 OR MIT | https://github.com/linebender/vello | +| wasi | 0.11.1+wasi-snapshot-preview1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/bytecodealliance/wasi | +| wasip2 | 1.0.4+wasi-0.2.12 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/bytecodealliance/wasi-rs | +| wasm-bindgen | 0.2.130 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen | +| wasm-bindgen-futures | 0.4.80 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/futures | +| wasm-bindgen-macro | 0.2.130 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/macro | +| wasm-bindgen-macro-support | 0.2.130 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen/tree/main/crates/macro-support | +| wasm-bindgen-shared | 0.2.130 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/shared | +| wayland-backend | 0.3.17 | MIT | https://github.com/smithay/wayland-rs | +| wayland-client | 0.31.15 | MIT | https://github.com/smithay/wayland-rs | +| wayland-csd-frame | 0.3.0 | MIT | https://github.com/rust-windowing/wayland-csd-frame | +| wayland-cursor | 0.31.14 | MIT | https://github.com/smithay/wayland-rs | +| wayland-protocols | 0.32.13 | MIT | https://github.com/smithay/wayland-rs | +| wayland-protocols-experimental | 20250721.0.1 | MIT | https://github.com/smithay/wayland-rs | +| wayland-protocols-misc | 0.3.12 | MIT | https://github.com/smithay/wayland-rs | +| wayland-protocols-plasma | 0.3.12 | MIT | https://github.com/smithay/wayland-rs | +| wayland-protocols-wlr | 0.3.12 | MIT | https://github.com/smithay/wayland-rs | +| wayland-scanner | 0.31.11 | MIT | https://github.com/smithay/wayland-rs | +| wayland-sys | 0.31.11 | MIT | https://github.com/smithay/wayland-rs | +| web-sys | 0.3.107 | MIT OR Apache-2.0 | https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/web-sys | +| web-time | 1.1.0 | MIT OR Apache-2.0 | https://github.com/daxpedda/web-time | +| webbrowser | 1.2.6 | MIT OR Apache-2.0 | https://github.com/amodm/webbrowser-rs | +| webpki-roots | 1.0.11 | CDLA-Permissive-2.0 | https://github.com/rustls/webpki-roots | +| weezl | 0.1.12 | MIT OR Apache-2.0 | https://github.com/image-rs/weezl | +| wgpu | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| wgpu-core | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| wgpu-core-deps-windows-linux-android | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| wgpu-hal | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| wgpu-naga-bridge | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| wgpu-types | 30.0.1 | MIT OR Apache-2.0 | https://github.com/gfx-rs/wgpu | +| widestring | 1.2.1 | MIT OR Apache-2.0 | https://github.com/VoidStarKat/widestring-rs | +| windows | 0.62.2 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-collections | 0.3.2 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-core | 0.62.2 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-future | 0.3.2 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-implement | 0.60.2 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-interface | 0.59.3 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-link | 0.2.1 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-numerics | 0.3.1 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-result | 0.4.1 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-strings | 0.5.1 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-sys | 0.52.0 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-sys | 0.59.0 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-sys | 0.61.2 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-targets | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows-threading | 0.2.1 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_aarch64_gnullvm | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_aarch64_msvc | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_i686_gnu | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_i686_gnullvm | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_i686_msvc | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_x86_64_gnu | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_x86_64_gnullvm | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| windows_x86_64_msvc | 0.52.6 | MIT OR Apache-2.0 | https://github.com/microsoft/windows-rs | +| winit | 0.30.13 | Apache-2.0 | https://github.com/rust-windowing/winit | +| winnow | 1.0.4 | MIT | https://github.com/winnow-rs/winnow | +| wit-bindgen | 0.57.1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | https://github.com/bytecodealliance/wit-bindgen | +| wl-clipboard-rs | 0.9.5 | MIT OR Apache-2.0 | https://github.com/YaLTeR/wl-clipboard-rs | +| writeable | 0.6.4 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| x11-dl | 2.21.0 | MIT | https://github.com/AltF02/x11-rs.git | +| x11rb | 0.13.2 | MIT OR Apache-2.0 | https://github.com/psychon/x11rb | +| x11rb-protocol | 0.13.2 | MIT OR Apache-2.0 | https://github.com/psychon/x11rb | +| xcb | 1.7.1 | MIT | https://github.com/rust-x-bindings/rust-xcb | +| xcursor | 0.3.11 | MIT | https://github.com/esposm03/xcursor-rs | +| xkbcommon-dl | 0.4.2 | MIT | https://github.com/rust-windowing/xkbcommon-dl | +| xkeysym | 0.2.1 | MIT OR Apache-2.0 OR Zlib | https://github.com/notgull/xkeysym | +| yeslogic-fontconfig-sys | 6.0.1 | MIT | https://github.com/yeslogic/fontconfig-rs | +| yoke | 0.8.4 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| yoke-derive | 0.8.4 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| zerocopy | 0.8.63 | BSD-2-Clause OR Apache-2.0 OR MIT | https://github.com/google/zerocopy | +| zerocopy-derive | 0.8.63 | BSD-2-Clause OR Apache-2.0 OR MIT | https://github.com/google/zerocopy | +| zerofrom | 0.1.8 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| zerofrom-derive | 0.1.8 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| zeroize | 1.9.1 | Apache-2.0 OR MIT | https://github.com/RustCrypto/utils | +| zerotrie | 0.2.5 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| zerovec | 0.11.9 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| zerovec-derive | 0.11.7 | Unicode-3.0 | https://github.com/unicode-org/icu4x | +| zlib-rs | 0.6.8 | Zlib | https://github.com/trifectatechfoundation/zlib-rs | +| zmij | 1.0.23 | MIT | https://github.com/dtolnay/zmij | +| zune-core | 0.5.3 | MIT OR Apache-2.0 OR Zlib | https://github.com/etemesi254/zune-image | +| zune-jpeg | 0.5.15 | MIT OR Apache-2.0 OR Zlib | https://github.com/etemesi254/zune-image/tree/dev/crates/zune-jpeg | diff --git a/assets/guide.md b/assets/guide.md index 8b2ca4a..efdcdb8 100644 --- a/assets/guide.md +++ b/assets/guide.md @@ -2,7 +2,7 @@ To use TeXora from a terminal, choose **? > Command-line tool**. To see what this computer has for TeXora, choose **? > System check**. -Open a PDF or a LaTeX file from the start page, or drop one on the window. Choose **New LaTeX presentation** to pick one of eight templates, each with its own colours and style: Classic Green, Midnight, Minimal White, Conference and Sunrise, and three animated ones, Motion Lab, Flipbook and Media Studio, whose slides show animations, GIF frames and a video clip playing. Write your presentation in your own LaTeX editor: TeXora rebuilds the slides every time you save it. Recent files stay on the start page. +Open a PDF or a LaTeX file from the start page, or drop one on the window. Choose **New LaTeX presentation** to pick one of nine templates, each with its own colours and style: Classic Green, Midnight, Minimal White, Conference and Sunrise, and four animated ones, Motion Lab, Flipbook, Media Studio and Video Guide, whose slides show animations, GIF frames and video clips playing. **Video Guide** explains `\includevideo` slide by slide, with a video and a GIF that play inside the slides. Write your presentation in your own LaTeX editor: TeXora rebuilds the slides every time you save it. Recent files stay on the start page. ## Giving a talk @@ -85,6 +85,8 @@ TeXora needs TeX Live, MacTeX or MiKTeX installed to compile. It picks pdfLaTeX, Animations made with the LaTeX **animate** package play on the slide, as in Adobe Acrobat. Those set to `autoplay` start when their slide is shown and stop when you move on; `loop` and `palindrome` work too, at the animation's own speed. Click an animation to play or pause it. In the presenter view, the bar under it has first, previous, play/pause, next and last frame buttons, and the audience sees the same frame. +Videos and GIFs can also play **inside the slide**. GIFs play by themselves; **MP4 playback uses VLC or ffmpeg installed on your computer** (ffmpeg plays inside the slide, VLC in its own window; choose in Settings > Video, which has a Test button). TeXora contains no video decoder and never installs one; when a video needs a player and none is found, it says so, with Get VLC, Get ffmpeg and Copy install command. Write `\usepackage{texoravideo}` and `\includevideo[width=0.5\textwidth]{clip.mp4}` (TeXora finds the package by itself). A second optional argument takes `autoplay`, `loop`, `posterat=25` or `poster=cover.png`. The video must be in the `.tex` file's folder or a folder inside it; if it is in a folder, write the folder name too, as in `{videos/clip.mp4}`. When compiling, TeXora makes one poster per video in a `texora-video` folder, so every PDF viewer shows the poster; in TeXora a click plays or pauses the clip and another slide stops it. Files that are not videos, files outside the presentation's folder, and videos not found show a message over the poster. + Video clips added with `\movie` (multimedia) or `\includemedia` (media9) show a play button on your screen. Click the clip to play it in your computer's video player; clips set to start by themselves open when their slide is shown while the audience window is open. Keep a `\movie` file in the same folder as the presentation. ## After the talk diff --git a/assets/templates/video-1.png b/assets/templates/video-1.png new file mode 100644 index 0000000..129dc1a Binary files /dev/null and b/assets/templates/video-1.png differ diff --git a/assets/templates/video-5.png b/assets/templates/video-5.png new file mode 100644 index 0000000..a3bf37c Binary files /dev/null and b/assets/templates/video-5.png differ diff --git a/assets/templates/video.tex b/assets/templates/video.tex new file mode 100644 index 0000000..076f5a2 --- /dev/null +++ b/assets/templates/video.tex @@ -0,0 +1,273 @@ +%% TeXora template: Video Guide. Navy and gold 16:9 slides that show, and explain, videos and GIFs +%% playing inside the slides. +%% +%% What you need: +%% - TeXora. The texoravideo package is built in: TeXora finds it by itself when it compiles, so +%% there is no package to install or copy. +%% - For MP4 and other videos: VLC or ffmpeg installed on your computer. MP4 playback uses VLC or +%% ffmpeg installed on your computer (ffmpeg plays inside the slide and makes posters; VLC plays +%% in its own window). GIFs need nothing. TeXora contains no video decoder. +%% - In the preamble: \usepackage{texoravideo} and \hypersetup{hidelinks} +%% - Your clips: video files (such as MP4) or GIFs, kept in one of two places: +%% in the same folder as this .tex file, or in a folder inside it (any name). +%% If the clip is in a folder, write the folder name too: {media/clip.mp4}, {videos/clip.mp4}. +%% This template brings two, in its media folder: media/sample-video.mp4 and media/sample-loop.gif. +%% - If a clip is in neither place, TeXora says so over its poster and under Problems. +%% +%% Use: \includevideo[][