# Changelog Source: https://mkbrr.com/changelog Latest updates and improvements to mkbrr ### Bug fixes * [f32da2a](https://github.com/autobrr/mkbrr/commit/f32da2a258b4acd048d631c3bb656fadd68084c1): Normalize decomposed filenames to NFC ([#183](https://github.com/autobrr/mkbrr/pull/183)) (@s0up4200) ### Other work * [786882e](https://github.com/autobrr/mkbrr/commit/786882e3f13607b4aeb635aa2a54cd2c26330bcb): Bump the github group with 2 updates ([#178](https://github.com/autobrr/mkbrr/pull/178)) (@dependabot\[bot]) * [cc3d21d](https://github.com/autobrr/mkbrr/commit/cc3d21d9c2e9705fc0de89ad001079beaa5834da): Bump Go to 1.26 ([#180](https://github.com/autobrr/mkbrr/pull/180)) (@s0up4200) * [f3f9c1f](https://github.com/autobrr/mkbrr/commit/f3f9c1f2cecc64d4577f2684ea7daa55daaaa6e7): Migrate anacrolix/torrent to autobrr/go-torrent ([#181](https://github.com/autobrr/mkbrr/pull/181)) (@zze0s) **Full Changelog**: [v1.24.0...v1.24.1](https://github.com/autobrr/mkbrr/compare/v1.24.0...v1.24.1) ### Contributors * @dependabot\[bot] * @s0up4200 * @zze0s ### New Features * [299a21d](https://github.com/autobrr/mkbrr/commit/299a21d2a9cb72cace80db169934cf1128786cdf): Add drag and drop support ([#169](https://github.com/autobrr/mkbrr/pull/169)) (@gl0ryus) ### Bug fixes * [b94721d](https://github.com/autobrr/mkbrr/commit/b94721d60b63539af171ce27652d47bba66440ae): Prevent blank screen in GUI when all presets are deleted ([#168](https://github.com/autobrr/mkbrr/pull/168)) (@gl0ryus) * [156c996](https://github.com/autobrr/mkbrr/commit/156c996fc6f4316b650233ecbd2acfdb0e7f98ef): Harden GUI against blank-screen render crashes ([#170](https://github.com/autobrr/mkbrr/pull/170)) (@s0up4200) * [c32116d](https://github.com/autobrr/mkbrr/commit/c32116d3fcd51a2347b815814add80e40571e6f5): Add missing skip\_prefix and fail\_on\_season\_warning to batch schema ([#171](https://github.com/autobrr/mkbrr/pull/171)) (@s0up4200) * [2cf20a4](https://github.com/autobrr/mkbrr/commit/2cf20a46374c328a4bb2324f0f5852240081cd8c): Allow workers 0 (auto) and up to 64 to match CLI ([#176](https://github.com/autobrr/mkbrr/pull/176)) (@s0up4200) ### Other work * [5b24d79](https://github.com/autobrr/mkbrr/commit/5b24d79a315774392a22ef68b65b2efcbd10432d): Bump the github group with 4 updates ([#167](https://github.com/autobrr/mkbrr/pull/167)) (@dependabot\[bot]) * [35daa3a](https://github.com/autobrr/mkbrr/commit/35daa3afeeb4866915857dd952b092f288b8d22b): Bump actions/checkout from 6 to 7 in the github group ([#172](https://github.com/autobrr/mkbrr/pull/172)) (@dependabot\[bot]) * [b038989](https://github.com/autobrr/mkbrr/commit/b038989e47a3c7bf13cfe58dd1783352b4087ecd): Bump github.com/schollz/progressbar/v3 from 3.19.0 to 3.19.1 in the golang group ([#174](https://github.com/autobrr/mkbrr/pull/174)) (@dependabot\[bot]) **Full Changelog**: [v1.23.0...v1.24.0](https://github.com/autobrr/mkbrr/compare/v1.23.0...v1.24.0) ### Contributors * @dependabot\[bot] * @gl0ryus * @s0up4200 ### New Features * [d89efe2](https://github.com/autobrr/mkbrr/commit/d89efe2c5c500eecb78d9dd1f49ffbfb4923fa94): Add cross-platform desktop GUI using Wails ([#165](https://github.com/autobrr/mkbrr/pull/165)) (@sammy44nts) ### Other work * [1f9149e](https://github.com/autobrr/mkbrr/commit/1f9149eb005382b715954214abebb26beb382dfd): Bump actions/checkout from 4 to 6 in the github group across 1 directory ([#160](https://github.com/autobrr/mkbrr/pull/160)) (@dependabot\[bot]) * [d93e9cb](https://github.com/autobrr/mkbrr/commit/d93e9cbf43119f5c86f674f06475d074c0773204): Streamline hashing and verification hot paths ([#164](https://github.com/autobrr/mkbrr/pull/164)) (@s0up4200) **Full Changelog**: [v1.22.0...v1.23.0](https://github.com/autobrr/mkbrr/compare/v1.22.0...v1.23.0) ### Contributors * @dependabot\[bot] * @sammy44nts * @s0up4200 ### New Features * [3f6f53e](https://github.com/autobrr/mkbrr/commit/3f6f53e2d636a64ee639a82241fe0b7585318db7): Update Aither piece size ranges ([#162](https://github.com/autobrr/mkbrr/pull/162)) (@spin-drift) ### Bug fixes * [b16fb13](https://github.com/autobrr/mkbrr/commit/b16fb1312a64a97ce10f74b0f9bc654d9797c581): Increase TorrentLeech max piece length from 2^24 to 2^27 ([#161](https://github.com/autobrr/mkbrr/pull/161)) (@s0up4200) **Full Changelog**: [v1.21.0...v1.22.0](https://github.com/autobrr/mkbrr/compare/v1.21.0...v1.22.0) ### Contributors * @spin-drift * @s0up4200 ### New Features * [9326b63](https://github.com/autobrr/mkbrr/commit/9326b63e07968744924eeb6d83df15cb421233df): Add name argument ([#141](https://github.com/autobrr/mkbrr/pull/141)) (@illutr0n) * [89779bf](https://github.com/autobrr/mkbrr/commit/89779bf4de4edf7bf77a782c1beb1a712335af41): Add onlyencodes piece rules ([#150](https://github.com/autobrr/mkbrr/pull/150)) (@s0up4200) * [34c8312](https://github.com/autobrr/mkbrr/commit/34c8312bb311b90e3dbad9e86969317e4a9311b2): Support path-based glob patterns ([#147](https://github.com/autobrr/mkbrr/pull/147)) (@tetrahydroc) * [1c5affa](https://github.com/autobrr/mkbrr/commit/1c5affaa37f1899d3a3ae58a02d5e04e52e6861b): Add ability to remove private/source/comment fields ([#153](https://github.com/autobrr/mkbrr/pull/153)) (@s0up4200) * [34606fc](https://github.com/autobrr/mkbrr/commit/34606fcaa5734e9c3d3e4d478245f1a641750a45): Add --target-piece-count option ([#156](https://github.com/autobrr/mkbrr/pull/156)) (@s0up4200) ### Bug fixes * [62b1596](https://github.com/autobrr/mkbrr/commit/62b1596ec979e46d98ea886969f288eef33d4204): Use non-deprecated formats syntax in archives (@s0up4200) * [cd5ba11](https://github.com/autobrr/mkbrr/commit/cd5ba11bea7830391afc85ab8613c1aa2c459e53): Apply entropy option from preset during modify ([#151](https://github.com/autobrr/mkbrr/pull/151)) (@s0up4200) * [5466955](https://github.com/autobrr/mkbrr/commit/5466955518d832a8e17cc3b0699cf97c6d88682f): Add entropy support to batch mode ([#152](https://github.com/autobrr/mkbrr/pull/152)) (@s0up4200) * [3ad0aee](https://github.com/autobrr/mkbrr/commit/3ad0aee53e88da0f03ab35637cfcf097818a9747): Use torrent-level byte offsets for multi-file verification ([#154](https://github.com/autobrr/mkbrr/pull/154)) (@s0up4200) * [b9c78e1](https://github.com/autobrr/mkbrr/commit/b9c78e134d74ca4ad0cfa179270f329c3178efbc): Remove self-managed homebrew tap ([#157](https://github.com/autobrr/mkbrr/pull/157)) (@s0up4200) ### Other work * [9f5cd2f](https://github.com/autobrr/mkbrr/commit/9f5cd2f54e66eaa35c6c960249e8867e3b4f4378): Add .pre-commit-config.yaml for code quality checks and update .gitignore to include .envrc (@s0up4200) * [4a5481b](https://github.com/autobrr/mkbrr/commit/4a5481b860d75da35c23647740c524d0e86cdd55): Bump the github group with 2 updates ([#129](https://github.com/autobrr/mkbrr/pull/129)) (@dependabot\[bot]) * [1e167db](https://github.com/autobrr/mkbrr/commit/1e167dbf0b241998d6d695bd937e91e244cbcd23): Bump the golang group with 4 updates ([#130](https://github.com/autobrr/mkbrr/pull/130)) (@dependabot\[bot]) * [6e8c93c](https://github.com/autobrr/mkbrr/commit/6e8c93c6cb6052fe35a1b398f52f4a5567f532bb): Include Buy Me a Coffee and Ko-fi links (@s0up4200) * [79cef17](https://github.com/autobrr/mkbrr/commit/79cef171b91d26965fce16181a59f91f398e0baa): Replace custom min/max with go1.21+ native builtins ([#142](https://github.com/autobrr/mkbrr/pull/142)) (@fabricionaweb) * [ad74e56](https://github.com/autobrr/mkbrr/commit/ad74e5652ecd9c011f50717aa73cfccf3930cba5): Bump the github group with 3 updates ([#143](https://github.com/autobrr/mkbrr/pull/143)) (@dependabot\[bot]) * [7d59bca](https://github.com/autobrr/mkbrr/commit/7d59bca59d0e8eadebf709165bbde508ed3d46e1): Bump github.com/anacrolix/torrent in the golang group ([#144](https://github.com/autobrr/mkbrr/pull/144)) (@dependabot\[bot]) * [b46ed88](https://github.com/autobrr/mkbrr/commit/b46ed882ce308cbee8790ed746a7bd090259f193): Add new tracker configuration for torrentleech.org ([#139](https://github.com/autobrr/mkbrr/pull/139)) (@illutr0n) * [c3ac2c5](https://github.com/autobrr/mkbrr/commit/c3ac2c5f3ad7c38870da872b7015140dd72cf222): Bump the github group with 5 updates ([#145](https://github.com/autobrr/mkbrr/pull/145)) (@dependabot\[bot]) * [a06c966](https://github.com/autobrr/mkbrr/commit/a06c9661f1416f48917d6ffa1c363d50f008638b): Update installation instructions for Homebrew ([#146](https://github.com/autobrr/mkbrr/pull/146)) (@chrisfinazzo) * [61efa7d](https://github.com/autobrr/mkbrr/commit/61efa7d15a23dce3ec02859b9c37f8dc309fdf44): Bump github.com/fatih/color from 1.18.0 to 1.19.0 in the golang group ([#155](https://github.com/autobrr/mkbrr/pull/155)) (@dependabot\[bot]) * [4c952ed](https://github.com/autobrr/mkbrr/commit/4c952ed23a00726294212a3a1cafb8b1542fd88a): Add Claude Code GitHub Workflow ([#158](https://github.com/autobrr/mkbrr/pull/158)) (@s0up4200) **Full Changelog**: [v1.20.0...v1.21.0](https://github.com/autobrr/mkbrr/compare/v1.20.0...v1.21.0) ### Contributors * @s0up4200 * @dependabot\[bot] * @fabricionaweb * @illutr0n * @chrisfinazzo * @tetrahydroc ### New Features * [2528c79](https://github.com/autobrr/mkbrr/commit/2528c79d20457df94e02a713f4a8251592758954): Add homebrew formula generation to goreleaser ([#135](https://github.com/autobrr/mkbrr/pull/135)) (@s0up4200) ### Bug fixes * [dc7cb4c](https://github.com/autobrr/mkbrr/commit/dc7cb4c3ce0b76c9c64190221ce6ef2d9bb0d6ba): Use HOMEBREW\_TAP\_GITHUB\_TOKEN for tap access (@s0up4200) * [e37bab6](https://github.com/autobrr/mkbrr/commit/e37bab634faa07106a24e1e29e8d995804de7d14): Pass HOMEBREW\_TAP\_GITHUB\_TOKEN to goreleaser (@s0up4200) **Full Changelog**: [v1.19.0...v1.20.0](https://github.com/autobrr/mkbrr/compare/v1.19.0...v1.20.0) ### Contributors * @s0up4200 ### New Features * [577f795](https://github.com/autobrr/mkbrr/commit/577f795867616b0230224cdc3499c2f562b3acd7): Show magnet link in inspect output ([#120](https://github.com/autobrr/mkbrr/pull/120)) (@IonBazan) ### Other work * [43ba795](https://github.com/autobrr/mkbrr/commit/43ba795d7ce97f47f4480a857ffc77cf497b9d25): Use separate tiers for multiple trackers ([#124](https://github.com/autobrr/mkbrr/pull/124)) (@s0up4200) * [9ce168b](https://github.com/autobrr/mkbrr/commit/9ce168bdf9875449e4bcd2c073c45f841c9b2769): Bump actions/checkout from 5 to 6 in the github group ([#125](https://github.com/autobrr/mkbrr/pull/125)) (@dependabot\[bot]) **Full Changelog**: [v1.18.0...v1.19.0](https://github.com/autobrr/mkbrr/compare/v1.18.0...v1.19.0) ### Contributors * @IonBazan * @s0up4200 * @dependabot\[bot] ### Bug fixes * [c336c1d](https://github.com/autobrr/mkbrr/commit/c336c1d7c7aed00826c75b1089ee1c0e3dd40eb2): Ignore synology metadata directories ([#122](https://github.com/autobrr/mkbrr/pull/122)) (@s0up4200) ### Other work * [c73d213](https://github.com/autobrr/mkbrr/commit/c73d213ecb942b09fdbf84877104548888cc2ba6): Bump the github group with 2 updates ([#121](https://github.com/autobrr/mkbrr/pull/121)) (@dependabot\[bot]) * [0d83712](https://github.com/autobrr/mkbrr/commit/0d8371230ad262891a4bd8690f83de60a5221e62): Update funding information in FUNDING.yml (@s0up4200) **Full Changelog**: [v1.17.0...v1.18.0](https://github.com/autobrr/mkbrr/compare/v1.17.0...v1.18.0) ### Contributors * @dependabot\[bot] * @s0up4200 ### Bug fixes * [d7872be](https://github.com/autobrr/mkbrr/commit/d7872be8d441547b34a2f6a82379e3c940d2a745): Set default workers in profile ([#119](https://github.com/autobrr/mkbrr/pull/119)) (@IonBazan) ### Other work * [98ae784](https://github.com/autobrr/mkbrr/commit/98ae78468068071360c6e485e49ec5c3df724d5c): Update types.go (@s0up4200) * [e26ee58](https://github.com/autobrr/mkbrr/commit/e26ee58151cbd226be8072e9da7118d9c12aee50): Bump actions/setup-go from 5 to 6 in the github group ([#110](https://github.com/autobrr/mkbrr/pull/110)) (@dependabot\[bot]) * [bebfd8c](https://github.com/autobrr/mkbrr/commit/bebfd8c5a96b5ca9e51c443e90dbdad349da0760): Allow inspecting multiple torrent files ([#118](https://github.com/autobrr/mkbrr/pull/118)) (@IonBazan) * [a1e30b5](https://github.com/autobrr/mkbrr/commit/a1e30b583a873d2e9c46eb8a4529613644505a47): Do not create announce list for single tracker ([#117](https://github.com/autobrr/mkbrr/pull/117)) (@IonBazan) * [4381d8d](https://github.com/autobrr/mkbrr/commit/4381d8de1568d8fbcfb99ef2d21641f385736c45): Update to Go 1.25 ([#109](https://github.com/autobrr/mkbrr/pull/109)) (@s0up4200) * [59b6edc](https://github.com/autobrr/mkbrr/commit/59b6edce60f5d1ded2b9faf47a841656c74d4414): Bump the golang group across 1 directory with 4 updates ([#113](https://github.com/autobrr/mkbrr/pull/113)) (@dependabot\[bot]) **Full Changelog**: [v1.16.0...v1.17.0](https://github.com/autobrr/mkbrr/compare/v1.16.0...v1.17.0) ### Contributors * @s0up4200 * @dependabot\[bot] * @IonBazan ### New Features * [814682d](https://github.com/autobrr/mkbrr/commit/814682d95592203842db63155561ded9af514a21): Add sources and more trackers ([#107](https://github.com/autobrr/mkbrr/pull/107)) (@fabricionaweb) * [0df5fee](https://github.com/autobrr/mkbrr/commit/0df5fee3f525ecfa962aa6e96a46b8fa9c898095): Make mkbrr usable as Go library ([#111](https://github.com/autobrr/mkbrr/pull/111)) (@s0up4200) ### Other work * [0d5983d](https://github.com/autobrr/mkbrr/commit/0d5983d1e2c668556b1d9103c17fbf194069fbf8): Bump the github group across 1 directory with 2 updates ([#106](https://github.com/autobrr/mkbrr/pull/106)) (@dependabot\[bot]) **Full Changelog**: [v1.15.0...v1.16.0](https://github.com/autobrr/mkbrr/compare/v1.15.0...v1.16.0) ### Contributors * @dependabot\[bot] * @fabricionaweb * @s0up4200 ### New Features * [448873b](https://github.com/autobrr/mkbrr/commit/448873b3e028227205f4bfd9162b14726543ad02): Add -q shortcut and --info-only flag ([#102](https://github.com/autobrr/mkbrr/pull/102)) (@s0up4200) **Full Changelog**: [v1.14.0...v1.15.0](https://github.com/autobrr/mkbrr/compare/v1.14.0...v1.15.0) ### Contributors * @s0up4200 ### New Features * [a737bdc](https://github.com/autobrr/mkbrr/commit/a737bdc86c7167358422ad4de1a7bf247afef90a): Add multiple tracker support to create command ([#99](https://github.com/autobrr/mkbrr/pull/99)) (@s0up4200) ### Bug fixes * [15e50d1](https://github.com/autobrr/mkbrr/commit/15e50d183e5e76f3dc33a2867d589b9746806d49): Season pack detection for single episodes and file tree display ([#100](https://github.com/autobrr/mkbrr/pull/100)) (@s0up4200) **Full Changelog**: [v1.13.1...v1.14.0](https://github.com/autobrr/mkbrr/compare/v1.13.1...v1.14.0) ### Contributors * @s0up4200 ### Bug fixes * [f8c455c](https://github.com/autobrr/mkbrr/commit/f8c455cc33735e4b5d33a9a6f0807c22cc86194a): Accurate duration display without rounding ([#96](https://github.com/autobrr/mkbrr/pull/96)) (@s0up4200) **Full Changelog**: [v1.13.0...v1.13.1](https://github.com/autobrr/mkbrr/compare/v1.13.0...v1.13.1) ### Contributors * @s0up4200 ### New Features * [a4e362f](https://github.com/autobrr/mkbrr/commit/a4e362f1ce1558d67987ba54a01ae527d18fe858): Add fail-on-season-warning flag ([#94](https://github.com/autobrr/mkbrr/pull/94)) (@s0up4200) **Full Changelog**: [v1.12.1...v1.13.0](https://github.com/autobrr/mkbrr/compare/v1.12.1...v1.13.0) ### Contributors * @s0up4200 ### Bug fixes * [fb4f8b9](https://github.com/autobrr/mkbrr/commit/fb4f8b9c54702e5e2b68a193363a18df8a47f36c): Multiple trackers cannot be added ([#93](https://github.com/autobrr/mkbrr/pull/93)) (@luckylittle) **Full Changelog**: [v1.12.0...v1.12.1](https://github.com/autobrr/mkbrr/compare/v1.12.0...v1.12.1) ### Contributors * @luckylittle ### New Features * [ebc5e05](https://github.com/autobrr/mkbrr/commit/ebc5e054cfd76fb87075c315206ff2c6971cd4a7): Add AlphaRatio ([#90](https://github.com/autobrr/mkbrr/pull/90)) (@s0up4200) * [18b5884](https://github.com/autobrr/mkbrr/commit/18b58846c7d408a291efa85e2c52c0f4cba644c2): Add output directory support to preset ([#91](https://github.com/autobrr/mkbrr/pull/91)) (@s0up4200) ### Other work * [2dcfdbe](https://github.com/autobrr/mkbrr/commit/2dcfdbe5b542d722f8d52f184edaa5ab6e2c52aa): Upgrade Go to v1.24 ([#88](https://github.com/autobrr/mkbrr/pull/88)) (@s0up4200) **Full Changelog**: [v1.11.0...v1.12.0](https://github.com/autobrr/mkbrr/compare/v1.11.0...v1.12.0) ### Contributors * @s0up4200 ### New Features * [4fc96e4](https://github.com/autobrr/mkbrr/commit/4fc96e41b0b8d8147e8864b5b76232582e672063): Add --output-dir flag ([#86](https://github.com/autobrr/mkbrr/pull/86)) (@s0up4200) * [bed4819](https://github.com/autobrr/mkbrr/commit/bed4819b76e4898f43de149d9bb29867dbd19e90): Use metadata title for output name ([#87](https://github.com/autobrr/mkbrr/pull/87)) (@s0up4200) * [c790990](https://github.com/autobrr/mkbrr/commit/c7909904f7669451cbc7ac001f6d7e19e67c0141): Add Docker builds ([#85](https://github.com/autobrr/mkbrr/pull/85)) (@s0up4200) ### Other work * [53516c1](https://github.com/autobrr/mkbrr/commit/53516c1be81eaacb2f40752febfe5ad42548c0e0): Bump github.com/creativeprojects/go-selfupdate ([#83](https://github.com/autobrr/mkbrr/pull/83)) (@dependabot\[bot]) **Full Changelog**: [v1.10.0...v1.11.0](https://github.com/autobrr/mkbrr/compare/v1.10.0...v1.11.0) ### Contributors * @dependabot\[bot] * @s0up4200 ### New Features * [1683103](https://github.com/autobrr/mkbrr/commit/1683103d0b72e207b1194c34c70100d47bc32bda): Add workers flag ([#74](https://github.com/autobrr/mkbrr/pull/74)) (@s0up4200) * [9a5a850](https://github.com/autobrr/mkbrr/commit/9a5a850f4d0f5985ba4c5444025b0ffa9d4bc668): Add default source setting ([#82](https://github.com/autobrr/mkbrr/pull/82)) (@s0up4200) ### Bug fixes * [b73489e](https://github.com/autobrr/mkbrr/commit/b73489e60e9ac25d89bd88e2f3c29e6cc29bd287): Prevent filename collisions ([#76](https://github.com/autobrr/mkbrr/pull/76)) (@s0up4200) * [12e674b](https://github.com/autobrr/mkbrr/commit/12e674b4a9adbc67208dae4437413685ae72a99a): Remove unnecessary season pack suspicion check ([#80](https://github.com/autobrr/mkbrr/pull/80)) (@s0up4200) ### Other work * [a9be98f](https://github.com/autobrr/mkbrr/commit/a9be98f801e0db0e858f3f27e05a0db492983984): Update documentation ([#75](https://github.com/autobrr/mkbrr/pull/75)) (@s0up4200) * [51fbe55](https://github.com/autobrr/mkbrr/commit/51fbe55b880c6e31e8ee8ebb2b4c6a610e722cee): Other(makefile): add PGO installation target (@s0up4200) * [ac76819](https://github.com/autobrr/mkbrr/commit/ac7681960f1b9225c37a014c401454d6707c850e): Helper functions and structs ([#77](https://github.com/autobrr/mkbrr/pull/77)) (@s0up4200) **Full Changelog**: [v1.9.0...v1.10.0](https://github.com/autobrr/mkbrr/compare/v1.9.0...v1.10.0) ### Contributors * @s0up4200 ### New Features * [f932554](https://github.com/autobrr/mkbrr/commit/f932554137aa29a033b8765ccee98d601f4cfe00): Struct alignment with betteralign ([#69](https://github.com/autobrr/mkbrr/pull/69)) (@s0up4200) * [4333558](https://github.com/autobrr/mkbrr/commit/4333558493f88bb575ef21763663691167d58c1a): Add zone.identifier to patterns ([#70](https://github.com/autobrr/mkbrr/pull/70)) (@s0up4200) * [fb9a2c4](https://github.com/autobrr/mkbrr/commit/fb9a2c484681589930ea26d678b918011e2288d6): Add seedpool ([#71](https://github.com/autobrr/mkbrr/pull/71)) (@s0up4200) * [788fff5](https://github.com/autobrr/mkbrr/commit/788fff5e755eaa12c6812f0322aac7ebcecb8237): Support entropy flag in presets ([#72](https://github.com/autobrr/mkbrr/pull/72)) (@s0up4200) ### Bug fixes * [301128b](https://github.com/autobrr/mkbrr/commit/301128b112cbe3d84420588aae8f9513d7db26d8): Entropy flag when not using preset ([#73](https://github.com/autobrr/mkbrr/pull/73)) (@s0up4200) * [7ed87de](https://github.com/autobrr/mkbrr/commit/7ed87deeaa480456f35713d9db6af60e25ad6730): Only display file tree if verbose (@s0up4200) * [ba56ae3](https://github.com/autobrr/mkbrr/commit/ba56ae3dc9eae1bae956316b1eefbff7a8c19ebc): Suppress files when over limit (@s0up4200) * [217f128](https://github.com/autobrr/mkbrr/commit/217f1286e4e0043f71afd7be967ce3a8f0cdf004): Show top directory for file listings (@s0up4200) ### Other work * [8dbb299](https://github.com/autobrr/mkbrr/commit/8dbb299ce65841c1cfb1e7c53919e29c31144757): Set file tree to verbose only ([#68](https://github.com/autobrr/mkbrr/pull/68)) (@s0up4200) **Full Changelog**: [v1.8.1...v1.9.0](https://github.com/autobrr/mkbrr/compare/v1.8.1...v1.9.0) ### Contributors * @s0up4200 ### Bug fixes * [595c76d](https://github.com/autobrr/mkbrr/commit/595c76dc2661f8fe00434c462c8218ad47263335): Recalculate file offsets after sorting ([#65](https://github.com/autobrr/mkbrr/pull/65)) (@s0up4200) * [3eb2bb7](https://github.com/autobrr/mkbrr/commit/3eb2bb7de879602c07287341b004f673fff7b8bb): Handle symlinks during creation ([#66](https://github.com/autobrr/mkbrr/pull/66)) (@s0up4200) **Full Changelog**: [v1.8.0...v1.8.1](https://github.com/autobrr/mkbrr/compare/v1.8.0...v1.8.1) ### Contributors * @s0up4200 ### New Features * [3b46cde](https://github.com/autobrr/mkbrr/commit/3b46cde083824242ad73c3d3d84eb1f04a575525): Add check command ([#58](https://github.com/autobrr/mkbrr/pull/58)) (@s0up4200) ### Bug fixes * [0427550](https://github.com/autobrr/mkbrr/commit/04275509a2a9a76421866f852d25a8231bf987ee): Correct multi-episode season pack detection ([#56](https://github.com/autobrr/mkbrr/pull/56)) (@s0up4200) * [505feed](https://github.com/autobrr/mkbrr/commit/505feed2f6046a4427c388e0e0a43f759afa5c2c): Handle filepath.Match errors ([#57](https://github.com/autobrr/mkbrr/pull/57)) (@s0up4200) ### Other work * [4d6b8f7](https://github.com/autobrr/mkbrr/commit/4d6b8f76fe6b60e5b51badea32e4f2f5451bb7d6): Setup goreleaser-pro ([#54](https://github.com/autobrr/mkbrr/pull/54)) (@s0up4200) * [1f78ae4](https://github.com/autobrr/mkbrr/commit/1f78ae4531ae68ccdb3ba5453e019829c909d4c0): Revert "build: setup goreleaser-pro" (#61) ([#54](https://github.com/autobrr/mkbrr/pull/54)) (@s0up4200) **Full Changelog**: [v1.7.0...v1.8.0](https://github.com/autobrr/mkbrr/compare/v1.7.0...v1.8.0) ### Contributors * @s0up4200 ### New Features * [cc43305](https://github.com/autobrr/mkbrr/commit/cc43305): Support include patterns ([#51](https://github.com/autobrr/mkbrr/pull/51)) (@s0up4200) ### Other work * [964c41c](https://github.com/autobrr/mkbrr/commit/964c41c): Update README.md ([#49](https://github.com/autobrr/mkbrr/pull/49)) (@s0up4200) * [cc4f0ee](https://github.com/autobrr/mkbrr/commit/cc4f0ee): Add benchmarks to readme ([#52](https://github.com/autobrr/mkbrr/pull/52)) (@s0up4200) **Full Changelog**: [v1.6.1...v1.7.0](https://github.com/autobrr/mkbrr/compare/v1.6.1...v1.7.0) ### Contributors * @s0up4200 ### Bug fixes * [cba577a](https://github.com/autobrr/mkbrr/commit/cba577a): Fix update: replace selfupdater lib with fork ([#48](https://github.com/autobrr/mkbrr/pull/48)) (@s0up4200) **Full Changelog**: [v1.6.0...v1.6.1](https://github.com/autobrr/mkbrr/compare/v1.6.0...v1.6.1) ### Contributors * @s0up4200 ### New Features * [1ee35d9](https://github.com/autobrr/mkbrr/commit/1ee35d9): Add skip-prefix flag ([#43](https://github.com/autobrr/mkbrr/pull/43)) (@s0up4200) * [b1d16e6](https://github.com/autobrr/mkbrr/commit/b1d16e6): Support explicit tracker selection ([#47](https://github.com/autobrr/mkbrr/pull/47)) (@s0up4200) **Full Changelog**: [v1.3.0...v1.6.0](https://github.com/autobrr/mkbrr/compare/v1.3.0...v1.6.0) ### Contributors * @s0up4200 ### New Features * [534c9f1](https://github.com/autobrr/mkbrr/commit/534c9f1): Use tracker domain as prefix ([#30](https://github.com/autobrr/mkbrr/pull/30)) (@s0up4200) * [1e6d445](https://github.com/autobrr/mkbrr/commit/1e6d445): Add torrent-syndikat tracker ([#28](https://github.com/autobrr/mkbrr/pull/28)) (@s0up4200) * [ba506ba](https://github.com/autobrr/mkbrr/commit/ba506ba): Add incomplete season pack detection ([#29](https://github.com/autobrr/mkbrr/pull/29)) (@s0up4200) ### Other work * [72bf690](https://github.com/autobrr/mkbrr/commit/72bf690): Improve readme ([#31](https://github.com/autobrr/mkbrr/pull/31)) (@s0up4200) **Full Changelog**: [v1.2.0...v1.3.0](https://github.com/autobrr/mkbrr/compare/v1.2.0...v1.3.0) ### Contributors * @s0up4200 ### New Features * [2675b8f](https://github.com/autobrr/mkbrr/commit/2675b8f): Add Homebrew formula ([#16](https://github.com/autobrr/mkbrr/pull/16)) (@s0up4200) * [726fc73](https://github.com/autobrr/mkbrr/commit/726fc73): Add v flag for extra metadata ([#18](https://github.com/autobrr/mkbrr/pull/18)) (@s0up4200) * [12d2392](https://github.com/autobrr/mkbrr/commit/12d2392): Add limits per tracker ([#17](https://github.com/autobrr/mkbrr/pull/17)) (@s0up4200) * [f89a5a1](https://github.com/autobrr/mkbrr/commit/f89a5a1): Optimize piece hashing and buffer management ([#20](https://github.com/autobrr/mkbrr/pull/20)) (@s0up4200) ### Bug fixes * [753a3e8](https://github.com/autobrr/mkbrr/commit/753a3e8): Add option to omit creator string in torrent file ([#24](https://github.com/autobrr/mkbrr/pull/24)) (@s0up4200) ### Other work * [df97a71](https://github.com/autobrr/mkbrr/commit/df97a71): Implement PGO ([#21](https://github.com/autobrr/mkbrr/pull/21)) (@s0up4200) * [2562cf5](https://github.com/autobrr/mkbrr/commit/2562cf5): Bump the golang group with 2 updates ([#25](https://github.com/autobrr/mkbrr/pull/25)) (@dependabot\[bot]) **Full Changelog**: [v1.1.0...v1.2.0](https://github.com/autobrr/mkbrr/compare/v1.1.0...v1.2.0) ### Contributors * @s0up4200 * @dependabot ### New Features * [5915059](https://github.com/autobrr/mkbrr/commit/5915059): Add modify command ([#12](https://github.com/autobrr/mkbrr/pull/12)) (@s0up4200) * [722220b](https://github.com/autobrr/mkbrr/commit/722220b): Add self-update command ([#11](https://github.com/autobrr/mkbrr/pull/11)) (@zze0s) * [f982c4e](https://github.com/autobrr/mkbrr/commit/f982c4e): Add max\_piece\_length flag ([#8](https://github.com/autobrr/mkbrr/pull/8)) (@martylukyy) ### Bug fixes * [5d70d7e](https://github.com/autobrr/mkbrr/commit/5d70d7e): Disable cgo for build process ([#14](https://github.com/autobrr/mkbrr/pull/14)) (@s0up4200) * [ecfc1dd](https://github.com/autobrr/mkbrr/commit/ecfc1dd): Silence help text after error ([#9](https://github.com/autobrr/mkbrr/pull/9)) (@martylukyy) ### Other work * [cf059cb](https://github.com/autobrr/mkbrr/commit/cf059cb): Display sizes in IEC units ([#7](https://github.com/autobrr/mkbrr/pull/7)) (@martylukyy) * [6f08a62](https://github.com/autobrr/mkbrr/commit/6f08a62): Skip heavy file tests on Windows to improve CI speed ([#15](https://github.com/autobrr/mkbrr/pull/15)) (@s0up4200) **Full Changelog**: [v1.0.0...v1.1.0](https://github.com/autobrr/mkbrr/compare/v1.0.0...v1.1.0) ### Contributors * @s0up4200 * @martylukyy * @zze0s ### Bug fixes * [4db1876](https://github.com/autobrr/mkbrr/commit/4db1876): Improve install target (@s0up4200) ### Other work * [777aabf](https://github.com/autobrr/mkbrr/commit/777aabf): Update preset examples (@s0up4200) **Full Changelog**: [v0.2.0...v1.0.0](https://github.com/autobrr/mkbrr/compare/v0.2.0...v1.0.0) ### Contributors * @s0up4200 ### New Features * [43994e1](https://github.com/autobrr/mkbrr/commit/43994e1): Improve output duration ([#4](https://github.com/autobrr/mkbrr/pull/4)) (@s0up4200) * [39b80ac](https://github.com/autobrr/mkbrr/commit/39b80ac): Add preset support ([#6](https://github.com/autobrr/mkbrr/pull/6)) (@s0up4200) * [57de4e3](https://github.com/autobrr/mkbrr/commit/57de4e3): Batch processing ([#3](https://github.com/autobrr/mkbrr/pull/3)) (@s0up4200) ### Bug fixes * [88c2f04](https://github.com/autobrr/mkbrr/commit/88c2f04): Remove name option ([#5](https://github.com/autobrr/mkbrr/pull/5)) (@s0up4200) ### Other work * [4696484](https://github.com/autobrr/mkbrr/commit/4696484): Update readme (@s0up4200) * [12ef3cd](https://github.com/autobrr/mkbrr/commit/12ef3cd): Readme cleanup (@s0up4200) * [e234434](https://github.com/autobrr/mkbrr/commit/e234434): Update readme (@s0up4200) **Full Changelog**: [v0.1.0...v0.2.0](https://github.com/autobrr/mkbrr/compare/v0.1.0...v0.2.0) ### Contributors * @s0up4200 # check Source: https://mkbrr.com/cli-reference/check Verify the integrity of content against a torrent file. ## Usage ```bash theme={null} mkbrr check [flags] ``` ## Arguments * ``: Path to the `.torrent` file. (Required) * ``: Path to the directory or file containing the data to check. (Required) ## Flags Be verbose. When enabled, shows detailed information about the verification process including any bad piece indices. Enable quiet mode, printing only the completion percentage. Useful for scripts. Useful for automated scripts or when you only need the verification status. Manually specify the number of concurrent goroutines used for hashing. Experimenting with different worker values *might* yield better performance than the default automatic setting. ## Examples ### Basic Check Verify the content in `my_download_folder` against `my_torrent.torrent`: ### Verbose Check Verify content and show indices of any bad pieces: ### Quiet Check # create Source: https://mkbrr.com/cli-reference/create Create a new torrent file from a file or directory. ## Usage ```bash theme={null} mkbrr create /path/to/content [flags] ``` Create torrents in two modes: * Single file/directory mode (default) * [Batch mode](/features/batch-mode) using a YAML config file Common settings can be saved and reused with [presets](/features/presets). By default, when a tracker URL is provided, the output filename will be prefixed with the tracker domain (e.g. "example\_filename.torrent"). Use `--skip-prefix` to disable this behavior. ## Arguments * `/path/to/content`: (Required unless using `-b`) The path to the source file or directory. ## Flags ### Input & Output Tracker URL. Can be specified multiple times to add several trackers. Optional. Set torrent name (default: source filename). Optional. Set output path (default: `.torrent` or `_.torrent`). Output directory for created torrent. Don't add tracker domain prefix to output filename. ### Advanced Input (Batch & Presets) Batch config file (YAML). Cannot be used with a path argument. For creating multiple torrents in one go. See the [Batch Mode](/features/batch-mode) documentation for details. Use preset from config. For reusing common settings across torrents. See the [Presets](/features/presets) documentation for details. Preset config file (default `~/.config/mkbrr/presets.yaml`). Set custom path to presets.yaml. See the [Presets](/features/presets) documentation for details. ### Content Selection Exclude files matching these patterns (e.g., `"*.nfo,*.jpg"` or `--exclude "*.nfo" --exclude "*.jpg"`). Use this to filter out unwanted files like NFOs, samples, or extras that shouldn't be in the torrent. See the [filtering guide](/features/filtering) for detailed pattern rules and examples. Include only files matching these patterns (e.g., `"*.mkv,*.mp4"` or `--include "*.mkv" --include "*.mp4"`). Using include patterns activates whitelist mode. See the [filtering guide](/features/filtering) for detailed pattern rules and examples. ### Torrent Internals Make torrent private. Private flag is enabled by default for tracker compliance. Only disable if you're creating a public torrent. Set piece length to 2^n bytes (16-27, automatic if not specified). Let mkbrr automatically calculate the piece size unless you have specific requirements. The automatic calculation optimizes for both performance and compatibility. Limit maximum automatically calculated piece length to 2^n bytes (14-27). Target approximate number of pieces. Calculates optimal piece length automatically. Mutually exclusive with `--piece-length`. Randomize the torrent's info hash by adding or updating a unique, random `entropy` key in the info dictionary before hashing. Cross-seeding is the practice of seeding the same content on multiple trackers. Using the entropy flag helps avoid conflicts between trackers. ### Seeding & Metadata Specify web seed URLs. Can be used multiple times. Web seeds provide an HTTP fallback source for the torrent content, improving availability. Specify the source string. Some trackers require or recommend specific source tags. Check your tracker's rules. Specify a comment. Omit the creation date from the torrent metadata. Omit the creator string from the torrent metadata. ### Season Pack Detection Exit with error if season pack completeness check detects missing episodes. ### Execution & Output Control Manually specify the number of concurrent goroutines used for hashing. Experimenting with different worker values *might* yield better performance than the default automatic setting. Be verbose. Enable quiet mode, printing only the final torrent file path upon success. Useful for scripts. Display only torrent info without progress (implies verbose). # inspect Source: https://mkbrr.com/cli-reference/inspect Inspect a torrent file and display its metadata and file structure. ## Usage ```bash theme={null} mkbrr inspect [flags] ``` ## Arguments * ``: (Required) Path to the `.torrent` file to inspect. ## Flags Show all metadata fields, including non-standard ones. # CLI Reference Source: https://mkbrr.com/cli-reference/introduction Overview of mkbrr command-line interface commands. Available commands: * `create`: Create a new torrent file. * `check`: Verify the integrity of content against a torrent file. * `inspect`: Inspect the metadata of a torrent file. * `modify`: Modify an existing torrent file. * `update`: Update mkbrr to the latest version. * `version`: Show the current version of mkbrr. # modify Source: https://mkbrr.com/cli-reference/modify Modify existing torrent files using a preset or flags. ## Usage ```bash theme={null} mkbrr modify [flags] [torrent files...] ``` Existing metadata is preserved during modification — only the fields you explicitly change are updated. ## Arguments * `[torrent files...]`: (Required) One or more paths to the `.torrent` files to modify. ## Flags ### Input & Output Tracker URLs (can be specified multiple times). Set the torrent's internal name. Output directory for modified files. Custom output filename (without extension). When modifying multiple torrents, using `--output` with a fixed filename will cause subsequent files to overwrite the previous ones. Use `--output-dir` instead for batch modifications to preserve all modified files with unique names. ### Advanced Input (Presets) Use preset from config. For reusing common settings across torrents. See the [Presets](/features/presets) documentation for details. Preset config file (default `~/.config/mkbrr/presets.yaml`). Set custom path to presets.yaml. See the [Presets](/features/presets) documentation for details. ### Torrent Internals Make torrent private. Private flag is enabled by default for tracker compliance. Only disable if you're creating a public torrent. Remove the private flag entirely. Randomize the torrent's info hash by adding or updating a unique, random `entropy` key in the info dictionary before hashing. Cross-seeding is the practice of seeding the same content on multiple trackers. Using the entropy flag helps avoid conflicts between trackers. ### Seeding & Metadata Specify web seed URLs. Can be used multiple times. Web seeds provide an HTTP fallback source for the torrent content, improving availability. Specify the source string. Some trackers require or recommend specific source tags. Check your tracker's rules. Specify a comment. Omit the creation date from the torrent metadata. If omitted, the creation date is updated to the current time during modification. Omit the creator string from the torrent metadata. ### Execution & Output Control Be verbose. Enable quiet mode, printing only the final torrent file path upon success. Useful for scripts. Don't add tracker domain prefix to output filename. Show what would be modified without making changes. When modifying multiple torrents, using `--output` with a fixed filename will cause subsequent files to overwrite the previous ones. Use `--output-dir` instead for batch modifications to preserve all modified files with unique names. # update Source: https://mkbrr.com/cli-reference/update Update mkbrr to the latest version from GitHub. ## Usage ```bash theme={null} mkbrr update ``` ## Flags This command has no flags. # version Source: https://mkbrr.com/cli-reference/version Prints the version and build time information for mkbrr. ## Usage ```bash theme={null} mkbrr version ``` ## Flags This command has no flags. # Development & Contribution Source: https://mkbrr.com/development Information on building mkbrr from source, running tests, and contributing. ## Prerequisites Before you begin, ensure you have the following installed on your system: Install Go version 1.23.4 or higher ```bash macOS theme={null} brew install go ``` ```bash Linux (apt) theme={null} sudo apt install golang ``` ```bash Windows theme={null} choco install golang ``` Verify installation: ```bash theme={null} go version ``` Required for version control and building from source ```bash macOS theme={null} brew install git ``` ```bash Linux (apt) theme={null} sudo apt install git ``` ```bash Windows theme={null} choco install git ``` Required for running build commands ```bash macOS theme={null} # Included with Xcode Command Line Tools xcode-select --install ``` ```bash Linux (apt) theme={null} sudo apt install make ``` ```bash Windows theme={null} choco install make ``` For other package managers or installation methods, please refer to the official documentation: * [Go Installation Guide](https://golang.org/doc/install) * [Git Installation Guide](https://git-scm.com/downloads) * [Make Installation Guide](https://www.gnu.org/software/make/) ## Building from Source 1. **Clone Repository** ```bash theme={null} git clone https://github.com/autobrr/mkbrr.git ``` 2. **Change Directory** ```bash theme={null} cd mkbrr ``` 3. **Build Binary** ```bash theme={null} make build ``` The binary will be created in the `build/` directory with version information from git tags ## Development Commands ### Build Commands ```bash theme={null} make build # Build the binary make clean # Remove build artifacts make all # Clean, build, and install the binary make install # Install the binary in GOPATH ``` ### PGO (Profile-Guided Optimization) ```bash theme={null} make profile # Generate a PGO profile (run before build-pgo) make build-pgo # Build the binary with PGO optimization make install-pgo # Install the PGO-optimized binary ``` ### GUI Commands ```bash theme={null} make install-wails # Install the Wails CLI (one-time requirement) make gui-dev # Run the GUI in development mode make gui-build # Build the GUI for the current platform make gui-build-all # Build the GUI for all platforms make gui-clean # Clean GUI build artifacts ``` ### Testing Commands ```bash theme={null} make test # Run tests (excluding large tests) make test-race # Run all tests with race detector make test-race-short # Run quick tests with race detector make test-large # Run large tests (resource intensive) make test-coverage # Run tests with coverage report ``` ### Quality Tools ```bash theme={null} make lint # Run golangci-lint ``` Run `make help` to see all available commands and their descriptions ## Contributing Thanks for taking interest in contributing! We welcome anyone who wants to contribute. If you have an idea for a bigger feature or a change, please discuss it first by opening an issue or joining our [Discord](https://discord.gg/WQ2eUycxyT). You can contribute to either: * [Main repository](https://github.com/autobrr/mkbrr) - Core functionality and features * [Documentation repository](https://github.com/s0up4200/mkbrr.com) - Documentation improvements * New features and improvements * Bug fixes and reports * Documentation updates * Community support 1. Fork the [mkbrr repository](https://github.com/autobrr/mkbrr/fork) 2. Clone your fork: `git clone github.com/YOURNAME/mkbrr` 3. Create a feature branch: `git checkout -b feat/your-feature` 4. Make your changes following our guidelines * Reference related issues * Mark as Draft if work in progress * Keep changes focused and atomic * Be responsive to review feedback ### Commit Guidelines We follow [Conventional Commit Guidelines](https://www.conventionalcommits.org/en/v1.0.0/#summary): * `feat(core): add new torrent validation` * `fix(filter): correct pattern matching` * `docs(api): update endpoint documentation` No need for force pushing or rebasing - we squash commits on merge. ### Code Style * Try to follow Go best practices and idioms * Use meaningful variable and function names * Add comments for complex logic * Keep functions focused and concise * Run `go fmt` or `gofumpt` before committing ## License mkbrr is licensed under the **GNU General Public License v2.0**. See the [LICENSE](https://github.com/autobrr/mkbrr/blob/main/LICENSE) file for full details. # Batch mode Source: https://mkbrr.com/features/batch-mode Batch mode allows you to create multiple torrents from different source paths with varying settings in a single command execution. Batch mode is ideal for creating multiple torrents in one go. ## Configuration File (`batch.yaml`) Batch operations are defined in a YAML file, typically named `batch.yaml`. ```bash Command theme={null} mkbrr create -b /path/to/your/batch.yaml ``` ```yaml Example batch.yaml theme={null} # yaml-language-server: $schema=https://raw.githubusercontent.com/autobrr/mkbrr/main/schema/batch.json version: 1 jobs: - output: /torrents/movie1.torrent path: /media/movies/movie1.mkv trackers: - https://tracker-one.com/announce/abc private: true comment: "4K HDR Release" source: "UHD" - output: /torrents/movie2.torrent path: /media/movies/movie2.mkv trackers: - https://tracker-one.com/announce/abc private: true comment: "1080p Release" source: "BluRay" ``` While `batch.yaml` is a common convention, you can use any filename. Just be sure to specify it with `-b`. ### Configuration Structure ```yaml theme={null} jobs: - output: /torrents/movie1.torrent path: /media/movies/movie1.mkv trackers: - https://tracker-one.com/announce/abc private: true comment: "4K HDR Release" source: "UHD" - output: /torrents/movie2.torrent path: /media/movies/movie2.mkv trackers: - https://tracker-one.com/announce/abc private: true comment: "1080p Release" source: "BluRay" - output: /torrents/movie3.torrent path: /media/movies/movie3.mkv trackers: - https://tracker-one.com/announce/abc private: true comment: "720p Release" source: "WEB" ``` ```yaml theme={null} jobs: - output: /torrents/show_s01.torrent path: /media/tv/Show/Season 1/ trackers: - udp://tracker-two.org:6969/announce private: true piece_length: 18 # 256 KiB pieces comment: "Complete Season 1" exclude_patterns: - "*.nfo" - "*.jpg" - output: /torrents/show_s02.torrent path: /media/tv/Show/Season 2/ trackers: - udp://tracker-two.org:6969/announce private: true piece_length: 18 comment: "Complete Season 2" exclude_patterns: - "*.nfo" - "*.jpg" ``` ```yaml theme={null} jobs: - output: /torrents/album.torrent path: /media/music/Artist/Album/ trackers: - udp://tracker-three.org:6969/announce private: false piece_length: 18 webseeds: - http://seed.example.com/album/ exclude_patterns: - "*.log" - "folder.jpg" - output: /torrents/game.torrent path: /media/games/Game.iso trackers: - https://tracker-four.com/announce private: true piece_length: 22 # 4 MiB pieces source: "RETAIL" - output: /torrents/ebook.torrent path: /media/books/Book.pdf trackers: - https://tracker-five.com/announce private: true comment: "PDF + Extras" ``` ### Configuration Options * **version**: Must be `1` * **jobs**: List of torrent creation tasks * **output**: Path for the `.torrent` file * **path**: Source file/directory path * **trackers**: Announce URLs list * **webseeds**: Web seed URLs list * **private**: Set to `true` or `false` * **piece\_length**: Piece size exponent * **target\_piece\_count**: Target number of pieces (mutually exclusive with piece\_length) * **comment**: Torrent comment string * **source**: Source tag string * **entropy**: Set `true` to randomize info hash for cross-seeding * **no\_date**: Set `true` to omit creation date * **skip\_prefix**: Set `true` to prevent adding tracker domain prefix to output filename * **fail\_on\_season\_warning**: Set `true` to exit with error on missing episodes in season packs * **exclude\_patterns**: Glob patterns to exclude files * **include\_patterns**: Glob patterns to include files You can find the formal JSON schema for validation [here](https://raw.githubusercontent.com/autobrr/mkbrr/main/schema/batch.json). You cannot provide a source path argument directly to `mkbrr create` when using the `-b` flag. All source paths must be defined within the batch file jobs. # Filtering Source: https://mkbrr.com/features/filtering Control which files are included in your torrent using glob patterns for inclusion and exclusion rules. Use glob patterns with `--include` and `--exclude` flags to precisely control which files are included in your torrent. ## Built-in Exclusions mkbrr automatically excludes these common system files and directories (case-insensitive): ```plaintext theme={null} .torrent .ds_store thumbs.db desktop.ini zone.identifier @eadir (Synology NAS metadata directory) ``` ## Filter Flags Specify patterns for files to **exclude** from the torrent: ```bash Single Pattern theme={null} mkbrr create . -t ... --exclude "*.nfo" ``` ```bash Multiple Flags theme={null} mkbrr create . -t ... --exclude "*.nfo" --exclude "*sample*" ``` ```bash Comma List theme={null} mkbrr create . -t ... --exclude "*.nfo,*sample*,*.txt" ``` Exclude patterns are useful when you want to keep most files but skip specific types. Specify patterns for files to **include** in the torrent: ```bash Single Pattern theme={null} mkbrr create . -t ... --include "*.mkv" ``` ```bash Multiple Flags theme={null} mkbrr create . -t ... --include "*.mkv" --include "*.mp4" ``` ```bash Comma List theme={null} mkbrr create . -t ... --include "*.mkv,*.mp4,*.avi" ``` Using `--include` activates whitelist mode - only matching files will be considered for inclusion. ## Pattern Rules * Simple patterns (no `/`) match by filename at any depth * Path-aware glob with `**` matches the full relative path * Case-insensitive matching * Uses [glob patterns](https://en.wikipedia.org/wiki/Glob_\(programming\)) * Supports comma-separated lists * `*.nfo` # All NFO files * `*sample*` # Any file with 'sample' * `*.{mkv,mp4}` # MKV and MP4 files ## Processing Order 1. **Built-in Exclusions** System files (`.torrent`, `.ds_store`, etc.) are always excluded first 2. **Include Check** If `--include` patterns exist: * Keep files matching any include pattern * Skip all other files 3. **Exclude Check** If no `--include` patterns: * Skip files matching any exclude pattern * Keep all other files 4. **Default Behavior** Keep files not affected by above rules ## Configuration Files Both filtering options can be defined in configuration files: ```yaml presets.yaml theme={null} presets: movies: include_patterns: - "*.mkv" - "*.mp4" exclude_patterns: - "*sample*" - "*.nfo" ``` ```yaml batch.yaml theme={null} jobs: - output: movie.torrent path: /path/to/movie/ include_patterns: - "*.mkv" exclude_patterns: - "*sample*" ``` Command-line flags (`--include`, `--exclude`) will add to any patterns defined in your preset or batch configuration. # Presets Source: https://mkbrr.com/features/presets Presets allow you to define and reuse common sets of options for creating or modifying torrents. This is particularly useful if you frequently create torrents for specific trackers with consistent settings. Learn about the presets.yaml file structure Available preset configuration options How to use presets in commands Command-line flag precedence ## Configuration File (`presets.yaml`) Presets are defined in a YAML file named `presets.yaml`. `mkbrr` searches for this file in the following locations, using the first one it finds: 1. Path specified by the `--preset-file` flag (if used) 2. The current working directory (`./presets.yaml`) 3. `~/.config/mkbrr/presets.yaml` (or equivalent user config directory) 4. `~/.mkbrr/presets.yaml` (legacy location) ### Structure The `presets.yaml` file follows this structure: ```yaml presets.yaml theme={null} # yaml-language-server: $schema=https://raw.githubusercontent.com/autobrr/mkbrr/main/schema/presets.json version: 1 # Optional: Default settings applied to ALL presets unless overridden default: private: true no_date: true no_creator: false skip_prefix: false # comment: "Default comment" # source: "DEFAULT_SRC" # exclude_patterns: ["*.bak", "temp.*"] # include_patterns: ["*.mkv", "*.mp4"] presets: preset-name-1: # Name of the preset (used with -P flag) trackers: - "https://tracker-one.com/announce/..." source: "TRACKER1" comment: "Uploaded via mkbrr" private: true exclude_patterns: - "*.nfo" - "*sample*" preset-name-2: trackers: - "udp://tracker-two.org:6969/announce" private: false # Make these torrents public piece_length: 18 # Use 256 KiB pieces for this preset include_patterns: - "*.mkv" - "*.mp4" - "*.avi" ``` ```yaml presets.yaml (minimal example) theme={null} version: 1 presets: ptp: trackers: - "https://tracker.example.com/announce" private: false source: "EXAMPLE" ``` Must be `1` Optional settings applied to *all* presets unless explicitly overridden within a specific preset A map where each key is the preset name (e.g., `ptp`, `public`) and the value contains the options for that preset ### Available Options The following options can be used within the `default` section or any specific preset: List of announce URLs. The first one is used as the primary tracker. Whether the torrent should be private. Source tag string. Torrent comment string. Piece size exponent (e.g., `18` for 256 KiB). Mutually exclusive with `target_piece_count`. Target approximate number of pieces (e.g., `600` or `900`). Calculates the optimal piece length automatically. Mutually exclusive with `piece_length`. Maximum piece size exponent for automatic calculation. List of glob patterns to exclude files. List of glob patterns to include files (takes precedence over exclude). Whether to prevent adding the tracker domain prefix to the output filename. Output directory for created torrents. List of web seed URLs. Manually specify the number of concurrent goroutines used for hashing. Experimenting with different values might yield better performance than the default automatic setting. Whether to randomize the torrent's info hash by adding a unique, random key to the info dictionary. Useful for cross-seeding identical content on trackers that reject duplicate info hashes. Whether to omit creation date. Whether to omit creator string. Exit with error if season pack completeness check detects missing episodes. You can find the formal JSON schema for validation [here](https://raw.githubusercontent.com/autobrr/mkbrr/main/schema/presets.json). ## Using Presets Specify the preset name using the `-P` (or `--preset`) flag with the `create` or `modify` commands: ```bash Create theme={null} mkbrr create /path/to/content -P preset-name-1 ``` ```bash Modify theme={null} mkbrr modify *.torrent -P preset-name-2 ``` ## Overriding Presets Command-line flags take precedence over preset settings. Most flags completely override their preset counterparts, but filtering options have special behavior: * **Filtering patterns are additive**: Command-line patterns combine with preset patterns ```yaml Preset Definition theme={null} presets: movies: include_patterns: - "*.mkv" - "*.mp4" exclude_patterns: - "*sample*" ``` ```bash Command with Additional Filters theme={null} # This combines the preset patterns with command-line patterns mkbrr create /path/to/content -P movies --include "*.srt" --exclude "*.nfo" # Effective filters applied: # include_patterns: ["*.mkv", "*.mp4", "*.srt"] # exclude_patterns: ["*sample*", "*.nfo"] ``` Standard command-line flags (like `--private` or `--source`) completely override their preset values, while filtering patterns combine additively. For complete details on filter processing and pattern syntax, see the [Filtering documentation](/features/filtering). ```bash Override source flag theme={null} mkbrr create /path/to/content -P preset-name-1 -s "CUSTOM_SRC" ``` ```bash Override private flag theme={null} mkbrr modify existing.torrent -P preset-name-2 --private=true ``` # Season packs Source: https://mkbrr.com/features/season-packs When creating a torrent from a directory, `mkbrr` includes a feature to help detect potentially incomplete TV season packs. mkbrr analyzes video files in your directory to detect missing episodes in TV season packs, helping prevent incomplete uploads. Only analyzes files with these extensions: * `.mkv` * `.mp4` Detects episode numbers from: * Single: `S01E01` * Range: `S01E01-E03` * Multi: `S01E01E02` mkbrr looks for season numbers in directory and file names using these patterns: ```plaintext theme={null} Show.S01.Complete Show.Season.01 Show.S01 Show-S01-1080p /Season 01/ /S01/ Show.S01.1080p Season 01/ ``` Season detection is case-insensitive and handles various separators (dots, dashes, underscores, spaces). mkbrr determines if a season pack is suspicious by: Scan all video files to determine the highest episode number in the pack Count unique episodes found across all valid video files Compare episode numbers to identify any missing episodes in the sequence The detection focuses on standard episode numbering. Special episodes (S01E00) and unconventional naming may affect accuracy. ```plaintext theme={null} Warning: Possible incomplete season pack detected Season number: 1 Highest episode number found: 4 Episodes found: 3 Missing: episode 3 This may be an incomplete season pack. Check files before uploading. ``` This feature helps catch common packaging mistakes but isn't foolproof. Always verify your files manually before uploading to trackers. # Tracker rules Source: https://mkbrr.com/features/tracker-rules mkbrr includes built-in knowledge about the specific requirements of various private trackers to help ensure the torrents you create are compliant. When you provide a tracker URL (`-t` flag or via presets/batch), `mkbrr` checks if it matches a known tracker and applies relevant rules automatically. mkbrr automatically detects tracker requirements based on the announce URL and applies the appropriate rules to ensure your torrents are compliant. ## How it Works When creating a torrent, `mkbrr` compares the provided tracker URL against an internal list of configurations. If a match is found, it applies the corresponding rules: Enforces maximum piece size limits specific to each tracker (e.g., 16 MiB, 8 MiB). Selects optimal piece sizes based on content size using tracker-specific guidelines. Ensures the .torrent file stays within tracker size limits by adjusting piece length. Tracker-specific rules override manual settings (`-l` or `-m` flags) to ensure compliance. mkbrr always prioritizes tracker requirements. ## Implemented Trackers Below is a list of implemented trackers and their specific requirements: The tracker rules are maintained in the [mkbrr source code](https://github.com/autobrr/mkbrr/blob/main/internal/trackers/trackers.go). Contributions to keep rules updated are welcome via pull requests. | Tracker | Piece Ranges | Max Piece Size | Max Torrent Size | Default Source | | ------------ | ------------ | -------------- | ---------------- | ---------------- | | ANT | Default | - | 250 KiB | ANT | | NBL | Default | - | 1 MiB | NBL | | HDB | Default | 16 MiB | - | - | | SBS | Default | 16 MiB | - | - | | SP | Default | 16 MiB | - | - | | BHD | Default | 16 MiB | - | BHD | | PTP | Custom | 16 MiB | - | PTP | | MTV | Default | 8 MiB | - | MTV | | EMP | Default | 8 MiB | - | Emp | | GGN | Custom | 64 MiB | 1 MiB | GGn | | AlphaRatio | Custom | 64 MiB | 2 MiB | AlphaRatio | | seedpool.org | Custom | 128 MiB | - | seedpool.org | | NB | Custom | 16 MiB | - | - | | BTN | Custom | 16 MiB | - | - | | TSYNDIKAT | Custom | 16 MiB | - | - | | OE | Custom | 16 MiB | - | - | | lst.gg | Custom | 16 MiB | - | lst.gg | | Aither | Custom | 128 MiB | - | Aither | | ULCX | Default | - | - | ULCX | | CapybaraBR | Default | - | - | CapybaraBR | | HUNO | Default | - | - | HUNO | | TorrentLeech | Custom | 128 MiB | - | TorrentLeech.org | # GUI Application Source: https://mkbrr.com/gui/overview mkbrr's graphical user interface for desktop users mkbrr includes a graphical user interface built with [Wails](https://wails.io/) for users who prefer a visual experience over the command line. mkbrr GUI - Create page ## Features The GUI provides the same core functionality as the CLI with additional usability enhancements: Create torrent files with tracker support, presets, and real-time progress tracking with hash rate display. View torrent metadata with a searchable, collapsible file tree. Verify torrent data integrity with detailed results showing good, bad, and missing pieces. Edit torrent metadata without needing the original source files. ### Settings The Settings page allows you to: * Configure default worker count for hashing operations * Manage presets (create, edit, delete) * View and reload the preset file location mkbrr GUI - Settings page ## Additional Features Choose between light, dark, or system appearance modes, plus five color themes: Default, Autobrr (the default), Nightwalker, Swizzin, and Amethyst Haze. Drag a file or folder onto any page to fill its path automatically — drop content to set the source on Create, a `.torrent` or content on Check, or a `.torrent` to Inspect or Modify. When creating torrents, the GUI automatically detects tracker-specific requirements and suggests optimal piece sizes based on your content size and tracker rules. Form state is automatically saved across sessions. If you close the app while filling out a form, your inputs will be restored when you return. Full preset management with validation. Create, edit, and delete presets directly from the GUI without manually editing YAML files. The Inspect page features an advanced file tree viewer with: * Search functionality with auto-expand * Collapsible folder structure * File count per folder * Smart expansion for smaller torrents ## Installation Download the GUI binary for your platform from the [GitHub Releases page](https://github.com/autobrr/mkbrr/releases). Download `mkbrr-gui_*_darwin_*.zip` and extract the `.app` bundle. The app is not notarized, so macOS will block it by default. Use one of these methods: **Option 1: Remove quarantine attribute (recommended)** ```bash theme={null} xattr -cr /path/to/mkbrr-gui.app ``` **Option 2: Right-click to open** 1. Right-click (or Control-click) on the app 2. Select "Open" from the context menu 3. Click "Open" in the dialog **Option 3: System Settings** 1. Try to open the app (it will be blocked) 2. Open System Settings > Privacy & Security 3. Click "Open Anyway" next to the mkbrr-gui message Download `mkbrr-gui_*_windows_amd64.zip` and extract `mkbrr-gui.exe`. Run the executable directly - no installation required. Download `mkbrr-gui_*_linux_amd64.tar.gz` and extract the binary. ```bash theme={null} tar -xzf mkbrr-gui_*_linux_amd64.tar.gz chmod +x mkbrr-gui ./mkbrr-gui ``` ### Building from Source If you prefer to build the GUI yourself: ```bash theme={null} # Clone the repository git clone https://github.com/autobrr/mkbrr.git cd mkbrr # Install Wails CLI (one-time requirement) make install-wails # Build GUI for your current platform make gui-build # Or build for all platforms make gui-build-all ``` The built application will be in `gui/build/bin/`. ## GUI vs CLI Both interfaces provide the same core torrent operations. Choose based on your workflow: | Feature | CLI | GUI | | -------------------- | ----------- | ------------------------ | | Create torrents | Yes | Yes | | Inspect metadata | Yes | Yes | | Check integrity | Yes | Yes | | Modify metadata | Yes | Yes | | Batch operations | Yes | No | | Preset support | Yes | Yes | | Preset management | Manual YAML | Visual editor | | Progress display | Text | Visual with progress bar | | File tree view | Text | Interactive & searchable | | Scripting/automation | Yes | No | | Theme customization | No | Yes | | Drag and drop | No | Yes | # Checking data integrity Source: https://mkbrr.com/guides/checking-data Learn how to verify local files against .torrent files using the mkbrr check command The `mkbrr check` command verifies if the local files or directory match the data defined in a `.torrent` file. This is useful for confirming the integrity of downloaded content or checking files after moving them. ```bash theme={null} mkbrr check [flags] ``` Required command arguments Available verification options Understanding verification results Common usage examples ## Arguments The path to the `.torrent` file containing the expected piece hashes. The path to the local file or directory containing the data to be checked. The command exits with an error code if verification fails (bad pieces > 0 or missing files > 0). ## Flags Be verbose. When enabled, shows detailed information about the verification process including any bad piece indices. Enable quiet mode, printing only the completion percentage. Useful for scripts. Useful for automated scripts or when you only need the verification status. Manually specify the number of concurrent goroutines used for hashing. Experimenting with different worker values *might* yield better performance than the default automatic setting. ## Output By default, the command provides a summary including: * **Completion:** Percentage of pieces successfully verified against the local data. * **Good pieces:** Number of pieces that match the hash in the torrent file. * **Bad pieces:** Number of pieces where the local data hash does not match the torrent file. * **Missing files:** Lists any files specified in the torrent that are missing locally. Files that exist but have an incorrect size will be listed with ` (size mismatch)` appended to their name. * **Check time:** Duration of the verification process. ## Examples Check a downloaded directory: ```bash theme={null} mkbrr check MyShow.S01.torrent /path/to/downloads/MyShow.S01/ ``` Check a single file: ```bash theme={null} mkbrr check MyMovie.mkv.torrent /path/to/downloads/MyMovie.mkv ``` Check with verbose output to see bad piece indices: ```bash theme={null} mkbrr check data.zip.torrent /data/files/data.zip -v ``` Check in quiet mode for scripting: ```bash theme={null} mkbrr check archive.rar.torrent /backups/archive.rar --quiet # Output example: 99.50% ``` # Creating torrents Source: https://mkbrr.com/guides/creating-torrents Learn how to create .torrent files from local files or directories using the mkbrr create command The `mkbrr create` command is used to generate new `.torrent` files from local files or directories. ```bash theme={null} mkbrr create [path] [flags] ``` This command supports creating torrents for single files or entire directories. It also integrates with [Presets](/features/presets) and [Batch Mode](/features/batch-mode) for more advanced workflows. Required and optional command arguments Available command flags and options Automatic optimizations and settings Common usage examples ## Smart Defaults mkbrr automatically optimizes several settings for you: Automatically calculated based on content size for optimal performance and tracker compatibility Generated from tracker domain and content name if not specified (e.g., `tracker-domain_content-name.torrent`) Enabled by default for private tracker compatibility. Use `--private=false` for public trackers Automatically enforces piece size limits and other requirements based on tracker URL. See [Tracker Rules](/features/tracker-rules) for details. When you provide a tracker URL via the `-t` flag or presets, mkbrr automatically detects and applies the appropriate tracker-specific rules to ensure your torrents are compliant. ## Arguments * `[path]`: (Required unless using `-b`) The path to the source file or directory you want to create a torrent from. ## Flags ### Input & Output Tracker URL. Can be specified multiple times to add several trackers. Optional. Set torrent name (default: source filename). Optional. Set output path (default: `.torrent` or `_.torrent`). Output directory for created torrent. Don't add tracker domain prefix to output filename. ### Advanced Input (Batch & Presets) Batch config file (YAML). Cannot be used with a path argument. For creating multiple torrents in one go. See the [Batch Mode](/features/batch-mode) documentation for details. Use preset from config. For reusing common settings across torrents. See the [Presets](/features/presets) documentation for details. Preset config file (default `~/.config/mkbrr/presets.yaml`). Set custom path to presets.yaml. See the [Presets](/features/presets) documentation for details. ### Content Selection Exclude files matching these patterns (e.g., `"*.nfo,*.jpg"` or `--exclude "*.nfo" --exclude "*.jpg"`). Use this to filter out unwanted files like NFOs, samples, or extras that shouldn't be in the torrent. See the [filtering guide](/features/filtering) for detailed pattern rules and examples. Include only files matching these patterns (e.g., `"*.mkv,*.mp4"` or `--include "*.mkv" --include "*.mp4"`). Using include patterns activates whitelist mode. See the [filtering guide](/features/filtering) for detailed pattern rules and examples. ### Torrent Internals Make torrent private. Private flag is enabled by default for tracker compliance. Only disable if you're creating a public torrent. Set piece length to 2^n bytes (16-27, automatic if not specified). Let mkbrr automatically calculate the piece size unless you have specific requirements. The automatic calculation optimizes for both performance and compatibility. Limit maximum automatically calculated piece length to 2^n bytes (14-27). Target approximate number of pieces. Calculates optimal piece length automatically. Mutually exclusive with `--piece-length`. Randomize the torrent's info hash by adding or updating a unique, random `entropy` key in the info dictionary before hashing. Cross-seeding is the practice of seeding the same content on multiple trackers. Using the entropy flag helps avoid conflicts between trackers. ### Seeding & Metadata Specify web seed URLs. Can be used multiple times. Web seeds provide an HTTP fallback source for the torrent content, improving availability. Specify the source string. Some trackers require or recommend specific source tags. Check your tracker's rules. Specify a comment. Omit the creation date from the torrent metadata. Omit the creator string from the torrent metadata. ### Season Pack Detection Exit with error if season pack completeness check detects missing episodes. ### Execution & Output Control Manually specify the number of concurrent goroutines used for hashing. Experimenting with different worker values *might* yield better performance than the default automatic setting. Be verbose. Enable quiet mode, printing only the final torrent file path upon success. Useful for scripts. Display only torrent info without progress (implies verbose). ## Handling Symbolic Links When `mkbrr create` encounters symbolic links (symlinks) within the source path: * **Links are followed:** `mkbrr` reads the content of the file or directory the link points to (the target). * **Target content is hashed:** The torrent pieces will contain the hash data of the *target* file's content. * **Link path is stored:** The file path recorded inside the `.torrent` file's metadata will be the path of the *symbolic link itself*, relative to the source path, not the path of the target. This means the created torrent represents the file structure as it appears with the links, but the data integrity check (`mkbrr check`) will verify against the actual content pointed to by those links at the time of creation. Important: When checking a torrent created with symlinks using `mkbrr check`, the check verifies against the *original target content* that was hashed during creation, not necessarily what the link points to currently if the target file has changed or been moved. ## Examples Create a private torrent for a single file: ```bash theme={null} mkbrr create /path/to/movie.mkv -t https://private-tracker.com/announce -s "MyTracker" ``` Create a public torrent for a directory: ```bash theme={null} mkbrr create /path/to/album-folder -t udp://public-tracker.org:6969/announce --private=false -c "Awesome Album" ``` Create using a preset: ```bash theme={null} mkbrr create /path/to/content -P mypreset ``` Create with specific piece size and web seeds: ```bash theme={null} mkbrr create /path/to/large-file.iso -t https://tracker.net/a -l 24 -w http://seed.example.com/large-file.iso ``` Create with entropy for cross-seeding: ```bash theme={null} mkbrr create /path/to/content -t https://another-tracker.com/announce -e ``` Create excluding certain files: ```bash theme={null} mkbrr create /path/to/project/ -t https://tracker.net/a --exclude ".*,*.tmp,node_modules" ``` Create including only video files: ```bash theme={null} mkbrr create /path/to/mixed-folder/ -t https://tracker.net/a --include "*.mkv,*.mp4,*.avi" ``` # Inspecting torrents Source: https://mkbrr.com/guides/inspecting-torrents Learn how to view and analyze .torrent file metadata using the mkbrr inspect command The `mkbrr inspect` command allows you to view the metadata and file structure contained within a `.torrent` file without needing the actual content files. ```bash theme={null} mkbrr inspect [flags] ``` Required command arguments Available command options Understanding the inspection results Usage examples ## Arguments The path to the `.torrent` file you want to inspect. ## Flags Show all metadata fields found in the torrent file, including non-standard ones in both the root and info dictionaries. Use verbose mode when you need to inspect custom or non-standard metadata fields that might be present in the torrent. ## Output The command displays the following information by default: * **Name:** The root name of the torrent content * **Hash:** The info hash of the torrent * **Size:** Total size of the content * **Piece length:** Size of each piece * **Pieces:** Total number of pieces * **Trackers:** Announce URLs * **Web seeds:** Any web seed URLs included * **Private:** Whether the private flag is set * **Source:** The source tag, if present * **Comment:** The comment, if present * **Created by:** The tool used to create the torrent * **Created on:** The creation date, if specified * **Files:** Number of files (for multi-file torrents) For multi-file torrents, a file tree is displayed showing the path and size of each file within the torrent structure. ## Examples Inspect a torrent file with default output: ```bash theme={null} mkbrr inspect my-release.torrent ``` Show all metadata fields including non-standard ones: ```bash theme={null} mkbrr inspect another.torrent -v ``` ```bash theme={null} mkbrr inspect [flags] ``` ## Arguments * ``: (Required) The path to the `.torrent` file you want to inspect. ## Flags Show all metadata fields found in the torrent file, including non-standard ones in both the root and info dictionaries. ## Output The command displays the following information by default: * **Name:** The root name of the torrent content. * **Hash:** The info hash of the torrent. * **Size:** Total size of the content. * **Piece length:** Size of each piece. * **Pieces:** Total number of pieces. * **Trackers:** Announce URLs. * **Web seeds:** Any web seed URLs included. * **Private:** Whether the private flag is set. * **Source:** The source tag, if present. * **Comment:** The comment, if present. * **Created by:** The tool used to create the torrent, if specified. * **Created on:** The creation date, if specified. * **Files:** Number of files (for multi-file torrents). If the torrent contains multiple files, a file tree is also displayed, showing the path and size of each file within the torrent structure. ## Examples **Inspect a torrent file:** ```bash theme={null} mkbrr inspect my-release.torrent ``` **Inspect a torrent file with verbose output to see all metadata:** ```bash theme={null} mkbrr inspect another.torrent -v ``` # Modifying torrents Source: https://mkbrr.com/guides/modifying-torrents Learn how to update metadata in existing .torrent files using the mkbrr modify command The `mkbrr modify` command allows you to update metadata in existing `.torrent` files without needing access to the original content files. This is useful for mass-updating trackers, source tags, comments, or other metadata. ```bash theme={null} mkbrr modify [torrent files...] [flags] ``` Required command arguments Available modification options Common usage examples By default, the original torrent files are preserved. New, modified files are created with a prefix based on the tracker domain (e.g., `tracker-domain_original-name.torrent`). You can customize the output filename or directory. The `modify` command preserves existing metadata, including custom info-dict keys. Only the fields you explicitly change (name, tracker, source, comment, private flag, entropy) are updated. ## Arguments One or more paths to the `.torrent` files you want to modify. Glob patterns (like `*.torrent`) can be used if your shell supports them. ## Flags ### Input & Output Tracker URLs (can be specified multiple times). Set the torrent's internal name. Output directory for modified files. Custom output filename (without extension). When modifying multiple torrents, using `--output` with a fixed filename will cause subsequent files to overwrite the previous ones. Use `--output-dir` instead for batch modifications to preserve all modified files with unique names. ### Advanced Input (Presets) Use preset from config. For reusing common settings across torrents. See the [Presets](/features/presets) documentation for details. Preset config file (default `~/.config/mkbrr/presets.yaml`). Set custom path to presets.yaml. See the [Presets](/features/presets) documentation for details. ### Torrent Internals Make torrent private. Private flag is enabled by default for tracker compliance. Only disable if you're creating a public torrent. Remove the private flag entirely. Randomize the torrent's info hash by adding or updating a unique, random `entropy` key in the info dictionary before hashing. Cross-seeding is the practice of seeding the same content on multiple trackers. Using the entropy flag helps avoid conflicts between trackers. ### Seeding & Metadata Specify web seed URLs. Can be used multiple times. Web seeds provide an HTTP fallback source for the torrent content, improving availability. Specify the source string. Some trackers require or recommend specific source tags. Check your tracker's rules. Specify a comment. Omit the creation date from the torrent metadata. If omitted, the creation date is updated to the current time during modification. Omit the creator string from the torrent metadata. ### Execution & Output Control Be verbose. Enable quiet mode, printing only the final torrent file path upon success. Useful for scripts. Don't add tracker domain prefix to output filename. Show what would be modified without making changes. ## Examples Update the tracker for a single torrent: ```bash theme={null} mkbrr modify original.torrent --tracker https://new-tracker.com/announce ``` Outputs: `new-tracker_original.torrent` Make multiple torrents public: ```bash theme={null} mkbrr modify *.torrent --private=false ``` Outputs: `modified_file1.torrent`, `modified_file2.torrent`, etc. Add a source tag and save to a specific directory: ```bash theme={null} mkbrr modify /downloads/*.torrent --source "MySource" --output-dir /modified-torrents/ ``` Apply a preset and then add entropy: ```bash theme={null} mkbrr modify old-preset.torrent -P newpreset -e ``` Preview changes without saving: ```bash theme={null} mkbrr modify my.torrent --tracker https://new.co/a --comment "Updated" --dry-run ``` ```bash theme={null} mkbrr modify [torrent files...] [flags] ``` By default, the original torrent files are preserved. New, modified files are created with a prefix based on the tracker domain (e.g., `tracker-domain_original-name.torrent`). You can customize the output filename or directory. The `modify` command preserves existing metadata, including custom info-dict keys. Only the fields you explicitly change are updated. # Installation Source: https://mkbrr.com/installation How to install mkbrr using various methods. Select the installation method that best suits your system and preferences: Download and install pre-compiled CLI binaries Desktop application for visual torrent management Install using your preferred package manager Install using Docker Download the appropriate binary for your system from the [GitHub Releases page](https://github.com/autobrr/mkbrr/releases/latest) or use the commands below. Make sure the extraction directory (e.g., `/usr/local/bin`) is included in your system's `PATH` environment variable so you can run `mkbrr` from any location. ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4) sudo tar -C /usr/local/bin -xzf mkbrr_*_linux_x86_64.tar.gz mkbrr ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_arm64.tar.gz | cut -d\" -f4) sudo tar -C /usr/local/bin -xzf mkbrr_*_linux_arm64.tar.gz mkbrr ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_arm.tar.gz | grep -v arm64 | cut -d\" -f4) sudo tar -C /usr/local/bin -xzf mkbrr_*_linux_arm.tar.gz mkbrr ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_amd64.deb | cut -d\" -f4) sudo dpkg -i mkbrr_*_linux_amd64.deb ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_arm64.deb | cut -d\" -f4) sudo dpkg -i mkbrr_*_linux_arm64.deb ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_armv6.deb | cut -d\" -f4) sudo dpkg -i mkbrr_*_linux_armv6.deb ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_amd64.rpm | cut -d\" -f4) sudo rpm -i mkbrr_*_linux_amd64.rpm ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_arm64.rpm | cut -d\" -f4) sudo rpm -i mkbrr_*_linux_arm64.rpm ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_armv6.rpm | cut -d\" -f4) sudo rpm -i mkbrr_*_linux_armv6.rpm ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_amd64.apk | cut -d\" -f4) sudo apk add --allow-untrusted mkbrr_*_linux_amd64.apk ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_arm64.apk | cut -d\" -f4) sudo apk add --allow-untrusted mkbrr_*_linux_arm64.apk ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep linux_armv6.apk | cut -d\" -f4) sudo apk add --allow-untrusted mkbrr_*_linux_armv6.apk ``` Ensure the extraction directory (e.g., `/usr/local/bin`) is included in your system's `PATH` environment variable so you can run `mkbrr` from any location. ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep darwin_arm64.tar.gz | cut -d\" -f4) sudo tar -C /usr/local/bin -xzf mkbrr_*_darwin_arm64.tar.gz mkbrr ``` ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep darwin_x86_64.tar.gz | cut -d\" -f4) sudo tar -C /usr/local/bin -xzf mkbrr_*_darwin_x86_64.tar.gz mkbrr ``` If you encounter issues with macOS Gatekeeper preventing `mkbrr` from running, execute the following command to remove the quarantine attribute: `xattr -d com.apple.quarantine /usr/local/bin/mkbrr`. You might also need to grant execution permissions: `chmod +x /usr/local/bin/mkbrr`. Make sure the extraction directory (e.g., `/usr/local/bin`) is included in your system's `PATH` environment variable so you can run `mkbrr` from any location. ```bash theme={null} wget $(curl -s https://api.github.com/repos/autobrr/mkbrr/releases/latest | grep download | grep freebsd_x86_64.tar.gz | cut -d\" -f4) sudo tar -C /usr/local/bin -xzf mkbrr_*_freebsd_x86_64.tar.gz mkbrr ``` Download the `mkbrr_*_windows_x86_64.zip` file from the [GitHub Releases page](https://github.com/autobrr/mkbrr/releases/latest). Alternatively, using PowerShell (requires `curl`): ```powershell theme={null} # Download (Uses Invoke-RestMethod for reliable JSON parsing) $releaseInfo = Invoke-RestMethod -Uri "https://api.github.com/repos/autobrr/mkbrr/releases/latest" $url = $releaseInfo.assets | Where-Object { $_.name -like '*windows_x86_64.zip' } | Select-Object -ExpandProperty browser_download_url curl -L -o mkbrr_latest_windows_x86_64.zip $url # Extract Expand-Archive -Path mkbrr_latest_windows_x86_64.zip -DestinationPath .\\mkbrr_extracted -Force ``` To run `mkbrr` from any terminal after extracting `mkbrr.exe`, you need to make it accessible via your system's `PATH`: 1. Move `mkbrr.exe` to a directory already in your `PATH` (e.g., create `C:\Program Files\mkbrr` and move it there). 2. **Or**, add the directory where you extracted `mkbrr.exe` to your system or user `PATH` environment variable (accessible via System Properties -> Environment Variables). If you use Homebrew, you can install `mkbrr` with these commands: ```bash theme={null} brew tap autobrr/mkbrr brew install mkbrr ``` For Arch Linux users, `mkbrr` is available in the Arch User Repository (AUR): ```bash theme={null} yay -S mkbrr ``` You can also install it manually: ```bash theme={null} git clone https://aur.archlinux.org/mkbrr.git cd mkbrr makepkg -si ``` The version in the AUR might be outdated. After installing via AUR, it is **highly recommended** to immediately run `mkbrr update` to get the latest official release directly from GitHub. `mkbrr` is available in the official Alpine `edge/testing` repository: ```bash theme={null} sudo apk update sudo apk add mkbrr ``` The version in the Alpine testing repository might be outdated. After installing via `apk add mkbrr`, it is **highly recommended** to immediately run `mkbrr update` to get the latest official release directly from GitHub. Pull the image: ```bash theme={null} docker pull ghcr.io/autobrr/mkbrr ``` Tag it for convenience: ```bash theme={null} docker tag ghcr.io/autobrr/mkbrr mkbrr ``` Run and mount your input/output directories: ```bash theme={null} docker run -v ~/Downloads:/downloads mkbrr mkbrr create /downloads/your-file --output-dir /downloads ``` Replace `~/Downloads` with the path on your host containing the files you want to process. For convenience, add an alias to your shell configuration (e.g., `.zshrc` or `.bashrc`): `alias mkbrr='docker run -v ~/Downloads:/downloads mkbrr mkbrr'` If you want mkbrr to automatically discover your presets.yaml or other config files, mount your config directory and set the working directory (-w) to it. mkbrr searches the current working directory and the standard config path (\$HOME/.config/mkbrr, which resolves to /config/.config/mkbrr inside the official image, since it sets HOME=/config). For example, if your config is in /mnt/user/appdata/mkbrr on your host: ```bash theme={null} alias mkbrr='docker run --rm \ -v /mnt/user/data/complete/Music:/music \ -v /mnt/user/data/torrentfiles/created:/torrentfiles \ -v /mnt/user/appdata/mkbrr:/config \ -w /config \ ghcr.io/autobrr/mkbrr mkbrr' ``` When running Docker in rootless mode, you may encounter permission issues when writing torrent files. To fix this, use the `--user` flag to run the container as your current user: ```bash theme={null} docker run --user $(id -u):$(id -g) -v ~/Downloads:/downloads ghcr.io/autobrr/mkbrr mkbrr create /downloads/your-file --output-dir /downloads ``` For your alias: ```bash theme={null} alias mkbrr='docker run --rm --user $(id -u):$(id -g) -v ~/Downloads:/downloads ghcr.io/autobrr/mkbrr mkbrr' ``` If you have Go installed (version 1.23 or later recommended), you can install `mkbrr` using: ```bash theme={null} go install github.com/autobrr/mkbrr@latest ``` Ensure that your Go binary path (`$(go env GOPATH)/bin`) is included in your system's `PATH` environment variable so the `mkbrr` command can be found. You might need to add this line to your shell profile (e.g., `.bashrc`, `.zshrc`, `.profile`): ```bash theme={null} echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc && source ~/.zshrc ``` mkbrr includes a graphical user interface for those who prefer a visual experience. Download the GUI binary for your platform from the [GitHub Releases page](https://github.com/autobrr/mkbrr/releases/latest). Download `mkbrr-gui_*_darwin_*.zip` and extract the `.app` bundle. The app is not notarized, so macOS will block it by default. Use one of these methods: **Option 1: Remove quarantine attribute (recommended)** ```bash theme={null} xattr -cr /path/to/mkbrr-gui.app ``` **Option 2: Right-click to open** 1. Right-click (or Control-click) on the app 2. Select "Open" from the context menu 3. Click "Open" in the dialog **Option 3: System Settings** 1. Try to open the app (it will be blocked) 2. Open System Settings > Privacy & Security 3. Click "Open Anyway" next to the mkbrr-gui message Download `mkbrr-gui_*_windows_amd64.zip` and extract `mkbrr-gui.exe`. Run the executable directly - no installation required. Download `mkbrr-gui_*_linux_amd64.tar.gz` and extract the binary. ```bash theme={null} tar -xzf mkbrr-gui_*_linux_amd64.tar.gz chmod +x mkbrr-gui ./mkbrr-gui ``` For detailed GUI features and usage, see the [GUI Application guide](/gui/overview). After installation, verify that mkbrr is working correctly: ```bash theme={null} mkbrr version ``` If you see the version number, mkbrr is installed correctly! If you encounter any issues during installation: If you installed mkbrr through a package manager (Homebrew, AUR, Alpine) and notice it's not the latest version: ```bash theme={null} mkbrr update ``` This will update mkbrr to the latest version directly from GitHub. If macOS prevents mkbrr from running due to security settings: ```bash theme={null} xattr -d com.apple.quarantine /usr/local/bin/mkbrr chmod +x /usr/local/bin/mkbrr ``` If you get a "command not found" error after installation, ensure the installation directory is in your PATH: ```bash theme={null} # For Go installations echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc && source ~/.zshrc # For binary installations echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc && source ~/.zshrc ``` Need help? Join our [Discord](https://discord.gg/WehFCZxq5B) community or open an issue on [GitHub](https://github.com/autobrr/mkbrr). # Introduction Source: https://mkbrr.com/introduction mkbrr: Fast, Simple Torrent Creation & Management ## What is mkbrr? **mkbrr** (pronounced "make-burr") is a simple yet powerful tool designed for creating, inspecting, and modifying `.torrent` files. Available as both a CLI and a desktop GUI, it intelligently handles specific requirements for various private trackers. ## Why use mkbrr? Optimized hashing performance that consistently beats other tools in benchmarks. See [Performance](/performance/benchmarks). Use the command line for automation or the [desktop GUI](/gui/overview) for visual torrent management. Includes support for reusable [presets](/features/presets) and [batch mode](/features/batch-mode) operations. Distributed as a single, dependency-free binary for easy deployment across platforms. ## Technical Highlights Standard deviation between runs is only 0.25-3.7%, compared to up to 39% variance with other tools. 21 GiB torrent creation in 7.24 seconds on Leaseweb SSD server, 6.27× faster than mktorrent. Automated detection of missing episodes in TV season collections. [Learn more](/features/season-packs). Built-in compliance with requirements for major private trackers. [Learn more](/features/tracker-rules). ## Getting Started Follow our [installation guide](/installation) to set up the CLI or [GUI application](/gui/overview) on your system. **CLI:** ```bash theme={null} # Basic usage mkbrr create "path/to/data" -o my.torrent # With a tracker mkbrr create "path/to/data" -o my.torrent --tracker "http://tracker.url" ``` **GUI:** Open the application and use the Create page to select files and configure your torrent visually. Check out our [guides](/guides) to learn about advanced features: * [Creating torrents](/guides/creating-torrents) * [Using presets](/features/presets) * [Batch operations](/features/batch-mode) * [GUI Application](/gui/overview) mkbrr is actively maintained and regularly updated. Join our [Discord](https://discord.gg/WQ2eUycxyT) community and check the [Changelog](/changelog) for updates. # Benchmarks Source: https://mkbrr.com/performance/benchmarks Performance comparison with other popular torrent creation tools. All benchmarks were performed using [hyperfine](https://github.com/sharkdp/hyperfine) with 5 runs per tool after a warm-up run. ## Performance Overview mkbrr consistently outperforms other torrent creation tools across various hardware configurations. The benchmarks show that mkbrr is not only faster but also maintains better consistency, especially on mechanical drives where other tools struggle with variance. **2.86s** for 15 GiB **7.24s** for 21 GiB **41.02s** for 14 GiB **9.71s** for 30 GiB ## Detailed Results **Hetzner Dedicated Server** * AMD Ryzen 9 7950X3D * 128GB DDR5 RAM @ 3600 MT/s * 2× KIOXIA KCD8XRUG1T92 in SW RAID-0 15 GiB 1080p season pack * mkbrr: **2.86s** * torf: 3.06s * torrenttools: 3.11s * mktorrent: 16.83s **Leaseweb Dedicated Server** * Intel Xeon E-2274G @ 4.00GHz * 32GB RAM * SAMSUNG MZQL21T9HCJR-00A07 1.92TB SSD 21 GiB 1080p season pack: * mkbrr: **7.24s** * torf: 8.85s * torrenttools: 9.07s * mktorrent: 45.41s **Hetzner Dedicated Server** * AMD Ryzen 5 3600 (12) @ 4.71GHz * 64GB RAM * 4 × TOSHIBA MG08ACA16TEY in RAID0 14 GiB 1080p season pack: * mkbrr: **41.02s** * torrenttools: 47.97s * torf: 58.19s * mktorrent: 68.17s **Macbook Pro M4** * Apple M4 * 16GB RAM * 512GB NVME 30 GiB 1080p season pack: * mkbrr: **9.71s** * torf: 9.78s * mktorrent: 10.90s ## Performance Consistency mkbrr maintains good consistency across all platforms, with variance ranging from 0.25% to 2.4%. It particularly excels on storage-heavy workloads, where other tools can show up to 39% variance. All tools showed good consistency on high-end hardware: * mktorrent: **1.62% variance** * mkbrr: 1.75% variance * torf: 2.29% variance * torrenttools: 2.93% variance Other tools showed significant fluctuations on HDD: * mkbrr: **2.4% variance** * torf: 9.9% variance * torrenttools: 22.0% variance * mktorrent: 39.1% variance All tools performed consistently on SSD: * mkbrr: **0.25% variance** * mktorrent: 0.36% variance * torf: 0.87% variance * torrenttools: 1.02% variance ## Detailed Benchmark Data ### Leaseweb Server (21 GiB 1080p season pack) ```bash theme={null} hyperfine --warmup 1 --runs 5 \ --setup 'sudo sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"' \ --prepare 'sudo sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" && rm -f /home/user/Show.S01.DL.1080p.WEB.H264-GROUP.torrent' \ 'mkbrr create /home/user/torrents/qbittorrent/Show.S01.DL.1080p.WEB.H264-GROUP' \ 'mktorrent /home/user/torrents/qbittorrent/Show.S01.DL.1080p.WEB.H264-GROUP' \ 'torrenttools create --threads 8 ~/torrents/qbittorrent/Show.S01.DL.1080p.WEB.H264-GROUP' \ 'torf --threads 8 /home/user/torrents/qbittorrent/Show.S01.DL.1080p.WEB.H264-GROUP' ``` ```plaintext theme={null} # Benchmark 1: mkbrr create ... # Time (mean ± σ): 7.244 s ± 0.018 s [User: 31.245 s, System: 7.554 s] # Range (min … max): 7.225 s … 7.270 s 5 runs # # Benchmark 2: mktorrent ... # Time (mean ± σ): 45.407 s ± 0.163 s [User: 36.495 s, System: 4.983 s] # Range (min … max): 45.135 s … 45.539 s 5 runs # # Benchmark 3: torrenttools create ... # Time (mean ± σ): 9.074 s ± 0.093 s [User: 29.248 s, System: 5.228 s] # Range (min … max): 8.908 s … 9.122 s 5 runs # # Benchmark 4: torf --threads 8 ... # Time (mean ± σ): 8.854 s ± 0.077 s [User: 25.829 s, System: 5.136 s] # Range (min … max): 8.771 s … 8.937 s 5 runs # # Summary # 'mkbrr create ...' ran # 1.22 ± 0.01 times faster than 'torf --threads 8 ...' # 1.25 ± 0.01 times faster than 'torrenttools create ...' # 6.27 ± 0.03 times faster than 'mktorrent ...' ``` ### Hetzner Server (14 GiB 1080p season pack) ```bash theme={null} hyperfine --warmup 1 --runs 5 \ --setup 'sudo sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"' \ --prepare 'sudo sync && sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" && rm -f /home/user/mkbrr/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP.torrent' \ 'mkbrr create ~/torrents/qbittorrent/tv/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'mktorrent ~/torrents/qbittorrent/tv/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'torrenttools create --threads 12 ~/torrents/qbittorrent/tv/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'torf --threads 12 ~/torrents/qbittorrent/tv/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' ``` ```plaintext theme={null} # Benchmark 1: mkbrr create ... # Time (mean ± σ): 41.022 s ± 0.979 s [User: 13.691 s, System: 6.747 s] # Range (min … max): 39.938 s … 42.467 s 5 runs # # Benchmark 2: mktorrent ... # Time (mean ± σ): 68.168 s ± 26.654 s [User: 17.934 s, System: 6.543 s] # Range (min … max): 39.268 s … 97.574 s 5 runs # # Benchmark 3: torrenttools create ... # Time (mean ± σ): 47.968 s ± 10.552 s [User: 7.052 s, System: 6.551 s] # Range (min … max): 39.460 s … 66.296 s 5 runs # # Benchmark 4: torf --threads 12 ... # Time (mean ± σ): 58.187 s ± 5.787 s [User: 7.185 s, System: 6.511 s] # Range (min … max): 50.125 s … 65.807 s 5 runs # # Summary # 'mkbrr create ...' ran # 1.17 ± 0.26 times faster than 'torrenttools create ...' # 1.42 ± 0.15 times faster than 'torf --threads 12 ...' # 1.66 ± 0.65 times faster than 'mktorrent ...' ``` ### Macbook Pro M4 (30 GiB 1080p season pack) ```bash theme={null} hyperfine --warmup 1 --runs 5 \ --prepare 'rm -f Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP.torrent' \ 'mkbrr create ~/Desktop/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'mktorrent ~/Desktop/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'torf --threads 10 ~/Desktop/Show.S01.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' ``` ```plaintext theme={null} # Benchmark 1: mkbrr create ... # Time (mean ± σ): 9.708 s ± 0.355 s [User: 10.823 s, System: 4.297 s] # Range (min … max): 9.479 s … 10.323 s 5 runs # # Benchmark 2: mktorrent ... # Time (mean ± σ): 10.897 s ± 0.701 s [User: 11.021 s, System: 3.038 s] # Range (min … max): 9.950 s … 11.620 s 5 runs # # Benchmark 3: torf --threads 10 ... # Time (mean ± σ): 9.779 s ± 0.749 s [User: 10.776 s, System: 5.253 s] # Range (min … max): 9.383 s … 11.112 s 5 runs # # Summary # 'mkbrr create ...' ran # 1.01 ± 0.09 times faster than 'torf --threads 10 ...' # 1.12 ± 0.08 times faster than 'mktorrent ...' ``` ### Hetzner Ryzen 9 7950X3D (15 GiB season pack) ```bash theme={null} hyperfine --warmup 1 --runs 5 \ 'mkbrr create The.Show.S02.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP --workers 64' \ 'mktorrent -l 24 The.Show.S02.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'torrenttools create --threads 64 The.Show.S02.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' \ 'torf --threads 64 The.Show.S02.1080p.SRC.WEB-DL.DDP5.1.H.264-GRP' ``` ```plaintext theme={null} # Benchmark 1: mkbrr create ... # Time (mean ± σ): 2.858 s ± 0.050 s [User: 16.465 s, System: 55.272 s] # Range (min … max): 2.817 s … 2.940 s 5 runs # # Benchmark 2: mktorrent ... # Time (mean ± σ): 16.825 s ± 0.273 s [User: 14.784 s, System: 1.669 s] # Range (min … max): 16.491 s … 17.112 s 5 runs # # Benchmark 3: torrenttools create ... # Time (mean ± σ): 3.111 s ± 0.091 s [User: 2.532 s, System: 2.796 s] # Range (min … max): 2.951 s … 3.169 s 5 runs # # Benchmark 4: torf ... # Time (mean ± σ): 3.063 s ± 0.070 s [User: 10.254 s, System: 2.806 s] # Range (min … max): 2.976 s … 3.172 s 5 runs # # Summary # 'mkbrr create ...' ran # 1.07 ± 0.03 times faster than 'torf --threads 64 ...' # 1.09 ± 0.04 times faster than 'torrenttools create ...' # 5.89 ± 0.14 times faster than 'mktorrent ...' ```