diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c5793aa6a6d1..d0ffb344d269 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -3,7 +3,7 @@ > [!INFO] NOTE > Some of these steps are easier if you're in our [Discord](https://github.com/fmhy/FMHY/wiki/FMHY-Discord). It opens every Friday. -Here you'll find some general guidelines for those who would like to start contributing. There are multiple ways to do this: +Here you'll find some general guidelines for those who would like to start contributing. There are multiple ways to do this: - [Link Submissions](#submissions) - [Reporting an Existing Site](#reporting-a-site) @@ -22,8 +22,8 @@ Here you'll find some general guidelines for those who would like to start contr - **🌐 Web Browsers** - Good open-source browsers are already listed, so we just accept indexes, privacy-focused, and good mobile ones. - **🔻 Leeches** - Unless it's not already listed on existing [Leech Lists](/downloading#debrid-leeches), don't submit these. - **🐧 Linux Distros** - Already listed on [Index Sites](/linux-macos#linux-distros). -- **🌍 Non-english Software** - We don't add non-english software sites (APKs, games, torrents, etc.) unless they have a very good reputation. -- **🗂️ Coding Libraries** - There's too many of them and there are better places to find them. +- **🌍 Non-English Software** - We don't add non-English software sites (APKs, games, torrents, etc.) unless they have a very good reputation. +- **🗂️ Coding Libraries** - There are too many of them, and there are better places to find them. - **🎲 Mining / Betting Sites** - Don't submit anything related to betting, mining, BINs, CCs, etc. - **🎮 Multiplayer Hacks** - Don't submit any hacks or exploits that give an unfair advantage in multiplayer games. - **🖥️ Custom OSs** - We don't recommend people use these. @@ -34,7 +34,7 @@ For submitting new links, follow these steps: - Make sure it's not already in the wiki. The easiest way to do this is to check our [Single Page](https://fmhy.net/single-page.md) / [2](https://api.fmhy.net/single-page) using `ctrl+f`. - Don't spam a bunch of un-tested links at once. Try to only send things you genuinely feel might be worth adding. -- Reach out via the feedback system, [GitHub](https://github.com/fmhy/edit), or join our [Discord](https://github.com/fmhy/FMHY/wiki/FMHY-Discord). Note that we have to check sites ourselves, so using an issue, rather than pull request is easier. +- Reach out via the feedback system, [GitHub](https://github.com/fmhy/edit), or join our [Discord](https://github.com/fmhy/FMHY/wiki/FMHY-Discord). Note that we have to check sites ourselves, so using an issue rather than a pull request is easier. - You can optionally include socials, tools, or any other additional info alongside the entry. ### Reporting a Site @@ -52,13 +52,13 @@ For changes to existing entries, follow these steps: All additions have to first go through our testing process on [Discord](https://github.com/fmhy/FMHY/wiki/FMHY-Discord). -You can help us test new sites to figure out their use-case, safety, and whether they'd be a good fit for the wiki. +You can help us test new sites to figure out their use case, safety, and whether they'd be a good fit for the wiki. -Keep in mind certain sites (such as piracy sites) require more testing/vetting before they can be added. +Keep in mind that certain sites (such as piracy sites) require more testing/vetting before they can be added. ### Formatting Rules -The wiki will always have some variation either due to exceptions being made, the layout/structure, or the flexible nature of markdown itself. +The wiki will always have some variation due to exceptions, its layout and structure, and the flexible nature of Markdown itself. For these reasons, there are too many conditions and nuances to satisfy to make an easy-to-follow guide. However, you can generally get an idea by looking at how existing links are structured. @@ -68,7 +68,7 @@ If you're unsure, ask in the wiki channels on [Discord](https://github.com/fmhy/ ## Making Changes -Instructions on various ways to edit the wiki and preview changes. +Instructions on various ways to edit the wiki and preview changes. ### GitHub Editor @@ -89,7 +89,7 @@ You can use the built-in web editor in two ways: 2. Navigate to your fork's homepage and press the `.` (period) key on your keyboard. This will open the repository in a VSCode-like environment on `github.dev`. 3. Make your changes, then commit via the source control tab. - + ![Source Control](https://files.catbox.moe/pa571v.png) 4. Back on your fork's homepage, click "Contribute" then "Open pull request". @@ -106,13 +106,13 @@ This creates an environment in the browser [(with 60h/month free quota)](https:/ 1. Fork the repository by clicking the "Fork" button in the top right. -2. Navigate to your fork's homepage and click on the green "Code" button above your repository, open "Codespaces" tab and click "Create codespace". +2. Navigate to your fork's homepage, click the green "Code" button above your repository, open the "Codespaces" tab, and click "Create codespace". 3. You may have to wait ~5-10 minutes for the codespace to load. ![Codespace Status](https://files.catbox.moe/5bp38f.png) -4. Once it has loaded, run `pnpm i && pnpm docs:dev` to start the preview. Then when it appears, click "Open in Browser" in the bottom right. +4. Once it has loaded, run `pnpm i && pnpm docs:dev` to start the preview. When it appears, click "Open in Browser" in the bottom right. 5. Make your changes and commit. diff --git a/docs/.vitepress/notes/general-tweak-warning.md b/docs/.vitepress/notes/general-tweak-warning.md index 889674fd3532..aa70505ca7fb 100644 --- a/docs/.vitepress/notes/general-tweak-warning.md +++ b/docs/.vitepress/notes/general-tweak-warning.md @@ -1,3 +1,3 @@ #### General Tweak Warning -Make sure you know what you're doing before you apply these tweaks. Always research first, never just "Apply All" without knowing what what will happen. +Make sure you know what you're doing before you apply these tweaks. Always research first, never just "Apply All" without knowing what will happen. diff --git a/docs/.vitepress/notes/hagezi.md b/docs/.vitepress/notes/hagezi.md index dd0f366178dc..c1f1c0409297 100644 --- a/docs/.vitepress/notes/hagezi.md +++ b/docs/.vitepress/notes/hagezi.md @@ -1 +1 @@ -Note that Hagezi does have a Anti-Piracy Blocklist, but it is totally optional, and is [disabled by default](https://i.ibb.co/mrpsX6KK/image.png) / [2](https://i.imgur.com/EXTbohV.png) in all of their blocklist versions. \ No newline at end of file +Note that Hagezi does have an Anti-Piracy Blocklist, but it is totally optional, and is [disabled by default](https://i.ibb.co/mrpsX6KK/image.png) / [2](https://i.imgur.com/EXTbohV.png) in all of their blocklist versions. diff --git a/docs/.vitepress/notes/limit-bypass-note.md b/docs/.vitepress/notes/limit-bypass-note.md index 9a2619065961..949dc131bd74 100644 --- a/docs/.vitepress/notes/limit-bypass-note.md +++ b/docs/.vitepress/notes/limit-bypass-note.md @@ -1,3 +1,3 @@ #### Limit Bypass Note -Apple only allows you to sideload 3 apps (including SideStore) using a free Apple Account. To bypass this limit on SideStore, you can use [SparseBox](https://docs.sidestore.io/docs/advanced/alternative#sidestore-exploits) / [Guide](https://docs.sidestore.io/docs/advanced/alternative#sidestore-exploits) (iOS 17.0 - 18.1 Beta 4, not including 17.7.1, 17.7.2) or [LiveContainer](https://github.com/LiveContainer/LiveContainer) (iOS 16+). \ No newline at end of file +Apple only allows you to sideload 3 apps (including SideStore) using a free Apple Account. To bypass this limit on SideStore, you can use [SparseBox](https://docs.sidestore.io/docs/advanced/alternative#sidestore-exploits) / [Guide](https://docs.sidestore.io/docs/advanced/alternative#sidestore-exploits) (iOS 17.0 - 18.1 Beta 4, not including 17.7.1, 17.7.2) or [LiveContainer](https://github.com/LiveContainer/LiveContainer) (iOS 16+). diff --git a/docs/.vitepress/notes/movie-web-sources.md b/docs/.vitepress/notes/movie-web-sources.md index 01da75feff79..ce0783e8263a 100644 --- a/docs/.vitepress/notes/movie-web-sources.md +++ b/docs/.vitepress/notes/movie-web-sources.md @@ -1,5 +1,5 @@ #### Adding sources to P-Stream (and all movie-web forks) -You can enable a extension: [Firefox](https://addons.mozilla.org/firefox/addon/p-stream-extension-v1/) / [Chrome](https://chromewebstore.google.com/detail/p-stream-enchanced/geimjiobahmbkmaigaafjnoanebpmlmj) / [script](https://github.com/xp-technologies-dev/userscript) that will add more sources, but it needs to connect to all sites to function. The extension is safe, and many people use it, the permissions are just needed in order for the extension to work correctly. +You can enable an extension: [Firefox](https://addons.mozilla.org/firefox/addon/p-stream-extension-v1/) / [Chrome](https://chromewebstore.google.com/detail/p-stream-enchanced/geimjiobahmbkmaigaafjnoanebpmlmj) / [script](https://github.com/xp-technologies-dev/userscript) that will add more sources, but it needs to connect to all sites to function. The extension is safe, and many people use it, the permissions are just needed in order for the extension to work correctly. -Note that you can run it in a new browser or fresh browser profile if you don't want to use your main browser. \ No newline at end of file +Note that you can run it in a new browser or fresh browser profile if you don't want to use your main browser. diff --git a/docs/.vitepress/notes/strawberry-note.md b/docs/.vitepress/notes/strawberry-note.md index 1bee222bed8e..933771d20da6 100644 --- a/docs/.vitepress/notes/strawberry-note.md +++ b/docs/.vitepress/notes/strawberry-note.md @@ -1,3 +1,3 @@ #### Strawberry Note -Downloads for Windows & Mac are only availabe on their [Patreon](https://www.patreon.com/jonaskvinge) (paid monthly sub required) \ No newline at end of file +Downloads for Windows & Mac are only available on their [Patreon](https://www.patreon.com/jonaskvinge) (paid monthly sub required) diff --git a/docs/ai.md b/docs/ai.md index 399673bbe9ca..07167f5cbb3b 100644 --- a/docs/ai.md +++ b/docs/ai.md @@ -16,7 +16,7 @@ * ⭐ **[DeepSeek](https://chat.deepseek.com/)** - DeepSeek V4 Pro 0813 / DeepSeek V4 Flash / Sign-Up / Unlimited / [Add Features](https://github.com/EdgeTypE/better-deepseek/) / [Subreddit](https://www.reddit.com/r/DeepSeek/) / [Discord](https://discord.com/invite/Tc7c45Zzu5) / [GitHub](https://github.com/deepseek-ai) * ⭐ **[⁠Z.ai](https://chat.z.ai/)** - GLM 5.3 / Agent / Slides / Sign-Up / [Discord](https://discord.gg/QR7SARHRxK) / [GitHub](https://github.com/zai-org) * ⭐ **[Google AI Studio](https://aistudio.google.com/app/prompts/new_chat)** - Gemini 3.7 Flash / Gemini 3.1 Pro Preview / Gemini 3.5 Flash-Lite / Google Sign-Up / [Add Features](https://github.com/Nagi-ovo/voyager) / [Subreddit](https://www.reddit.com/r/Bard/) / [Discord](https://discord.com/invite/gemini) -* ⭐ **[Gemini](https://gemini.google.com/)** - Gemini 3.6 Flash / Gemini 3.1 Pro Preview / Gemini 3.5 Flash-Lite / [Add Features](https://github.com/Nagi-ovo/voyager) / [Limits](https://support.google.com/gemini/answer/16275805) / [Subreddit](https://www.reddit.com/r/Bard/) / [Discord](https://discord.com/invite/gemini) +* ⭐ **[Gemini](https://gemini.google.com/)** - Gemini 3.6 Flash / Gemini 3.1 Pro Preview / Gemini 3.5 Flash-Lite / [Add Features](https://github.com/Nagi-ovo/voyager) / [Limits](https://support.google.com/gemini/answer/16275805) / [Subreddit](https://www.reddit.com/r/Bard/) / [Discord](https://discord.com/invite/gemini) * [Meta AI](https://www.meta.ai/) - Muse Spark 1.2 / Muse Glimmer 30B / Meta Sign-Up / Unlimited * [Kimi](https://www.kimi.ai/), [2](https://www.kimi.com/) - Kimi K3 / Slides / Google Login or Phone # Required / [Subreddit](https://www.reddit.com/r/kimi/) / [Discord](https://discord.gg/TYU2fdJykW) / [GitHub](https://github.com/MoonshotAI) * [ChatGPT](https://chatgpt.com/) - GPT-5.6 Luna / Unlimited / [Add Features](https://github.com/Nagi-ovo/voyager) / [r/OpenAI](https://www.reddit.com/r/OpenAI/) / [r/ChatGPT](https://www.reddit.com/r/ChatGPT/) / [Discord](https://discord.com/invite/openai) / [Limits](https://help.openai.com/en/articles/9275245-chatgpt-free-tier-faq#how-do-rate-limits-work-on-the-free-tier) diff --git a/docs/audio.md b/docs/audio.md index 05bc722cdd7f..48cdb50dc383 100644 --- a/docs/audio.md +++ b/docs/audio.md @@ -125,7 +125,7 @@ * [Rave Recording](https://rentry.co/FMHYB64#rave-library) - Rave Recordings / Archive * [Volume](https://volume.com/) - Live Cam Concerts * [ConcertArchives](https://www.concertarchives.org/) or [⁠EntertainMe](https://www.entertainme.fun/) - Concert Tracking / Database -* [SongKick](https://www.songkick.com/), [ConcertArchives](https://www.concertarchives.org/) or [FindYourFest](https://www.findyourfest.com/) - Find Concerts / Music Festivals +* [SongKick](https://www.songkick.com/) or [FindYourFest](https://www.findyourfest.com/) - Find Concerts / Music Festivals * [Cadenza](http://www.cadenza.org/) - Find Classical / Contemporary Concerts * [Konserthuset](https://www.konserthuset.se/en/play/) - Orchestra Recordings * [WorldConcertHall](https://www.worldconcerthall.com/en/schedule-list/) - Concert Hall / Opera House Live Streams @@ -617,7 +617,7 @@ * [VGMRips](https://vgmrips.net/packs/) - Retro Game Music Rips / VGM * [Zophar's](https://www.zophar.net/music) - Retro Game Music Rips / VGM * [HCS Forum](https://rentry.co/FMHYB64#hcs-forum) - Game Soundtracks -* [exotica](https://www.exotica.org.uk/) - Amiga Games Soundtracks +* [exotica](https://www.exotica.org.uk/) - Amiga Game Soundtracks / Retro Gaming Music Wiki * [⁠OC Remix](https://ocremix.org/) - Game Music Remixes / Download / Torrent * [⁠8Beats](https://8beats.co/) - Game Music Radio / [Discord](https://discord.gg/EB9CFRacgN) * [⁠CVGM](http://cvgm.net/) - Game Music Radio @@ -629,7 +629,6 @@ * [VGM](https://vgm.mmosvc.com/) - Game Music Radio * [NSF j](https://nsf.nesbbs.com/) - NES Music * [HVSC](https://www.hvsc.c64.org/) - Commodore 64 Music -* [Exotica](https://www.exotica.org.uk/) - Retro Gaming Music Wiki * [VGMdb](https://vgmdb.net/) - Video Game Music Database *** diff --git a/docs/developer-tools.md b/docs/developer-tools.md index a9ea7293d6e8..f26fbe2c538d 100644 --- a/docs/developer-tools.md +++ b/docs/developer-tools.md @@ -791,7 +791,7 @@ * [Can I Use?](https://caniuse.com/) - Browser Support Tables * [PocketBase](https://pocketbase.io/) / [GitHub](https://github.com/pocketbase/pocketbase) or [Neon](https://neon.com/) / [GitHub](https://github.com/neondatabase/neon) - Open-Source Backend Platforms * [⁠CS Chromium](https://cs.chromium.org/) - Chromium Code Search -* [Caddy](https://caddyserver.com/) / [GitHub](https://github.com/caddyserver/caddy or [Nginx](https://nginx.org/) - Web Servers +* [Caddy](https://caddyserver.com/) / [GitHub](https://github.com/caddyserver/caddy) or [Nginx](https://nginx.org/) - Web Servers * [Directory Lister](https://directorylister.com/) - Web-Based Directory Listing * [BawkBox](https://bawkbox.com/) - Website Widgets * [The SSO Wall of Shame](https://sso.tax/) - Vendors without Built-in SSO @@ -932,7 +932,7 @@ ## ▷ WordPress Tools -* ⭐ **[Weadown](https://weadown.com/)** or [DDLCode](https://ddlcode.com/) - Premium Themes / Plugins +* ⭐ **[Weadown](https://weadown.com/)** or [DDLCode](https://ddlcode.com/) - Premium Themes / Plugins * ⭐ **[GPLDL](https://gpldl.com/)** - Premium Themes / Plugins / 25 Monthly / Requires Sign-Up * [Babiato](https://babia.to/) - Themes / Plugins Forum / Requires Sign-Up * [Visual CSS Editor](https://chromewebstore.google.com/detail/visual-css-editor/cibffnhhlfippmhdmdkcfecncoaegdkh) - WordPress Site Designer @@ -1072,7 +1072,7 @@ * [CGIWebHost.com](https://www.cgiwebhost.com/) - 1GB Storage / 5GB Bandwidth / 1 DB * [FreeHostingNoAds.net](https://freehostingnoads.net/) - 1GB Storage / 5GB Bandwidth / 1 DB * [100WebSpace.com](https://www.100webspace.com/) - 100MB Storage / 3GB Bandwidth / 1 DB -* [netlify](https://www.netlify.com/) - 300 Credits [Monhtly](https://docs.netlify.com/manage/accounts-and-billing/billing/billing-for-credit-based-plans/how-credits-work/#credits-usage-for-metered-billing) +* [netlify](https://www.netlify.com/) - 300 Credits / [Monthly](https://docs.netlify.com/manage/accounts-and-billing/billing/billing-for-credit-based-plans/how-credits-work/#credits-usage-for-metered-billing) * [50Webs.com](https://www.50webs.com/) - 500MB Storage / 5GB Bandwidth / 0 DB * [Somee.com](https://somee.com/) - 150MB Storage / 5GB Bandwidth / 1 DB * [FreeWebPageHost.Net](https://freewebpagehost.net/) - 1GB Storage / 5GB Bandwidth / 1 DB @@ -1254,4 +1254,4 @@ * [MSTG](https://mas.owasp.org/) or [DVIA-v2](https://github.com/prateek147/DVIA-v2) - App Security Testing / Reverse Engineering * [Malimite](https://github.com/LaurieWired/Malimite) - iOS / macOS Decompiler * [challenges.re](https://challenges.re/) - Reverse Engineer Code -* [horsicq](https://horsicq.github.io/) or [⁠CheckFileType](https://www.checkfiletype.com/) - File Type Identification Tools / [GitHub](https://github.com/horsicq/) \ No newline at end of file +* [horsicq](https://horsicq.github.io/) or [⁠CheckFileType](https://www.checkfiletype.com/) - File Type Identification Tools / [GitHub](https://github.com/horsicq/) diff --git a/docs/downloading.md b/docs/downloading.md index ae7c3914cbdf..f411fa706c00 100644 --- a/docs/downloading.md +++ b/docs/downloading.md @@ -214,7 +214,6 @@ * ⭐ **[sabnzbd](https://sabnzbd.org/)** / Windows, macOS, Linux / [Grabber](https://github.com/lem6ns/sabgrab) * ⭐ **[NZBUnity](https://github.com/tumblfeed/nzbunity)** - Send NZBs to Client / [Firefox](https://addons.mozilla.org/en-US/firefox/addon/nzb-unity/) / [Chrome](https://chromewebstore.google.com/detail/nzb-unity/mpejfoghnejnbfkpbiafklkmlhebkapb) * [NZBGet](https://nzbget.com/) / [GitHub](https://github.com/nzbgetcom/nzbget) -* [⁠magicNZB](https://magicnzb.com/) - 30 Day Trial (reset w/ temp mail) * [Usenet File Hashes](https://gist.github.com/4chenz/de3a3490aff19fd72e4fdd9b7dafc8f4) - Link File Hashes *** @@ -247,4 +246,4 @@ *** -# ► [Download Managers](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/file-tools#wiki_.25B7_download_managers) \ No newline at end of file +# ► [Download Managers](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/file-tools#wiki_.25B7_download_managers) diff --git a/docs/educational.md b/docs/educational.md index c3a351676f42..afda644b72ef 100644 --- a/docs/educational.md +++ b/docs/educational.md @@ -149,7 +149,7 @@ * [TIB AV-Portal](https://av.tib.eu/) - Science Videos * [LabXchange](https://www.labxchange.org/), [JavaLab](https://javalab.org/en/) or [EduMedia](https://www.edumedia.com/) - Interactive Science Simulations * [⁠MagnifiedSand](https://magnifiedsand.com/) - Microscopic Sand Magnification Database -* [BOINC](https://boinc.berkeley.edu/) - Donate Idle GPU + GPU Resources to Scientific Research / [Manager](https://boinc.berkeley.edu/central/) / [Number Theory](https://numberfields.asu.edu/NumberFields/) / [Humanitarian](https://worldcommunitygrid.org/) / [Subreddit](https://www.reddit.com/r/BOINC/) +* [BOINC](https://boinc.berkeley.edu/) - Donate Idle CPU + GPU Resources to Scientific Research / [Manager](https://boinc.berkeley.edu/central/) / [Number Theory](https://numberfields.asu.edu/NumberFields/) / [Humanitarian](https://worldcommunitygrid.org/) / [Subreddit](https://www.reddit.com/r/BOINC/) *** @@ -853,7 +853,7 @@ * [AudioZ](https://audioz.download/tutorials/) - Audio Courses / [Forum](https://audiosex.pro/) * [ProducerLibrary](https://producerlibrary.carrd.co/) - Audio Production Tutorials * [Helio](https://helio.fm/) / [GitHub](https://github.com/helio-fm/helio-sequencer) or [NoteHeads](https://noteheads.net/) - Music Composition Tools -* [Circle of Fifths](https://muted.io/circle-of-fifths/) - Visualize Notes, Cords and Keys +* [Circle of Fifths](https://muted.io/circle-of-fifths/) - Visualize Notes, Chords and Keys * [ScoreCloud](https://scorecloud.com/), [ChordReader2](https://github.com/AndInTheClouds/chordreader2) or [Chordify](https://chordify.net/) - Chord Detection / Transcriber * [Arpeggiator](https://codepen.io/jakealbaugh/full/qNrZyw), [Chordi](https://chordi.co/), [Chord Player](https://www.onemotion.com/chord-player/) or [AutoChords](https://autochords.com/) - Chord Progression Generators * [HookTheory](https://www.hooktheory.com/trends) - Chord Progression Library @@ -1649,7 +1649,7 @@ * 🌐 **[Everything AI/ML](https://viveknaskar.github.io/everything-ai-ml/)** - LLM Learning Resources / [GitHub](https://github.com/viveknaskar/everything-ai-ml) * ↪️ **[Machine Learning Resources](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/ai#wiki_.25BA_machine_learning)** * [Awesome Free AI Books](https://github.com/MarcosSete/awesome-free-ai-books), [AI-For-Beginners](https://github.com/microsoft/AI-For-Beginners), [mlsysbook](https://www.mlsysbook.ai/), [udlbook](https://udlbook.github.io/udlbook/) / [GitHub](https://github.com/udlbook/udlbook/), [ML Engineering](https://github.com/stas00/ml-engineering), [Beginner Guides](https://microsoft.github.io/generative-ai-for-beginners/) or [HF Learn](https://huggingface.co/learn) - Machine Learning Books / Guides -* [LLM Course](https://github.com/mlabonne/llm-course), [DeepLearningWizard](https://www.deeplearningwizard.com/), [IAILab](https://iailab.kaist.ac.kr/teaching/deep-learning), [Handson ML3](https://github.com/ageron/handson-ml3) or [⁠Anthropic Courses](https://anthropic.skilljar.com/) - Machine Learning Courses +* [LLM Course](https://github.com/mlabonne/llm-course), [DeepLearningWizard](https://www.deeplearningwizard.com/), [IAILab](https://iailab.kaist.ac.kr/teaching/deep-learning), [Handson ML3](https://github.com/ageron/handson-ml3) or [⁠Anthropic Courses](https://anthropic.skilljar.com/) - Machine Learning Courses * [ML YouTube Courses](https://github.com/dair-ai/ML-YouTube-Courses) or [Deep Learning Drizzle](https://deep-learning-drizzle.github.io/) - Machine Learning Courses on YouTube * [Machine Learning Roadmap](https://rentry.org/machine-learning-roadmap) - Machine Learning Roadmap / Guide * [ML Course Notes](https://github.com/dair-ai/ML-Course-Notes) - Machine Learning Course Notes @@ -1909,4 +1909,4 @@ * [WikiNearby](https://wikinearby.toolforge.org/) - Location Search * [⁠Cite Unseen](https://meta.wikimedia.org/wiki/Cite_Unseen) - Adds Reliability Symbols to Sources / Account Required * [EntiTree](https://www.entitree.com/) - WikiData Visualization Tool / [GitHub](https://github.com/codeledge/entitree) -* [Wiki Timeline](https://wiki-timeline.com/) - Create Timelines from Wiki Articles \ No newline at end of file +* [Wiki Timeline](https://wiki-timeline.com/) - Create Timelines from Wiki Articles diff --git a/docs/file-tools.md b/docs/file-tools.md index 8b69183eea8a..2eb918b7437c 100644 --- a/docs/file-tools.md +++ b/docs/file-tools.md @@ -344,7 +344,7 @@ * [⁠storage.to](https://storage.to/) - 25GB / 7 Days * [Mocha](https://mocha.my/) - 15GB / 30 Days / Signup Required / [Multi-Tool App](https://github.com/nxllvxxd/Mocha-Tools) / [Lite Version](https://lite.mocha.my/) (500MB, No Signup) * [Litterbox](https://litterbox.catbox.moe/) - 1GB / 3 Days -* [⁠DropDrive](https://dropdrive.org/) - 100GB / 30 Days After Last Download +* [⁠DropDrive](https://dropdrive.org/) - 100GB / 30 Days After Last Download * [Transfer.it](https://transfer.it/) - Unlimited / 90 Days / Owned by MEGA.nz * [MediaFire](https://www.mediafire.com/) - 4GB / Forever * [Hxfile](https://hxfile.co/), [2](https://down.mdiaload.com/), [3](https://down.fast-down.com/) - 5GB / 180 Days After Last View @@ -487,4 +487,4 @@ * ⭐ **[MEGA Account Generators](https://rentry.co/FMHYB64#mega-gen)** - Account Gen / Unlimited Upload Size / [Fix](https://rentry.co/mega_account_generator) * [Clonr](https://clonr.co/) - MEGA Link Direct Downloader * [MEGA Desktop](https://mega.io/desktop) - Official GUI App / [GitHub](https://github.com/meganz/MEGAsync) -* [MEGA CMD](https://mega.io/cmd) - Official CLI App / [GitHub](https://github.com/meganz/MEGAcmd) \ No newline at end of file +* [MEGA CMD](https://mega.io/cmd) - Official CLI App / [GitHub](https://github.com/meganz/MEGAcmd) diff --git a/docs/gaming-tools.md b/docs/gaming-tools.md index cfe2a548157a..35f3b150fbda 100644 --- a/docs/gaming-tools.md +++ b/docs/gaming-tools.md @@ -477,7 +477,7 @@ * 🌐 **[FreeHosts](https://freehosts.eu/hosts?target=Gaming)** - Free Game Hosting Provider Index * ⭐ **[TrackyServer](https://www.trackyserver.com/)** - Find Private Multiplayer Servers -* ⭐ **[Pelican](https://pelican.dev/)** / [GitHub](https://github.com/pelican/panel), [Calagopus](https://calagopus.com/) / [Discord](https://discord.gg/uSM8tvTxBV) / [GitHub](https://calagopus.com/) or [Pterodactyl](https://github.com/pterodactyl/panel) / [Discord](https://discord.gg/pterodactyl) - Game Server Management Panels +* ⭐ **[Pelican](https://pelican.dev/)** / [GitHub](https://github.com/pelican/panel), [Calagopus](https://calagopus.com/) / [Discord](https://discord.gg/uSM8tvTxBV) / [GitHub](https://github.com/calagopus/panel) or [Pterodactyl](https://github.com/pterodactyl/panel) / [Discord](https://discord.gg/pterodactyl) - Game Server Management Panels * ⭐ **[Playit.gg](https://playit.gg/)** - Global Proxy / Signup Required / [Discord](https://discord.gg/AXAbujx) * [Server.pro](https://server.pro/) - Game Server Hosting * [Impostor](https://impostor.github.io/Impostor/) - Among Us Private Server / [Discord](https://discord.com/invite/Mk3w6Tb) diff --git a/docs/gaming.md b/docs/gaming.md index 05ee51aec858..455fec0c91fb 100644 --- a/docs/gaming.md +++ b/docs/gaming.md @@ -324,7 +324,7 @@ * [⁠ROM Duplicate Manager](https://github.com/Anach/ROM_Duplicate_Manager) - Remove Duplicate ROM Files * [Hash Tool](https://www.romhacking.net/hash/) - ROM Patch Compatibility Checker * [⁠ROM Converto](https://github.com/DevYukine/rom-converto) - ROM Converter -* [RomPatcher](https://www.marcrobledo.com/RomPatcher.js/) / [GitHub](https://github.com/marcrobledo/RomPatcher.js/), [Rom Patcher JS](https://www.romhacking.net/patch/), [Hack64 Patcher](https://hack64.net/tools/patcher.php) or [FFF6Hacking Patcher](https://www.ff6hacking.com/patcher/) - Online ROM Patchers +* [RomPatcher](https://www.marcrobledo.com/RomPatcher.js/) / [GitHub](https://github.com/marcrobledo/RomPatcher.js/), [2](https://www.romhacking.net/patch/), [Hack64 Patcher](https://hack64.net/tools/patcher.php) or [FFF6Hacking Patcher](https://www.ff6hacking.com/patcher/) - Online ROM Patchers * [No-Intro](https://no-intro.org/) - Cartridge (etc) Hash Database / [Discord](https://discord.gg/dvk6W6vZmp) * [Redump](https://redump.info/) - Disc Hash Database * [Dats.site](https://dats.site/) - Scene Release Hash Database diff --git a/docs/linux-macos.md b/docs/linux-macos.md index de60297eb305..bec59a1c8f70 100644 --- a/docs/linux-macos.md +++ b/docs/linux-macos.md @@ -586,7 +586,7 @@ * [Ant](https://github.com/EliverLara/Ant) - Light Linux Theme * [AeroThemePlasma](https://github.com/WackyIdeas/aerothemeplasma) / [2](https://gitgud.io/wackyideas/aerothemeplasma) or [VistaThemePlasma](https://gitgud.io/catpswin56/vistathemeplasma/) - Windows 7 / Vista Themes for KDE Plasma * [XScreenSaver](https://www.jwz.org/xscreensaver/) - Linux Screensavers -* [⁠Waywallen](https://github.com/waywallen/waywallen), [varietywalls](https://github.com/varietywalls/variety) or [HydraPaper](https://hydrapaper.gabmus.org/) - Wallpaper Managers +* [⁠Waywallen](https://github.com/waywallen/waywallen), [varietywalls](https://github.com/varietywalls/variety) or [HydraPaper](https://hydrapaper.gabmus.org/) - Wallpaper Managers * [Video Wallpaper](https://github.com/ghostlexly/gpu-video-wallpaper) or [Hidamari](https://github.com/jeffshee/hidamari) - Use Videos as Animated Wallpapers * [⁠tint](https://github.com/ashish0kumar/tint) - Recolor Wallpapers for System Scheme / [GUI](https://github.com/lighttigerXIV/catppuccinifier) * [Polychromatic](https://polychromatic.app/) or [OpenRazer](https://openrazer.github.io/) - Linux System Light Control @@ -862,7 +862,7 @@ * ⭐ **[PeaZip](https://peazip.github.io/peazip-macos.html)** / [GitHub](https://github.com/peazip/PeaZip/), [⁠ShichiZip](https://github.com/idawnlight/ShichiZip), [The Unarchiver](https://theunarchiver.com/), [unxip](https://github.com/saagarjha/unxip) or [Keka](https://www.keka.io/en/) - File Archivers * ⭐ **[Readdle](https://readdle.com/documents)** - Multipurpose File Tool -* [Neodisk](https://neodisk.app/) - Disk Usage Analyzer / [GitHub](https://github.com/tkslucas/Neodisk) +* [Neodisk](https://neodisk.app/) - Disk Usage Analyzer / [GitHub](https://github.com/tkslucas/Neodisk) * [OpenMTP](https://openmtp.ganeshrvel.com/) - macOS / Android File Transfer / [GitHub](https://github.com/ganeshrvel/openmtp) * [Progress](https://github.com/Xfennec/progress) - Show Copied Data Progress * [Bruji](https://www.bruji.com/) - Media Cataloging Software Suite diff --git a/docs/misc.md b/docs/misc.md index 0a7b72154f3b..afbb125dcb38 100644 --- a/docs/misc.md +++ b/docs/misc.md @@ -1781,7 +1781,7 @@ * [WorldCam](https://worldcam.eu/) * [⁠Tomarigi](https://tomarigi.me/world) * [Mangolink World](https://www.mangolinkworld.com/) -* [Insecam](http://www.insecam.org/en/) +* [Insecam](http://www.insecam.org/en/) - Public Surveillance Webcams * [CameraFTP](https://www.cameraftp.com/cameraftp/publish/publishedcameras.aspx) * [WebcamGalore](https://www.webcamgalore.com/) * [Windy Webcams](https://www.windy.com/-Webcams/webcams) @@ -1792,7 +1792,6 @@ * [⁠CCTV-World](https://www.cctv-world.kr/) - South Korea Live Cams * [meow.camera](https://meow.camera/) - Chinese Cat Cams / [Android](https://play.google.com/store/apps/details?id=com.hello.purr) / [iOS](https://apps.apple.com/app/id6475722361) / [Discord](https://discord.com/invite/QmHWpZF9cP) * [The Fish Doorbell](https://visdeurbel.nl/en/) - Help Fish Migrate -* [Insecam](http://www.insecam.org/en/) - Public Surveillance Webcams * [r/controllablewebcams](https://reddit.com/r/controllablewebcams) / [Discord](https://discord.gg/wdjtevG) * [snoweye](https://www.snoweye.com/) - Ski Resorts * [Airport Webcams](https://airportwebcams.net/) / [X](https://x.com/AirportWebcams) @@ -1880,4 +1879,4 @@ * [DownloadHardware](https://downloadhardware.com/) - Download Computer Hardware * [The Restart Page](http://www.therestartpage.com/) - Vintage Operating System Reboots * [Windows XP Error Worm](https://ybenbihi.github.io/windows-error-worm/) - Click & Drag Windows Errors -* [HackTyper](https://hackertyper.net/), [HackerTyper](https://hackertyper.com/), [Hoacks](https://hoacks.com/) or [Geektyper](https://geektyper.com/) - Fake Hacking Screen \ No newline at end of file +* [HackTyper](https://hackertyper.net/), [HackerTyper](https://hackertyper.com/), [Hoacks](https://hoacks.com/) or [Geektyper](https://geektyper.com/) - Fake Hacking Screen diff --git a/docs/mobile.md b/docs/mobile.md index ba9b6102d55b..9076fa78257d 100644 --- a/docs/mobile.md +++ b/docs/mobile.md @@ -254,13 +254,13 @@ * [Muzei](https://muzei.co/), [Doodle](https://patrickzedler.com/doodle/) or [Amoled Backgrounds](https://play.google.com/store/apps/details?id=com.droidheat.amoledbackgrounds) - Live Wallpapers * [r/iWallpaper](https://www.reddit.com/r/iWallpaper/) or [r/MobileWallpaper](https://www.reddit.com/r/MobileWallpaper/) - Mobile Wallpaper Subs * [wallhaven.cc](https://wallhaven.cc/search?categories=110&purity=100&ratios=portrait) - Wallpapers / Some NSFW -* [⁠Wallpapers Clan](https://wallpapers-clan.com/) - Wallpapers +* [⁠Wallpapers Clan](https://wallpapers-clan.com/) - Wallpapers / Custom Icon Packs * [wallman](https://gitlab.com/colorata/wallman) - Wallpapers * [WallYou](https://github.com/you-apps/WallYou) - Wallpapers * [Paperize](https://github.com/Anthonyy232/Paperize) - Wallpapers * [r/Amoledbackgrounds](https://www.reddit.com/r/Amoledbackgrounds/) - Amoled Wallpapers ⁠ * [Diffuse](https://diffuse.app/) - Live Audio Wallpapers -* [Candybar](https://github.com/zixpo/candybar), [⁠Wallpapers Clan](https://wallpapers-clan.com/), [Arcticons](https://arcticons.com/) or [Alembicons](https://f-droid.org/packages/com.kaanelloed.iconeration/) - Custom Icon Packs +* [Candybar](https://github.com/zixpo/candybar), [Arcticons](https://arcticons.com/) or [Alembicons](https://f-droid.org/packages/com.kaanelloed.iconeration/) - Custom Icon Packs * [Phonetones](https://rentry.co/FMHYB64#phonetones) - Ringtones *** diff --git a/docs/non-english.md b/docs/non-english.md index 3fc1111b51e6..2d16b8f66713 100644 --- a/docs/non-english.md +++ b/docs/non-english.md @@ -324,7 +324,6 @@ * [manben](https://www.manben.com/) - Manga * [manhuazhan](https://www.manhuazhan.com/) - Manga * [rumanhua](https://www.rumanhua.com/) - Manga -* [godamh](https://godamh.com/) - Manga * [fengchemh](https://www.fengchemh.com/) - Manga * [yibenmanhua](https://www.yibenmanhua.com/) - Manga * [dongmanmanhua](https://www.dongmanmanhua.cn/) - Manga @@ -1191,9 +1190,8 @@ * [Online Cursos Gratuitos](https://onlinecursosgratuitos.com) - Books * [Dlivros](https://dlivros.com/) - Books * [Doceru](https://doceru.com/) - Books -* [⁠Biblioteca Digital](https://bibliotecadigital.aemrt.pt/) - Public Domain Books +* [⁠Biblioteca Digital](https://bibliotecadigital.aemrt.pt/) - Public Domain / Educational Books * [Cultura Acadêmica](https://www.culturaacademica.com.br) - Educational Books -* [Biblioteca Digital](https://bibliotecadigital.aemrt.pt/) - Educational Books * [Toomics](https://global.toomics.com/br) - Comics * [Arte HQs](http://www.artehqs.com.br) - Comics * [Tropa BR](https://tropabrscans.blogspot.com) - Comics @@ -1858,4 +1856,4 @@ * [Segoideas](https://segoideas.com/) - Taiwanese / Streaming / TV * [wlext](https://wlext.is/) - Turkish / Filipino / Thai / Streaming / Movies * [Machine Learning ka Chilla](https://www.youtube.com/playlist?list=PL9XvIvvVL50HHzaLPtFBOuikAWa0JdhMW) - Urdu / Machine Learning Course -* [PSL Dictionary](https://psl.org.pk/dictionary) - Urdu Sign Language Dictionary \ No newline at end of file +* [PSL Dictionary](https://psl.org.pk/dictionary) - Urdu Sign Language Dictionary diff --git a/docs/other/backups.md b/docs/other/backups.md index 1897ab1e3dba..6c81628b6056 100644 --- a/docs/other/backups.md +++ b/docs/other/backups.md @@ -34,7 +34,7 @@ Verified instances that mirror the official FMHY [repository](https://github.com Official mirrors and alternative ways to view FMHY. * **[Reddit Backup](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/index)** -* Add `/r/FREEMEDIAHECKYEAH/wiki/index` to the end of any [Redlib instance](https://github.com/redlib-org/redlib-instances/blob/main/instances.md) / [2](https://github.com/libreddit/libreddit-instances/blob/master/instances.md) +* Add `/r/FREEMEDIAHECKYEAH/wiki/index` to the end of any [Redlib instance](https://github.com/redlib-org/redlib-instances/blob/main/instances.md) / [2](https://github.com/libreddit/libreddit-instances/blob/master/instances.md) * [GitHub Backup](https://github.com/fmhy/FMHY/wiki) * [Rentry Backup](https://rentry.co/FMHY) / [Mirror](https://rentry.org/FMHY) * [SFW Rentry](https://rentry.co/piracy) / [Mirror](https://rentry.org/piracy) diff --git a/docs/reading.md b/docs/reading.md index bef9c04847b0..26ba985ae0ea 100644 --- a/docs/reading.md +++ b/docs/reading.md @@ -172,7 +172,7 @@ * 🌐 **[Kindle Jailbreak Guide](https://kindlemodding.org/jailbreaking/index.html)** - Jailbreak Guides / Index * ⭐ **[KindleForge](https://github.com/KindleTweaks/KindleForge)** – App Installer -* ⭐ **[KOReader](https://koreader.rocks/)** - Ebook Reader / [Minimal UI](https://github.com/AnthonyGress/zen_ui.koplugin) / [Z-Library Plugin](https://github.com/OctoNezd/zlibrary.koplugin) / [Plugins](https://kindlemodshelf.me/plugins), [2](https://github.com/koreader/contrib) / [Settings Guide](https://rentry.co/koreadersettings) / [Patches](https://kindlemodshelf.me/patches) / [App Store](https://github.com/omer-faruq/appstore.koplugin) / [GitHub](https://github.com/koreader/koreader) +* ⭐ **[KOReader](https://koreader.rocks/)** - Ebook Reader / [Minimal UI](https://github.com/AnthonyGress/zen_ui.koplugin) / [Z-Library Plugin](https://github.com/OctoNezd/zlibrary.koplugin) / [Plugins](https://kindlemodshelf.me/plugins), [2](https://github.com/koreader/contrib) / [Settings Guide](https://rentry.co/koreadersettings) / [Patches](https://kindlemodshelf.me/patches) / [App Store](https://github.com/omer-faruq/appstore.koplugin) / [GitHub](https://github.com/koreader/koreader) * ⭐ **[KindleFetch](https://github.com/justrals/KindleFetch)** - Kindle Book Download CLI * [Kindle Modding Community](https://discord.com/invite/wDbbZTF5QF) - Kindle Modding / Jailbreak Discord * [FreeReadFeed](https://www.freereadfeed.com/) or [eReaderIQ](https://www.ereaderiq.com/freebies) - Free Kindle Releases diff --git a/docs/storage.md b/docs/storage.md index 9dec723e9b83..5064dece843f 100644 --- a/docs/storage.md +++ b/docs/storage.md @@ -260,11 +260,11 @@ ### Letterboxd Tools -[Multi Tool](https://www.letterboxd.tools/) / [Extra Site Ratings](https://github.com/duncanlang/Letterboxd-Extras/) / [Shortcuts](https://github.com/alandours/letterboxd-shortcuts) / [Watchlist Picker](https://watchlistpicker.com/) / [Watchlist Roulette](https://watchlistroulette.com/) / [Collections](https://mrdys.github.io/letterboxd-completionist/) / [Celeb Accounts](https://fameboxd.com/) +[Multi Tool](https://www.letterboxd.tools/) / [Extra Site Ratings](https://github.com/duncanlang/Letterboxd-Extras/) / [Shortcuts](https://github.com/alandours/letterboxd-shortcuts) / [Watchlist Picker](https://watchlistpicker.com/) / [Watchlist Roulette](https://watchlistroulette.com/) / [Collections](https://mrdys.github.io/letterboxd-completionist/) / [Celeb Accounts](https://fameboxd.com/) ### MyAnimeList Tools -[Redesign](https://hritikvaishnav.github.io/Project-Redesign/public/mal.html) / [Extension](https://anime.plus/) / [Scripts](https://myanimelist.net/forum/?topicid=1849731) / [Stats / Badges](https://www.mal-badges.com/) / [Stats](https://anime.plus/) / [Search Helper](https://greasyfork.org/en/scripts/429784) / [Hide Seen](https://greasyfork.org/en/scripts/17961) / [Export](https://malscraper.azurewebsites.net/) / [Site Sync](https://malsync.moe/) / [MALSync Discord](https://discord.com/invite/cTH4yaw) / [API](https://jikan.moe/) / [Tier Lists](https://www.gomitier.tech/) +[Redesign](https://hritikvaishnav.github.io/Project-Redesign/public/mal.html) / [Profile Extension / Stats](https://anime.plus/) / [Scripts](https://myanimelist.net/forum/?topicid=1849731) / [Stats / Badges](https://www.mal-badges.com/) / [Search Helper](https://greasyfork.org/en/scripts/429784) / [Hide Seen](https://greasyfork.org/en/scripts/17961) / [Export](https://malscraper.azurewebsites.net/) / [Site Sync](https://malsync.moe/) / [MALSync Discord](https://discord.com/invite/cTH4yaw) / [API](https://jikan.moe/) / [Tier Lists](https://www.gomitier.tech/) ### AniList Tools @@ -471,4 +471,4 @@ * [udemy-downloader](https://github.com/Puyodead1/udemy-downloader) - Udemy Downloader * [Udemy Download Guide](https://docs.google.com/document/d/1W91OS9rj7h9DBp5UwR68lA2zMEtqNmxdGaNVmBktIaw/) / [Discord](https://discord.gg/tMzrSxQ) -[discudemy](https://www.discudemy.com/), [BARONIP COUPONS](https://baronip-coupons.blogspot.com/), [freebiesglobal](https://freebiesglobal.com/), [onlinecourses](https://www.onlinecourses.ooo/), [UdemyKing](https://t.me/udemyking1), [CourseArray](https://t.me/udemycoursesfree), [Udemy 24](https://coursesbag.com/), [UdemyFreeCourses](https://udemyfreecourses.org/), [Study Bullet](https://studybullet.com/) / [Telegram](https://telegram.me/joinchat/AAAAAFdxBDqPv7ZzVoUASw), [r/udemyfreebies](https://reddit.com/r/udemyfreebies), [Online Courses Tracker](https://comidoc.com/), [Real.Discount](https://www.real.discount/), [OnlineTutorials](https://www.onlinetutorials.org/), [Scroll Coupons](https://scrollcoupons.com/) / [Telegram](https://t.me/scroll_coupons), [UdemyXpert](https://udemyxpert.com/) / [Telegram](https://t.me/UdemyXpert), [FreeCourseSites](https://freecoursesites.com/) \ No newline at end of file +[discudemy](https://www.discudemy.com/), [BARONIP COUPONS](https://baronip-coupons.blogspot.com/), [freebiesglobal](https://freebiesglobal.com/), [onlinecourses](https://www.onlinecourses.ooo/), [UdemyKing](https://t.me/udemyking1), [CourseArray](https://t.me/udemycoursesfree), [Udemy 24](https://coursesbag.com/), [UdemyFreeCourses](https://udemyfreecourses.org/), [Study Bullet](https://studybullet.com/) / [Telegram](https://telegram.me/joinchat/AAAAAFdxBDqPv7ZzVoUASw), [r/udemyfreebies](https://reddit.com/r/udemyfreebies), [Online Courses Tracker](https://comidoc.com/), [Real.Discount](https://www.real.discount/), [OnlineTutorials](https://www.onlinetutorials.org/), [Scroll Coupons](https://scrollcoupons.com/) / [Telegram](https://t.me/scroll_coupons), [UdemyXpert](https://udemyxpert.com/) / [Telegram](https://t.me/UdemyXpert), [FreeCourseSites](https://freecoursesites.com/) diff --git a/docs/torrenting.md b/docs/torrenting.md index 32e9670abeed..365c9dbd301a 100644 --- a/docs/torrenting.md +++ b/docs/torrenting.md @@ -80,7 +80,8 @@ * ⭐ **[Deluge](https://www.deluge-torrent.org/)** - Torrent Client / [Plugins](https://deluge-torrent.org/plugins/) / [Config](https://github.com/ratanakvlun/deluge-ltconfig/releases) / [Telegram Plugin](https://github.com/noam09/deluge-telegramer) / Windows, macOS, Linux * ⭐ **[Transmission](https://transmissionbt.com/)** - Torrent Client / Windows, macOS, Linux * ⭐ **[rTorrent](https://rakshasa.github.io/rtorrent/)** - Torrent Client / [Extended](https://rtorrent-ps.readthedocs.io/) / [Tools](https://pyrocore.readthedocs.org/), [2](https://github.com/pyroscope/pyrocore) / [Mods](https://calomel.org/rtorrent_mods.html) / Linux / [GitHub](https://github.com/rakshasa/rtorrent) -* [RuTorrent](https://github.com/Novik/ruTorrent) or [Flood](https://flood.js.org/) - RTorrent Web Frontends +* [RuTorrent](https://github.com/Novik/ruTorrent) - RTorrent Web Frontend +* [flood](https://flood.js.org/) - rTorrent, Transmission & qBittorrent WebUI / [GitHub](https://github.com/jesec/flood) * [torrent-control](https://github.com/Mika-/torrent-control) or [Remote Torrent Adder](https://github.com/bogenpirat/remote-torrent-adder) - Easily Send Torrents to Client * [Tixati](https://tixati.com/) - Torrent Client / Windows, Linux, Android * [BiglyBT](https://www.biglybt.com/) - Torrent Client / Windows, macOS, Linux, Android @@ -94,7 +95,6 @@ * [kTorrent](https://apps.kde.org/ktorrent/), [2](https://invent.kde.org/network/ktorrent) - Torrent Client / Linux * [Rats Search](https://github.com/DEgITx/rats-search) - Torrent Search Client * [Download Torrents Through I2P](https://decentnet.github.io/blog/20200329-download-torrents-through-i2p.html) -* [flood](https://flood.js.org/) - rTorrent, Transmission & qBittorrent WebUI / [GitHub](https://github.com/jesec/flood) * [r/Seedboxes](https://www.reddit.com/r/seedboxes/) - Seedbox Subreddit * [Seedbox Guide](https://seedboxgui.de/seedbox/) - Seedbox Comparisons diff --git a/docs/video.md b/docs/video.md index 259e9f1f37a5..20d4cd4f31f3 100644 --- a/docs/video.md +++ b/docs/video.md @@ -301,7 +301,7 @@ * ⭐ **[Miruro](https://www.miruro.com/)**, [2](https://miruro.tv), [3](https://miruro.bz), [4](https://miruro.ru), [5](https://miruro.to) - Hard Subs / Soft Subs / Dub / Auto-Next / [Status](https://status.miruro.com/) / [Subreddit](https://www.reddit.com/r/miruro/) / [Discord](https://discord.com/invite/pjsdJp96mY) / [GitHub](https://github.com/Miruro-no-kuon/Miruro) * ⭐ **[animepahe](https://animepahe.pw/)** - Hard Sub / Dub / Some NSFW / [Enhancements](https://update.greasyfork.org/scripts/520048/AnimePahe%20Improvements.user.js) / [Downloader](https://github.com/KevCui/animepahe-dl) * ⭐ **[KickAssAnime](https://kaa.lt/)** - Sub / Dub / Auto-Next / [Telegram](https://t.me/kickassanimev3) / [Discord](https://discord.gg/6EGTnNQAaV) -* ⭐ **[MKissa](https://mkissa.to/)** or [All Manga](https://allmanga.to/) - Sub / Dub / [Discord](https://discord.com/invite/6nce6cyJyM) +* ⭐ **[MKissa](https://mkissa.to/)** or [All Manga](https://allmanga.to/) - Sub / Dub / [Discord](https://discord.com/invite/6nce6cyJyM) * ⭐ **[AnimeX](https://animex.one/)** - Sub / Dub / Auto-Next / [Discord](https://discord.com/invite/xNZcSQRbTm) * ⭐ **[Anikoto](https://anikototv.to/)**, [2](https://animesuge.cz/) - Sub / Dub / Auto-Next / [Backups](https://animesuge.bid/) * ⭐ **[Anidap](https://anidap.lol/)** - Sub / Dub / Auto-Next / [Discord](https://discord.com/invite/btsMTSsBM7) @@ -312,7 +312,7 @@ * [⁠NekoWatch](https://nekowatch.xyz/) - Sub / Dub / Auto-Next / [Discord](https://discord.gg/52UrTJ3ytT) * [AnimaxAnime](https://animaxanime.dpdns.org/), [2](https://anianimax.dpdns.org/) - Hard Sub / Dub / Auto-Next / [Status](https://status.animaxanime.dpdns.org/) * [⁠JustAnime](https://justanime.to/) - Sub / Dub / Auto-Next / [Mirrors](https://justanime.site/) / [Telegram](https://t.me/JustAnimeZone) / [Discord](https://discord.gg/P3yqksmGun) -* [AniLight](https://anilight.live/) - Sub / Dub / Auto-Next / [Discord](https://discord.com/invite/RFN93sMwdW ) +* [AniLight](https://anilight.live/) - Sub / Dub / Auto-Next / [Discord](https://discord.com/invite/RFN93sMwdW) * [⁠AniKuro](https://anikuro.to/), [2](https://anikuro.ru/) - Sub / Dub / [Status](https://anikuro.site/) / [Telegram](https://t.me/+DrD7eAO7R69mZGM0) / [Discord](https://discord.com/invite/Svc9yFjQBq) * [⁠MeguAnimes](https://meguanime.com/) - Sub / Dub / Auto-Next * [Aniwave](https://aniwaves.ru/) or [123anime](https://123animes.ru/) - Sub / Dub / Auto-Next @@ -763,7 +763,7 @@ * ⭐ **[VegaMovies](https://vegamovies.market/)** - Movies / TV / Anime / 4K / [Telegram](https://telegram.dog/vega_officials) * ⭐ **[Pahe](https://pahe.ink/)** - Movies / TV / Anime / 4K / [Ad-Bypass (Must Have)](https://greasyfork.org/en/scripts/443277) / [Discord](https://discord.gg/4AvaCsd2J4) * ⭐ **[MKV BASE](https://mkvbase.site/)** - Movies / TV / Anime / 4K / Remuxes / 3D / [Telegram](https://t.me/MkVBase) -* ⭐ **[DDLBase](https://ddlbase.net/)**, [2](https://ddlbase.com/ ) - Movies / TV / 4K / 3D / Remuxes / [Use Bypass](https://pixeldrain-bypass.gamedrive.to/) +* ⭐ **[DDLBase](https://ddlbase.net/)**, [2](https://ddlbase.com/) - Movies / TV / 4K / 3D / Remuxes / [Use Bypass](https://pixeldrain-bypass.gamedrive.to/) * ⭐ **[Scloud](https://rentry.co/FMHYB64#sc)** - Movies / TV / 4K / Use Adblocker + [Linkbypasser](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools#wiki_.25B7_redirect_bypass) / [Telegram](https://t.me/scloudmediahub) * ⭐ **[Acer Movies](https://rentry.co/FMHYB64#acer)** - Movies / TV / Anime / [Discord](https://discord.com/invite/hpkMqrwRCE) * ⭐ **[⁠XDMovies](https://top.xdmovies.wtf/)** - Movies / TV / 4K / [Discord](https://discord.com/invite/Py5KKx28Bx) @@ -1000,7 +1000,7 @@ * [Rotten Tomatoes](https://www.rottentomatoes.com/) - Movies / TV / [Add to Sites](https://greasyfork.org/en/scripts/35443) / [Add to IMDb](https://greasyfork.org/en/scripts/15222) * [⁠Kinorium](https://en.kinorium.com/) - Movies / TV / Anime * [TMDb](https://www.themoviedb.org/) - Movies / TV / Anime -* [⁠WeTrakr](https://wetrakr.com/) - TV / Anime / Movies +* [⁠WeTrakr](https://wetrakr.com/) - TV / Anime / Movies * [Trakt](https://trakt.tv/) - TV / Anime / Movies / [Tools](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/storage#wiki_trakt_tools) * [Movieo](https://movieo.me/) - Movies / TV / Anime * [AllMovie](https://www.allmovie.com/) - Movies / TV / Anime @@ -1103,7 +1103,7 @@ * [Subshifter](https://subshifter.bitsnbites.eu/), [⁠AutoSubSync](https://github.com/denizsafak/AutoSubSync), [ffsubsync](https://github.com/smacke/ffsubsync), [autosubsync-mpv](https://github.com/joaquintorres/autosubsync-mpv) or [autosubsync](https://github.com/oseiskar/autosubsync) - Sync Subtitles * [asstosrt-wasm](https://sorz.github.io/asstosrt-wasm/) - ASS / SSA to SRT Subtitles Converter * [WithSubtitles](https://withsubtitles.com/), [Revoldiv](https://revoldiv.com/), [pyTranscriber](https://pytranscriber.github.io/), [Auto-Subtitle](https://www.veed.io/tools/auto-subtitle-generator-online), [Vibe](https://thewh1teagle.github.io/vibe/), [⁠VideoLingo](https://github.com/Huanshere/VideoLingo) or [Turboscribe](https://turboscribe.ai/) - Video Transcribers / Subtitle Generators -* [Subtitle Edit](https://www.nikse.dk/subtitleedit) / [GitHub](https://github.com/SubtitleEdit/subtitleedit), [TranslatesSubtitles](https://translatesubtitles.com/) / [2](https://translatesubtitles.co/), [SRT AI Translator](https://github.com/passthesh3ll/srt-ai-translator) or [GPTSubtitler](https://gptsubtitler.com/) - Translate Subtitles +* [TranslatesSubtitles](https://translatesubtitles.com/) / [2](https://translatesubtitles.co/), [SRT AI Translator](https://github.com/passthesh3ll/srt-ai-translator) or [GPTSubtitler](https://gptsubtitler.com/) - Translate Subtitles * [Auto Synced & Translated Dubs](https://github.com/ThioJoe/Auto-Synced-Translated-Dubs) - Create Translated Dubs * [SoniTranslate](https://github.com/R3gm/SoniTranslate) - Video Translator * [asbplayer](https://killergerbah.github.io/asbplayer/) - Subtitle Sentence Mining @@ -1186,4 +1186,4 @@ *** -## ▷ [Video Players / Servers / Sync](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/video-tools) \ No newline at end of file +## ▷ [Video Players / Servers / Sync](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/video-tools) diff --git a/scripts/lint-markdown.js b/scripts/lint-markdown.js index aeb8db72556f..8af69378a561 100644 --- a/scripts/lint-markdown.js +++ b/scripts/lint-markdown.js @@ -3,25 +3,34 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const DOCS_DIR = path.resolve(__dirname, '../docs') - -// Non-recursive scan of DOCS_DIR -function getDocsFiles(dir) { - const files = fs.readdirSync(dir) - const mdFiles = [] - files.forEach((file) => { - const filePath = path.join(dir, file) - const stat = fs.statSync(filePath) - if (!stat.isDirectory() && file.endsWith('.md')) { - mdFiles.push(filePath) - } - }) - return mdFiles +const PROJECT_ROOT = path.resolve(__dirname, '..') +const DOCS_DIR = path.join(PROJECT_ROOT, 'docs') + +function getMarkdownFiles(target) { + let stat + try { + stat = fs.statSync(target) + } catch { + return [] + } + + if (stat.isFile()) return target.endsWith('.md') ? [target] : [] + if (!stat.isDirectory()) return [] + + return fs + .readdirSync(target, { withFileTypes: true }) + .sort((a, b) => a.name.localeCompare(b.name)) + .flatMap((entry) => getMarkdownFiles(path.join(target, entry.name))) } const args = process.argv.slice(2) const files = - args.length > 0 ? args.map((f) => path.resolve(f)) : getDocsFiles(DOCS_DIR) + args.length > 0 + ? args.flatMap((target) => getMarkdownFiles(path.resolve(target))) + : [ + ...getMarkdownFiles(DOCS_DIR), + path.join(PROJECT_ROOT, '.github/CONTRIBUTING.md') + ] let hasErrors = false // Only emit ANSI colors when writing to an interactive terminal @@ -29,6 +38,71 @@ const useColor = !process.env.NO_COLOR && (Boolean(process.env.FORCE_COLOR) || Boolean(process.stdout.isTTY)) const color = (code, text) => (useColor ? `\x1b[${code}m${text}\x1b[0m` : text) +const INVISIBLE_CHARACTERS = /[\u200B-\u200D\uFEFF\u2060]/g +const LABEL_REDIRECT_EXCEPTIONS = { + discord: new Set(['https://trw.lat/ds']) +} + +function stripInvisibleCharacters(text) { + return text.replace(INVISIBLE_CHARACTERS, '') +} + +function normalizeText(text) { + return stripInvisibleCharacters(text).trim().toLowerCase() +} + +function normalizePrimaryUrl(rawUrl) { + try { + const url = new URL(rawUrl) + for (const key of [...url.searchParams.keys()]) { + if (/^utm_/i.test(key)) url.searchParams.delete(key) + } + url.searchParams.sort() + if (url.pathname !== '/') url.pathname = url.pathname.replace(/\/+$/, '') + return url.toString() + } catch { + return rawUrl + } +} + +function localTargetExists(sourceFile, rawTarget) { + let target = rawTarget.trim().replace(/^<|>$/g, '') + if ( + !target || + target.startsWith('#') || + target.startsWith('//') || + /^[a-z][a-z\d+.-]*:/i.test(target) || + /[{}:]/.test(target) + ) { + return true + } + + target = target.split('#', 1)[0].split('?', 1)[0] + try { + target = decodeURIComponent(target) + } catch { + return true + } + + const isRootRelative = target.startsWith('/') + const basePath = isRootRelative + ? path.join(DOCS_DIR, target.replace(/^\/+/, '')) + : path.resolve(path.dirname(sourceFile), target) + const candidates = [basePath] + const extension = path.extname(basePath) + + if (!extension) { + candidates.push(`${basePath}.md`, path.join(basePath, 'index.md')) + } else if (extension === '.html') { + candidates.push(basePath.slice(0, -5) + '.md') + } + + if (isRootRelative) { + candidates.push(path.join(DOCS_DIR, 'public', target.replace(/^\/+/, ''))) + } + + return candidates.some((candidate) => fs.existsSync(candidate)) +} console.log('🔍 Scanning markdown files for formatting issues...\n') @@ -44,7 +118,7 @@ files.forEach((file) => { const content = fs.readFileSync(file, 'utf-8') const lines = content.split('\n') - const relativePath = path.relative(process.cwd(), file) + const relativePath = path.relative(PROJECT_ROOT, file) const normalizedPath = relativePath.replace(/\\/g, '/') // Files to completely ignore from all checks @@ -58,7 +132,12 @@ files.forEach((file) => { ] // Folders to completely ignore from all checks (any depth beneath them) - const FOLDERS_TO_IGNORE = ['docs/posts/', 'docs/other/', 'docs/public/'] + const FOLDERS_TO_IGNORE = [ + 'docs/.vitepress/dist/', + 'docs/posts/', + 'docs/other/', + 'docs/public/' + ] if (FILES_TO_IGNORE.includes(normalizedPath)) return if (FOLDERS_TO_IGNORE.some((folder) => normalizedPath.includes(folder))) @@ -70,28 +149,77 @@ files.forEach((file) => { FILES_TO_IGNORE_ENGLISH_CHECKS.includes(normalizedPath) let currentHeader = '' - let inCodeBlock = false + let fenceCharacter = '' + let inFrontmatter = false + const headingStack = [] + const seenHeadings = new Map() + const primaryUrlsBySection = new Map() lines.forEach((line, index) => { const lineNum = index + 1 - // Strip zero-width and invisible joiner characters to avoid false positives in spacing checks - line = line.replace(/[\u200B-\u200D\uFEFF\u2060]/g, '') - - // Toggle fenced code block state on lines starting with ``` (optionally indented) - if (/^\s*```/.test(line)) { - inCodeBlock = !inCodeBlock + if (index === 0 && line.trim() === '---') { + inFrontmatter = true + return + } + if (inFrontmatter) { + if (line.trim() === '---') inFrontmatter = false return } - if (inCodeBlock) return - if (/^#+\s/.test(line)) { - currentHeader = line + const fenceMatch = line.match(/^\s*(`{3,}|~{3,})/) + if (fenceMatch) { + const markerCharacter = fenceMatch[1][0] + if (!fenceCharacter) fenceCharacter = markerCharacter + else if (fenceCharacter === markerCharacter) fenceCharacter = '' + return } + if (fenceCharacter) return + + // Strip zero-width and invisible joiner characters to avoid false positives in spacing checks + line = stripInvisibleCharacters(line) + let errors = [] // Record an error, optionally with the offending substring of `line` so the // reporter can underline exactly where the problem is. const addError = (message, match) => errors.push({ message, match }) + const headingMatch = line.match(/^(#{1,6})\s+(.+?)\s*#*\s*$/) + if (headingMatch) { + const level = headingMatch[1].length + const title = headingMatch[2].trim() + const normalizedTitle = normalizeText( + title.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1').replace(/[*_`]/g, '') + ) + const parentPath = headingStack.slice(1, level).join(' > ') + const headingKey = `${parentPath}\u0000${level}\u0000${normalizedTitle}` + const firstLine = seenHeadings.get(headingKey) + if (firstLine) { + addError( + `Duplicate heading in the same parent section (first seen on line ${firstLine})`, + headingMatch[2] + ) + } else { + seenHeadings.set(headingKey, lineNum) + } + headingStack[level] = normalizedTitle + headingStack.length = level + 1 + currentHeader = line + } + + const emptyLinkMatch = line.match(/\[[^\]]*\]\(\s*\)/) + if (emptyLinkMatch) { + addError('Empty link destination', emptyLinkMatch[0]) + } + + const localLinkRegex = /!?\[[^\]]*\]\(([^)]+)\)/g + let localLinkMatch + while ((localLinkMatch = localLinkRegex.exec(line)) !== null) { + const target = localLinkMatch[1] + if (!localTargetExists(file, target)) { + addError(`Local link or asset target does not exist: ${target}`, target) + } + } + // Check 1: Starred links must be bolded // Pattern: * ⭐ [Link] -> Bad // Pattern: * ⭐ **[Link] -> Good @@ -246,7 +374,32 @@ files.forEach((file) => { 'docs/unsafe.md' ] + const isCatalogEntry = + /^\s*[*+-]\s+(?:(?:⭐|🌐|↪️)\s+)?(?:\*\*)?\[[^\]]+\]\(/u.test(line) + + if (isCatalogEntry) { + const primaryLinkMatch = line.match( + /^\s*[*+-]\s+(?:(?:⭐|🌐|↪️)\s+)?(?:\*\*)?\[([^\]]+)\]\((https?:\/\/[^)\s]+)\)/u + ) + if (primaryLinkMatch) { + const normalizedName = normalizeText(primaryLinkMatch[1]) + const normalizedUrl = normalizePrimaryUrl(primaryLinkMatch[2]) + const sectionPath = headingStack.filter(Boolean).join(' > ') + const duplicateKey = `${sectionPath}\u0000${normalizedName}\u0000${normalizedUrl}` + const firstLine = primaryUrlsBySection.get(duplicateKey) + if (firstLine) { + addError( + `Duplicate primary resource URL in the same section (first seen on line ${firstLine})`, + primaryLinkMatch[2] + ) + } else { + primaryUrlsBySection.set(duplicateKey, lineNum) + } + } + } + if ( + isCatalogEntry && !FILES_TO_IGNORE_LINK_SEPARATOR_CHECK.some((ignoredFile) => path.normalize(file).endsWith(path.normalize(ignoredFile)) ) @@ -323,6 +476,8 @@ files.forEach((file) => { 'including', 'includes', 'that', + 'this', + 'here', 'your', 'our', 'of', @@ -410,7 +565,42 @@ files.forEach((file) => { const linkMatchRegex = /\[([^\]]+)\]\((https?:\/\/[^)]+)\)/g let lm while ((lm = linkMatchRegex.exec(line)) !== null) { - const url = lm[2].toLowerCase() + let parsedUrl + try { + parsedUrl = new URL(lm[2]) + } catch { + continue + } + const hostname = parsedUrl.hostname.toLowerCase().replace(/\.$/, '') + + const hostnameMatches = (domain) => { + const normalizedDomain = domain.toLowerCase().replace(/^\./, '') + if (normalizedDomain.endsWith('.')) { + return hostname.startsWith(normalizedDomain) + } + return ( + hostname === normalizedDomain || + hostname.endsWith(`.${normalizedDomain}`) + ) + } + + const isFmhyInternalReference = + hostnameMatches('fmhy.net') || + (hostnameMatches('reddit.com') && + parsedUrl.pathname + .toLowerCase() + .includes('/r/freemediaheckyeah/wiki/')) || + (hostnameMatches('github.com') && + parsedUrl.pathname.toLowerCase().startsWith('/fmhy/fmhy/wiki/')) + + const isKnownLabelRedirect = (label) => { + if (LABEL_REDIRECT_EXCEPTIONS[label]?.has(parsedUrl.href)) return true + if (label !== 'discord') return false + return ( + hostname.startsWith('discord.') || + /(^|\/)discord(?:\/|$)/i.test(parsedUrl.pathname) + ) + } const checks = [ { key: 'subreddit', domains: ['reddit.com'] }, @@ -433,34 +623,41 @@ files.forEach((file) => { }, { key: 'twitter', domains: ['twitter.com', 'x.com', 't.co'] }, { key: 'youtube', domains: ['youtube.com', 'youtu.be'] }, - { key: 'lemmy', domains: ['lemmy.', 'fediverse.', 'sh.itjust.works'] }, + { + key: 'lemmy', + domains: ['lemmy.', 'fediverse.', 'sh.itjust.works', 'join-lemmy.org'] + }, { key: 'instagram', domains: ['instagram.com'] }, { key: 'facebook', domains: ['facebook.com'] }, { key: 'bluesky', domains: ['bsky.app'] }, - { key: 'mastodon', domains: ['mastodon.social', 'apps.apple.com'] } + { + key: 'mastodon', + domains: ['mastodon.social', 'joinmastodon.org', 'apps.apple.com'] + } ] - const trimmedLabel = lm[1].trim().toLowerCase() + const trimmedLabel = normalizeText(lm[1]) for (const check of checks) { // Exact match check for keywords to avoid flagging descriptive names like "GitHub Dorks" // Also allow "r/" prefix check separately if (trimmedLabel === check.key) { - if (!check.domains.some((d) => url.includes(d))) { - // Allow some custom domains/redirects if they contain the keyword in the URL path - if (!url.includes(check.key)) { - addError( - `Link label mismatch: Label "${lm[1]}" points to non-${check.key} domain: ${lm[2]}`, - lm[0] - ) - } + if ( + !isFmhyInternalReference && + !isKnownLabelRedirect(check.key) && + !check.domains.some(hostnameMatches) + ) { + addError( + `Link label mismatch: Label "${lm[1]}" points to non-${check.key} domain: ${lm[2]}`, + lm[0] + ) } } } // Special check for "r/" prefix (e.g. [r/OpenAI]) - ONLY if it's the full label if (/^r\/[a-zA-Z0-9_]+$/.test(trimmedLabel)) { - if (!url.includes('reddit.com')) { + if (!isFmhyInternalReference && !hostnameMatches('reddit.com')) { addError( `Link label mismatch: Subreddit label "${lm[1]}" points to non-reddit domain: ${lm[2]}`, lm[0] @@ -471,9 +668,10 @@ files.forEach((file) => { // Special check for "X" label (social media) if ( trimmedLabel === 'x' && - !url.includes('x.com') && - !url.includes('twitter.com') && - !url.includes('t.co') + !isFmhyInternalReference && + !hostnameMatches('x.com') && + !hostnameMatches('twitter.com') && + !hostnameMatches('t.co') ) { addError( `Link label mismatch: Label "X" points to non-X/Twitter domain: ${lm[2]}`, @@ -519,7 +717,18 @@ files.forEach((file) => { adress: 'address', neccessary: 'necessary', tring: 'trying', - availalbe: 'available' + availalbe: 'available', + availabe: 'available', + definately: 'definitely', + maintainance: 'maintenance', + accomodate: 'accommodate', + begining: 'beginning', + enviroment: 'environment', + goverment: 'government', + relevent: 'relevant', + sucessful: 'successful', + untill: 'until', + wierd: 'weird' } for (const [typo, correction] of Object.entries(commonTypos)) { const typoRegex = new RegExp(`\\b${typo}\\b`, 'i')