feat: terminal-native torrent discovery TUI

Curated, multi-source torrent search and download from the terminal:
concurrent search across built-in sources with streamed, source-tagged
results; a download-only webtorrent engine with true pause/resume and
restart recovery; magnet paste; and a calm Ink + React TUI. No indexer
server, no setup.
This commit is contained in:
bairon.dev
2026-06-27 02:03:19 -04:00
commit 60d7a9a755
71 changed files with 11293 additions and 0 deletions
+111
View File
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="832" height="452" viewBox="0 0 832 452" style="max-width: 832px; width: 100%; height: auto;" role="img">
<rect width="100%" height="100%" rx="14" fill="#0c0b14"/>
<rect x="0.5" y="0.5" width="831" height="451" rx="14" fill="none" stroke="#272430" stroke-width="1"/>
<text x="416" y="23" text-anchor="middle" font-family='ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace' font-size="13" fill="#8a8a8a">torlink</text>
<g font-family='ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace' font-size="16" fill="#ddd8ea">
<text x="99.2" y="84" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#5ae87a" font-weight="600">𐓏</text>
<rect x="51.2" y="90" width="9.6" height="11" fill="#faf5ff"/>
<rect x="60.8" y="90" width="9.6" height="22" fill="#f5ecff"/>
<rect x="70.4" y="90" width="9.6" height="11" fill="#f0e2ff"/>
<rect x="89.6" y="90" width="9.6" height="22" fill="#e6cffe"/>
<rect x="99.2" y="90" width="9.6" height="11" fill="#e1c5fe"/>
<rect x="108.8" y="90" width="9.6" height="22" fill="#dcbcfe"/>
<rect x="128" y="90" width="9.6" height="22" fill="#d3b0fe"/>
<rect x="137.6" y="90" width="9.6" height="11" fill="#d0adfd"/>
<rect x="147.2" y="90" width="9.6" height="22" fill="#ccaafd"/>
<rect x="166.4" y="90" width="9.6" height="22" fill="#c4a4fc"/>
<rect x="204.8" y="90" width="9.6" height="22" fill="#b597fb"/>
<rect x="224" y="90" width="9.6" height="22" fill="#ae91fb"/>
<rect x="233.6" y="101" width="9.6" height="11" fill="#aa8efa"/>
<rect x="252.8" y="90" width="9.6" height="22" fill="#a487f7"/>
<rect x="272" y="90" width="9.6" height="22" fill="#9e81f3"/>
<rect x="281.6" y="101" width="9.6" height="11" fill="#9b7ef0"/>
<rect x="291.2" y="90" width="9.6" height="11" fill="#997bee"/>
<rect x="60.8" y="112" width="9.6" height="22" fill="#9375e9"/>
<rect x="89.6" y="112" width="9.6" height="22" fill="#8b6ce2"/>
<rect x="99.2" y="123" width="9.6" height="11" fill="#8869e0"/>
<rect x="108.8" y="112" width="9.6" height="22" fill="#8566de"/>
<rect x="128" y="112" width="9.6" height="22" fill="#8060d9"/>
<rect x="137.6" y="112" width="9.6" height="11" fill="#7d5dd7"/>
<rect x="147.2" y="123" width="9.6" height="11" fill="#7a5bd3"/>
<rect x="166.4" y="112" width="9.6" height="22" fill="#7456c9"/>
<rect x="176" y="123" width="9.6" height="11" fill="#7154c4"/>
<rect x="185.6" y="123" width="9.6" height="11" fill="#6e52c0"/>
<rect x="204.8" y="112" width="9.6" height="22" fill="#684eb6"/>
<rect x="224" y="112" width="9.6" height="22" fill="#6249ac"/>
<rect x="243.2" y="112" width="9.6" height="11" fill="#5b45a2"/>
<rect x="252.8" y="112" width="9.6" height="22" fill="#58439d"/>
<rect x="272" y="112" width="9.6" height="22" fill="#523e94"/>
<rect x="291.2" y="112" width="9.6" height="22" fill="#4c3a8a"/>
<text x="41.6" y="150" textLength="748.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#6b6577">──────────────────────────────────────────────────────────────────────────────</text>
<text x="60.8" y="194" textLength="28.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">All</text>
<text x="204.8" y="194" textLength="19.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa">╭─</text>
<text x="233.6" y="194" textLength="124.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa" font-weight="600">Downloads (1)</text>
<text x="368" y="194" textLength="422.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa">───────────────────────────────────────────╮</text>
<text x="60.8" y="216" textLength="48" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Games</text>
<rect x="208.9" y="200" width="1.4" height="22" fill="#a78bfa"/>
<text x="224" y="216" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa" font-weight="600"></text>
<text x="243.2" y="216" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa"></text>
<text x="262.4" y="216" textLength="345.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa" font-weight="600">Dune: Part Two (2024) [2160p BluRay]</text>
<text x="656" y="216" textLength="67.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">7.82 GB</text>
<text x="742.4" y="216" textLength="28.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#86d6a2">YTS</text>
<rect x="784.9" y="200" width="1.4" height="22" fill="#a78bfa"/>
<text x="60.8" y="238" textLength="57.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Movies</text>
<rect x="208.9" y="222" width="1.4" height="22" fill="#a78bfa"/>
<rect x="262.4" y="222" width="9.6" height="22" fill="#7c5cd6"/>
<rect x="272" y="222" width="9.6" height="22" fill="#8060d9"/>
<rect x="281.6" y="222" width="9.6" height="22" fill="#8465dd"/>
<rect x="291.2" y="222" width="9.6" height="22" fill="#8869e0"/>
<rect x="300.8" y="222" width="9.6" height="22" fill="#8c6ee4"/>
<rect x="310.4" y="222" width="9.6" height="22" fill="#9072e7"/>
<rect x="320" y="222" width="9.6" height="22" fill="#9577eb"/>
<rect x="329.6" y="222" width="9.6" height="22" fill="#997bee"/>
<rect x="339.2" y="222" width="9.6" height="22" fill="#9d80f1"/>
<rect x="348.8" y="222" width="9.6" height="22" fill="#a184f5"/>
<rect x="358.4" y="222" width="9.6" height="22" fill="#a589f8"/>
<rect x="368" y="222" width="9.6" height="22" fill="#a98dfa"/>
<rect x="377.6" y="222" width="9.6" height="22" fill="#ae91fb"/>
<rect x="387.2" y="222" width="9.6" height="22" fill="#b395fb"/>
<text x="396.8" y="238" textLength="76.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#6b6577">░░░░░░░░</text>
<text x="492.8" y="238" textLength="211.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">64% 7.7 MB/s •41 6m</text>
<rect x="784.9" y="222" width="1.4" height="22" fill="#a78bfa"/>
<text x="60.8" y="260" textLength="19.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">TV</text>
<rect x="208.9" y="244" width="1.4" height="22" fill="#a78bfa"/>
<rect x="784.9" y="244" width="1.4" height="22" fill="#a78bfa"/>
<text x="60.8" y="282" textLength="48" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Anime</text>
<rect x="208.9" y="266" width="1.4" height="22" fill="#a78bfa"/>
<text x="224" y="282" textLength="230.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Recently downloaded (2)</text>
<rect x="784.9" y="266" width="1.4" height="22" fill="#a78bfa"/>
<rect x="208.9" y="288" width="1.4" height="22" fill="#a78bfa"/>
<text x="243.2" y="304" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#86d6a2" fill-opacity="0.55"></text>
<text x="262.4" y="304" textLength="230.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Elden Ring: Shadow of t…</text>
<text x="521.6" y="304" textLength="76.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">50.29 GB</text>
<text x="656" y="304" textLength="67.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">1hr ago</text>
<text x="752" y="304" textLength="19.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa" fill-opacity="0.55">FG</text>
<rect x="784.9" y="288" width="1.4" height="22" fill="#a78bfa"/>
<rect x="41.6" y="310" width="4.8" height="22" fill="#6b6577"/>
<text x="60.8" y="326" textLength="86.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#b9a7e6">Downloads</text>
<text x="156.8" y="326" textLength="28.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">(1)</text>
<rect x="208.9" y="310" width="1.4" height="22" fill="#a78bfa"/>
<text x="243.2" y="326" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#86d6a2" fill-opacity="0.55"></text>
<text x="262.4" y="326" textLength="230.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Breaking Bad S05E14 108…</text>
<text x="531.2" y="326" textLength="67.2" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">1.49 GB</text>
<text x="627.2" y="326" textLength="96" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">1d 1hr ago</text>
<text x="732.8" y="326" textLength="38.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#f0c560" fill-opacity="0.55">EZTV</text>
<rect x="784.9" y="310" width="1.4" height="22" fill="#a78bfa"/>
<rect x="208.9" y="332" width="1.4" height="22" fill="#a78bfa"/>
<rect x="784.9" y="332" width="1.4" height="22" fill="#a78bfa"/>
<rect x="208.9" y="354" width="1.4" height="22" fill="#a78bfa"/>
<rect x="784.9" y="354" width="1.4" height="22" fill="#a78bfa"/>
<text x="204.8" y="392" textLength="585.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#a78bfa">╰───────────────────────────────────────────────────────────╯</text>
<text x="41.6" y="414" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#b9a7e6">p</text>
<text x="60.8" y="414" textLength="48" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Pause</text>
<text x="137.6" y="414" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#b9a7e6">c</text>
<text x="156.8" y="414" textLength="57.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Cancel</text>
<text x="243.2" y="414" textLength="28.8" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#b9a7e6">tab</text>
<text x="281.6" y="414" textLength="105.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Switch pane</text>
<text x="416" y="414" textLength="9.6" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill="#b9a7e6">?</text>
<text x="435.2" y="414" textLength="38.4" lengthAdjust="spacingAndGlyphs" xml:space="preserve" fill-opacity="0.55">Keys</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB