mirror of
https://github.com/fmhy/edit.git
synced 2026-03-11 08:55:38 +00:00
fix typos and grammar issues (#4683)
* typo fix * more typo fixes * more fixes
This commit is contained in:
parent
0f44061a48
commit
a53def045e
16 changed files with 118616 additions and 37 deletions
|
|
@ -1,3 +1,3 @@
|
|||
You can create an OpenSubtitles account and link it in MPC-HC to bypass quota limits.
|
||||
|
||||
You can create an OpenSubtitles account and link it in MPC-HC to bypass quota limits.
|
||||
|
||||
You can do this via a panel in MPC-HC located at: Options > Subtitles > Misc > Right-click on OpenSubtitles.com > Setup > Fill in username/password
|
||||
16
docs/ai.md
16
docs/ai.md
|
|
@ -25,7 +25,7 @@ ## ▷ Official Model Sites
|
|||
* [Ernie](https://ernie.baidu.com/) - ERNIE 5.0 Preview 1220 / x1 Demo / [4.5 Demo](https://huggingface.co/spaces/baidu/ernie_4.5_turbo_demo) / [x1 Demo](https://huggingface.co/spaces/baidu/ernie_x1_turbo_demo)
|
||||
* [Mistral](https://chat.mistral.ai) - Mistral Large 3 / [Subreddit](https://www.reddit.com/r/MistralAI/) / [Discord](https://discord.gg/mistralai)
|
||||
* [MiniMax AI](https://agent.minimax.io/) - MiniMax-M2.1 / [Discord](https://discord.com/invite/hailuoai) / [GitHub](https://github.com/MiniMax-AI/MiniMax-M1)
|
||||
* [Ai2 Playground](https://playground.allenai.org/) - Olmo3.1 32B / No Sign-Up / / [Discord](https://discord.gg/NE5xPufNwu)
|
||||
* [Ai2 Playground](https://playground.allenai.org/) - Olmo3.1 32B / No Sign-Up / [Discord](https://discord.gg/NE5xPufNwu)
|
||||
* [LongCat](https://longcat.chat/) - LongCat-Flash-Chat / Requires Sign-Up / Unlimited / [X](https://x.com/Meituan_LongCat)
|
||||
* [Cohere](https://dashboard.cohere.com/playground/chat) - Command-A-Reasoning / 1000 Monthly / Requires Sign-Up / [Discord](https://discord.com/invite/co-mmunity)
|
||||
* [Solar](https://console.upstage.ai/playground/chat) - Solar Pro 2 Model / No Sign-Up / [Discord](https://discord.com/invite/Cge9FYjV4h)
|
||||
|
|
@ -140,7 +140,7 @@ ## ▷ Roleplaying Chatbots
|
|||
|
||||
## ▷ Coding AIs
|
||||
|
||||
* **Note** - Keep in mind many coding AIs run in root, so its best to avoid giving them full drive / root access to avoid any sort of issues or accidental deletions. Remember to backup code first before running the AI or prompts, as they can sometimes break things.
|
||||
* **Note** - Keep in mind many coding AIs run in root, so it's best to avoid giving them full drive / root access to avoid any sort of issues or accidental deletions. Remember to backup code first before running the AI or prompts, as they can sometimes break things.
|
||||
|
||||
***
|
||||
|
||||
|
|
@ -174,7 +174,7 @@ ## ▷ Coding AIs
|
|||
* [DeepSite](https://huggingface.co/spaces/enzostvs/deepsite) - Text to Site Code / [Limits](https://github.com/fmhy/edit/blob/main/docs/.vitepress/notes/hugging-face-warning.md)
|
||||
* [Bolt.new](https://bolt.new/) - AI Web App Builder / [Discord](https://discord.com/invite/stackblitz) / [GitHub](https://github.com/stackblitz/bolt.new)
|
||||
* [Fragments](https://fragments.e2b.dev/) - AI App Builder / [Discord](https://discord.com/invite/U7KEcGErtQ) / [GitHub](https://github.com/e2b-dev)
|
||||
* [Rork](https://rork.com/) - AI App Builder [Code Export Bypass](https://greasyfork.org/en/scripts/538090)
|
||||
* [Rork](https://rork.com/) - AI App Builder / [Code Export Bypass](https://greasyfork.org/en/scripts/538090)
|
||||
* [Code2prompt](https://github.com/mufeedvh/code2prompt) - Convert Codebase into Single LLM Prompt
|
||||
* [PR-Agent](https://github.com/qodo-ai/pr-agent) - Automated Pull Requests
|
||||
* [Gitingest](https://gitingest.com/) or [Repomix](https://repomix.com/) / [GitHub](https://github.com/yamadashy/repomix) - Convert Repos to Prompt-Friendly Text
|
||||
|
|
@ -305,15 +305,15 @@ # ► Video Generation
|
|||
* ⭐ **[GeminiGenAI](https://geminigen.ai/app/video-gen)** - Sora 2 / Grok / Requires Google Login / [Discord](https://discord.gg/vJnYe86T8F)
|
||||
* [Bing Create](https://www.bing.com/images/create) - Sora 1 / No Image Input
|
||||
* [Sora](https://openai.com/index/sora/) - 6 Daily / [Remove Watermarks](https://unmarkit.app/sora) / [Signup Guide](https://github.com/fmhy/edit/blob/main/docs/.vitepress/notes/sora.md)
|
||||
* [Wan AI](https://wan.video/) / Wan Ai / Wan 2.6 / Image to Video / [GitHub](https://github.com/Wan-Video/Wan2.1)
|
||||
* [Wan AI](https://wan.video/) / Wan AI / Wan 2.6 / Image to Video / [GitHub](https://github.com/Wan-Video/Wan2.1)
|
||||
* [Qwen](https://chat.qwen.ai/) - 5/12 Per Hour / [Discord](https://discord.com/invite/CV4E9rpNSD) / [GitHub](https://github.com/QwenLM)
|
||||
* [Vheer](https://vheer.com/) - Unlimited / No Sign-Up
|
||||
* [AIFreeVideo](https://aifreevideo.com/) - Unlimited / MiniMax Video-01 / Requires Sign-Up
|
||||
* [Meta AI](https://www.meta.ai/) - Unlimited / Requires Sign-Up
|
||||
* [Arena](https://arena.ai/?chat-modality=video) - 3 Daily / Requires Sign-Up / Random Models / Reset Limits w/ Cookie Delete or Temp Mail / End-Watermark / [X](https://x.com/arena) / [Discord](https://discord.com/invite/lmarena)
|
||||
* [Arena](https://arena.ai/?chat-modality=video) - 3 Daily / Requires Sign-Up / Random Models / Reset Limits w/ Cookie Delete or Temp Mail / End-Watermark / [X](https://x.com/arena) / [Discord](https://discord.com/invite/lmarena)
|
||||
* [Arena (Discord)](https://discord.com/invite/lmarena) - 5 Daily / Random Models / Discord Only / Check #how-to-video-bot / End-Watermark
|
||||
* [Klipy](https://klipy.com/) - Klipy / Veo 3 / GIFs / Unlimited / Requires Sign-Up
|
||||
* [ModelScope Video](https://modelscope.ai/civision/videoGeneration) - Wan 2.2 14B / 3 Daily / [Note](https://github.com/fmhy/edit/blob/main/docs/.vitepress/notes/modelscope.md)
|
||||
* [ModelScope Video](https://modelscope.ai/civision/videoGeneration) - Wan 2.2 14B / 3 Daily / [Note](https://github.com/fmhy/edit/blob/main/docs/.vitepress/notes/modelscope.md)
|
||||
* [Google Whisk](https://labs.google/fx/en/tools/whisk) - Veo 3 / 10 Monthly
|
||||
* [Google Flow](https://labs.google/fx/tools/flow) - Veo 3.1 (5 Monthly)
|
||||
* [Dreamina](https://dreamina.capcut.com/ai-tool/home) - 120 Credits Daily
|
||||
|
|
@ -336,7 +336,7 @@ # ► Image Generation
|
|||
* ⭐ **[Bing Create](https://www.bing.com/images/create)** - Unlimited / GPT-4o / MAI-Image-1 / Editing / Sign-Up Required
|
||||
* ⭐ **[GeminiGenAI](https://geminigen.ai/app/imagen)** - Nano Banana Pro / Unlimited / Google Login Required / [Note](https://github.com/fmhy/edit/blob/main/docs/.vitepress/notes/gemai.md)
|
||||
* ⭐ **[PigenAI](https://pigenai.art/)** - 50 Credits Daily / Editing / Generating / Z-Image Turbo / Unlimited / Multiple Generators / Model Cost Varies
|
||||
* ⭐ **[Dreamina](https://dreamina.capcut.com/ai-tool/home)** - 120 Credits Daily / Seedream 4.5/ Nano Banana / Sign-Up Required
|
||||
* ⭐ **[Dreamina](https://dreamina.capcut.com/ai-tool/home)** - 120 Credits Daily / Seedream 4.5 / Nano Banana / Sign-Up Required
|
||||
* ⭐ **[Perchance](https://perchance.org/ai-photo-generator)** / [2](https://perchance.org/ai-text-to-image-generator) - Chroma-Based / Unlimited / No Sign-Up / [Resources](https://perchance.org/perlist) / [Lemmy](https://lemmy.world/u/perchance) / [Subreddit](https://www.reddit.com/r/perchance/) / [Discord](https://discord.gg/43qAQEVV9a)
|
||||
* [Yupp.ai](https://yupp.ai/) - GPT Image 1.5 / Nano Banana Pro / Multiple Generators / Google Login Required / [Discord](https://discord.com/invite/yuppai)
|
||||
* [Pollinations](https://chat.pollinations.ai/) - Nano Banana Pro / GPT Image 1.5 / Multiple Generators / No Sign-Up / [Limit / Guide](https://github.com/fmhy/edit/blob/main/docs/.vitepress/notes/pollinations-limits.md)
|
||||
|
|
@ -515,7 +515,7 @@ # ► Machine Learning
|
|||
* [minitorch](https://github.com/minitorch/minitorch) - Machine Learning Engineering Course Code
|
||||
* [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
|
||||
* [Unsloth](https://github.com/unslothai/unsloth) - LLM Finetuning / Text Completion / [Notebooks](https://github.com/unslothai/notebooks) / [Guide](https://docs.unsloth.ai/get-started/fine-tuning-guide)
|
||||
* [ModelScope Finetuninge](https://modelscope.ai/civision/modelTraining) - Image Gen Model Finetuning / Up to 100 Images Per LoRA
|
||||
* [ModelScope Finetuning](https://modelscope.ai/civision/modelTraining) - Image Gen Model Finetuning / Up to 100 Images Per LoRA
|
||||
* [Markdown Web Browser](https://github.com/Dicklesworthstone/markdown_web_browser) - Webpage > Markdown Converter
|
||||
* [DeepSpeed](https://www.deepspeed.ai/) - Deep Learning Optimization Library
|
||||
* [Netron](https://github.com/lutzroeder/netron) - Visualizer for Neural Network, Deep Learning, and Machine Learning Models
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ ## ▷ Genre Specific Streaming
|
|||
* [MixtapeMonkey](https://mixtapemonkey.com/) - Hip-Hop / Mixtapes / [Discord](https://discord.gg/4Vsb73fQgd)
|
||||
* [DMO](https://dance-music.org/) - Electronic
|
||||
* [Vapor Archive](https://vaporarchive.neocities.org/) - Vaporwave
|
||||
* [Jamendo](https://www.jamendo.com/) or [Free Music Archive](https://freemusicarchive.org/) - Independant Music
|
||||
* [Jamendo](https://www.jamendo.com/) or [Free Music Archive](https://freemusicarchive.org/) - Independent Music
|
||||
* [Keygen Music](https://keygenmusic.tk/) - Keygen Music
|
||||
* [OperaOnVideo](https://www.operaonvideo.com/) - Opera Recordings
|
||||
* [Classical Music Only](https://classicalmusiconly.com/) or [musopen](https://musopen.org/music/) - Classical Music
|
||||
|
|
@ -381,7 +381,7 @@ ## ▷ Audio Ripping Tools
|
|||
* ⭐ **[Soggfy](https://github.com/Rafiuth/Soggfy)** - Spotify / 160kb Free / 320kb Premium
|
||||
* ⭐ **[Exact Audio Copy](https://www.exactaudiocopy.de/)** / [Guide](https://docs.google.com/document/d/1b1JJsuZj2TdiXs--XDvuKdhFUdKCdB_1qrmOMGkyveg) or [Whipper](https://github.com/whipper-team/whipper) - CD / DVD Audio Ripper
|
||||
* ⭐ **[Firehawk52](https://rentry.co/FMHYB64#firehawk)** - Deezer / Qobuz / Tidal / Requires Sign-Up / [Telegram](https://t.me/firehawk52official) / [Discord](https://discord.gg/uqfQbzHj6K)
|
||||
* [OnTheSpot](https://github.com/justin025/onthespot) - Apple Music / Bandcamp / Deezer / Qobuz / Spotify / Tidal/ [Discord](https://discord.com/invite/hz4mAwSujH)
|
||||
* [OnTheSpot](https://github.com/justin025/onthespot) - Apple Music / Bandcamp / Deezer / Qobuz / Spotify / Tidal / [Discord](https://discord.com/invite/hz4mAwSujH)
|
||||
* [Votify](https://github.com/glomatico/votify) - Spotify / 160kb Free / 320kb Premium / Requires WVD Keys / [Discord](https://discord.gg/aBjMEZ9tnq)
|
||||
* [streamrip](https://github.com/nathom/streamrip) - Deezer / Tidal / Qobuz / SoundCloud / 128kb Free / FLAC / Use Firehawk52 / [Colab](https://github.com/privateersclub/rip)
|
||||
* [OrpheusDL](https://github.com/OrfiTeam/OrpheusDL) - Deezer / Qobuz / 128kb Free / FLAC / Use Firehawk52 / [Deezer Module](https://github.com/uhwot/orpheusdl-deezer) / [Qobuz Module](https://github.com/OrfiDev/orpheusdl-qobuz)
|
||||
|
|
@ -539,7 +539,7 @@ # ► Audio Torrenting
|
|||
* ⭐ **[Redacted](https://redacted.sh/)** - MP3 / FLAC / [Interviews](https://interviewfor.red/), [2](https://igwiki.lyci.de/wiki/Redacted.sh_Guide)
|
||||
* ⭐ **[New-Team](https://new-team.org/)** - MP3 / FLAC
|
||||
* ⭐ **[Orpheus](https://orpheus.network/)** - MP3 / FLAC / [Interviews](https://interview.orpheus.network/)
|
||||
* ⭐ **[Lidarr](https://lidarr.audio/)**/ [GitHub](https://github.com/Lidarr/Lidarr) or [Headphones](https://github.com/rembo10/headphones) - Audio Torrent Autodownload
|
||||
* ⭐ **[Lidarr](https://lidarr.audio/)** / [GitHub](https://github.com/Lidarr/Lidarr) or [Headphones](https://github.com/rembo10/headphones) - Audio Torrent Autodownload
|
||||
* ⭐ **[Audio Torrent CSE](https://cse.google.com/cse?cx=006516753008110874046:v75cyb4ci55)** - Multi-Site Search
|
||||
* [TPB Music](https://thepiratebay.org/search.php?q=top100:100) - MP3 / FLAC / **Avoid Software / Games**
|
||||
* [TheMixingBowl](https://themixingbowl.org/) - Forum / Mixes / MP3 / Requires Sign-Up
|
||||
|
|
@ -749,7 +749,7 @@ ## ▷ Audio Players
|
|||
* [Harmonoid](https://harmonoid.com/) / [Discord](https://discord.gg/2Rc3edFWd8) / [GitHub](https://github.com/harmonoid/harmonoid)
|
||||
* [Namida](https://github.com/namidaco/namida) - Feature-Rich
|
||||
* [Audion](https://audionplayer.com/) - Feature-Rich / [GitHub](https://github.com/dupitydumb/Audion)
|
||||
* [TimeStetch](https://29a.ch/timestretch/) - Web-Based
|
||||
* [TimeStretch](https://29a.ch/timestretch/) - Web-Based
|
||||
* [MusikCube](https://musikcube.com/) - Terminal-Based
|
||||
* [XMPlay](https://www.un4seen.com/) - Module-Friendly
|
||||
* [Butterchurn Visualizer](https://butterchurnviz.com/), [MusicVid](https://musicvid.org/), [Vizzy](https://vizzy.io/) or [CatNip](https://github.com/noriah/catnip) - Audio Visualizers
|
||||
|
|
@ -918,11 +918,11 @@ ## ▷ Audio Editors
|
|||
* [Moises](https://moises.ai/) - Live Music Mixer
|
||||
* [plugdata](https://plugdata.org/) - Visual Audio Editor / [Discord](https://discord.com/invite/eT2RxdF9Nq)
|
||||
* [Element](https://kushview.net/element/), [Bespoke](https://www.bespokesynth.com/) or [SunVox](https://warmplace.ru/soft/sunvox/) - Modular Audio Environments / [Discord](https://discord.com/invite/RVk3RVJ)
|
||||
* [Music Experiment](https://petersalomonsen.com/webassemblymusic/livecodev2/), [Sonic-Pi](https://sonic-pi.net/), [SuperCollider](https://supercollider.github.io/), [Studel](https://strudel.cc/) or [WebChuck IDE](https://ccrma.stanford.edu/~tzfeng/webchuck-ide/) - Code-Based Audio Creators
|
||||
* [Music Experiment](https://petersalomonsen.com/webassemblymusic/livecodev2/), [Sonic-Pi](https://sonic-pi.net/), [SuperCollider](https://supercollider.github.io/), [Strudel](https://strudel.cc/) or [WebChuck IDE](https://ccrma.stanford.edu/~tzfeng/webchuck-ide/) - Code-Based Audio Creators
|
||||
* [WaveTracker](https://wavetracker.org/) - Wavetable Audio Editor / [GitHub](https://github.com/squiggythings/WaveTracker)
|
||||
* [FamiStudio](https://famistudio.org/) - NES Audio Editor / [Discord](https://discord.gg/QRCMe595Pv) / [GitHub](https://github.com/BleuBleu/FamiStudio)
|
||||
* [LittleSoundDJ](https://www.littlesounddj.com/lsd/index.php) - Game Boy Audio Editor
|
||||
* [Rosegarden](https://rosegardenmusic.com/) or [Ariamaestosa](https://ariamaestosa.github.io/ariamaestosa/docs/index.html) - Midi Sequencer / Notation Editors
|
||||
* [Rosegarden](https://rosegardenmusic.com/) or [Ariamaestosa](https://ariamaestosa.github.io/ariamaestosa/docs/index.html) - MIDI Sequencer / Notation Editors
|
||||
* [Basic Pitch](https://basicpitch.spotify.com/) - Audio-to-MIDI Converter
|
||||
* [BitMidi](https://bitmidi.com/) or [VGMusic](https://www.vgmusic.com/) - MIDI Files
|
||||
* [Mod Archive](https://modarchive.org/) - Audio Modules
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@ ### Adblocking
|
|||
|
||||
> How important is using an adblocker?
|
||||
|
||||
Sites generally contain ads, some of which can be harmful, often leading to unwanted pages or fake download buttons. Real download buttons are usually small, often text-based or subtly integrated into the site's design. Fake ones are frequently large, brightly coloured, use generic terms like 'Download Now', and may appear multiple times on a page. It can be hard to tell them apart, so it's important to always have an adblocker.
|
||||
Sites generally contain ads, some of which can be harmful, often leading to unwanted pages or fake download buttons. Real download buttons are usually small, often text-based or subtly integrated into the site's design. Fake ones are frequently large, brightly colored, use generic terms like 'Download Now', and may appear multiple times on a page. It can be hard to tell them apart, so it's important to always have an adblocker.
|
||||
|
||||
For browsers we recommend **[uBO](https://github.com/gorhill/uBlock)**, and you can also use a **[Redirect Skipper](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools/#wiki_.25B7_redirect_bypass)** to skip annoying countdowns. Note that uBO alone should be enough for browser adblocking, using DNS alongside it can cause conflicts.
|
||||
For browsers we recommend **[uBO](https://github.com/gorhill/uBlock)**, and you can also use a **[Redirect Skipper](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools/#wiki_.25B7_redirect_bypass)** to skip annoying countdowns. Note that uBO alone should be enough for browser adblocking; using DNS alongside it can cause conflicts.
|
||||
|
||||
For mobile **[AdGuard Premium](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/android/#wiki_.25B7_android_adblocking)** / [iOS](https://adguard.com/en/adguard-ios/overview.html) or **[Rethink DNS](https://rethinkdns.com/app)**, and you can block YouTube, Reddit, and X.com ads with **[ReVanced Manager](https://revanced.app/)** or **[Morphe](https://morphe.software/)**, which you can optionally [setup easily](https://wispydocs.pages.dev/revanced-morphe-obtainium/). Note that uBO works on mobile browsers like Firefox too.
|
||||
For mobile **[AdGuard Premium](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/android/#wiki_.25B7_android_adblocking)** / [iOS](https://adguard.com/en/adguard-ios/overview.html) or **[Rethink DNS](https://rethinkdns.com/app)**, and you can block YouTube, Reddit, and X.com ads with **[ReVanced Manager](https://revanced.app/)** or **[Morphe](https://morphe.software/)**, which you can optionally [set up easily](https://wispydocs.pages.dev/revanced-morphe-obtainium/). Note that uBO works on mobile browsers like Firefox too.
|
||||
|
||||
!!!note Using several ad blockers, like uBO and AdGuard at the same time can [mess things up](https://x.com/gorhill/status/1033706103782170625). This only happens with regular ad blockers, so it's perfectly okay to use uBO alongside something like SponsorBlock.
|
||||
|
||||
|
|
@ -18,7 +18,7 @@ ### Antivirus
|
|||
|
||||
Before installing any file, it's recommended to scan the setup / install with **[VirusTotal](https://www.virustotal.com/)**. If you're having trouble determining if something is a false positive, refer to the **[Scan Guide](https://claraiscute.neocities.org/Guides/vtguide)** / [2](https://claraiscute.pages.dev/Guides/vtguide), or send it to us in [Discord](https://github.com/fmhy/FMHY/wiki/FMHY-Discord) and we'll take a look for you. For Android Apps, it's best to analyze them in a sandbox like [Triage](https://tria.ge/).
|
||||
|
||||
!!!note Most antivirus programs are unnecessary and can cause slow down. If you use trusted websites, Windows Defender should be all you need to stay safe, and you can run a [Malwarebytes](https://www.malwarebytes.com/) scan from time to time for extra protection.
|
||||
!!!note Most antivirus programs are unnecessary and can cause slowdowns. If you use trusted websites, Windows Defender should be all you need to stay safe, and you can run a [Malwarebytes](https://www.malwarebytes.com/) scan from time to time for extra protection.
|
||||
|
||||
***
|
||||
|
||||
|
|
@ -105,7 +105,7 @@ ### Privacy
|
|||
|
||||
For email privacy, we recommend **[Proton](https://proton.me/mail)** and for search **[SearXNG](https://searx.fmhy.net/)**. It's also good to check sites like **[HaveIBeenPwned](https://haveibeenpwned.com/Passwords)** to make sure your info hasn't been part of any recent data breaches.
|
||||
|
||||
!!!note Remember never to use your real email, or password on any site you're not sure is trustworthy. It's good to use a different password on every site you register for, that way if a breach happens, only the password for that one site is compromised. You can also use email [aliasing](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools/#wiki_.25B7_email_aliasing).
|
||||
!!!note Remember never to use your real email or password on any site you're not sure is trustworthy. It's good to use a different password on every site you register for, that way if a breach happens, only the password for that one site is compromised. You can also use email [aliasing](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/internet-tools/#wiki_.25B7_email_aliasing).
|
||||
|
||||
!!!note Keep in mind that it's **never** a good idea to upload personal or confidential files to any file host / cloud AI, even if they claim to be encrypted.
|
||||
|
||||
|
|
@ -118,7 +118,7 @@ ### Windows Guide
|
|||
Download an ISO from Massgrave's **[Genuine Installation Media](https://massgrave.dev/genuine-installation-media)** page, and follow the **[Clean Install Windows Guide](https://massgrave.dev/clean_install_windows)** to install it. After install, activate it with **[Microsoft Activation Scripts](https://rentry.co/FMHYB64#mas)**. If you'd like to use Windows 10 past its End-Of-Life date, follow **[Windows 10 After EOL](https://massgrave.dev/windows10_eol)**.
|
||||
|
||||
* **[Windows Install / Debloat Guide](https://wispydocs.pages.dev/windows/)**
|
||||
* **Software Sites: [Virgil Software Search](https://virgil.samidy.com/Software/) / [CracksURL](https://cracksurl.com/) [Download Guide](https://cracksurl.com/how-to-download/) / [LRepacks](https://lrepacks.net/)**
|
||||
* **Software Sites: [Virgil Software Search](https://virgil.samidy.com/Software/) / [CracksURL](https://cracksurl.com/) / [Download Guide](https://cracksurl.com/how-to-download/) / [LRepacks](https://lrepacks.net/)**
|
||||
|
||||
***
|
||||
|
||||
|
|
|
|||
|
|
@ -764,7 +764,7 @@ ## ▷ Multi-Language
|
|||
* 🌐 **[LexiLogos](https://www.lexilogos.com/english/index.htm)** - Multi-Language Dictionary Index
|
||||
* ↪️ **[Translation Tools](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools#wiki_.25B7_translators)**
|
||||
* ⭐ **[Language Transfer](https://www.languagetransfer.org/)** - Language Learning Lectures
|
||||
* ⭐ **[Language Reactor](https://www.languagereactor.com/)**, [Dreaming](https://dreaming.com/) / [Subreddit](https://www.reddit.com/r/dreamingspanish/), [2](https://www.reddit.com/r/DreamingFrench/), [LLPlayer](https://github.com/umlx5h/LLPlayer), [Trancy](https://www.trancy.org/) or [Easysubs](https://easysubs.cc/) - Learn Languages via Videos
|
||||
* ⭐ **[Language Reactor](https://www.languagereactor.com/)**, [Dreaming](https://dreaming.com/) / [Subreddit](https://www.reddit.com/r/dreamingspanish/), [2](https://www.reddit.com/r/DreamingFrench/), [LLPlayer](https://github.com/umlx5h/LLPlayer), [Trancy](https://www.trancy.org/) or [Easysubs](https://easysubs.cc/) - Learn Languages via Videos
|
||||
* ⭐ **[Readlang](https://readlang.com/)** - Learn a Language via Web Browsing
|
||||
* [Language Learners](https://forum.language-learners.org/) - Language Learning Forum / Community
|
||||
* [WordReference](https://www.wordreference.com/), [Glosbe](https://glosbe.com/) or [Reverso](https://reverso.net/) - Translation Dictionary
|
||||
|
|
|
|||
|
|
@ -786,7 +786,7 @@ ## ▷ 3D Tools
|
|||
|
||||
# ► Undertale / Deltarune
|
||||
|
||||
* ⭐ **[Undertale Wiki](https://undertale.wiki/)** / [Deltarune Wiki](https://deltarune.wiki/) - Main Gameplay & Lore Databases
|
||||
* ⭐ **[Undertale Wiki](https://undertale.wiki/)** / [Deltarune Wiki](https://deltarune.wiki/) - Main Gameplay & Lore Databases
|
||||
* ⭐ **[r/Undertale](https://www.reddit.com/r/Undertale/)** or **[r/Deltarune](https://www.reddit.com/r/Deltarune/)** - Community Subreddits
|
||||
* ⭐ **[Toby Fox (X/Twitter)](https://x.com/tobyfox)**, - Primary Creator Updates / [Tumblr](https://fwugradiation.tumblr.com/) / [Bluesky](https://bsky.app/profile/tobyfox.undertale.com)
|
||||
* ⭐ **[nochocolate](https://nochocolate.tumblr.com/)** - Foundational Character and Lore Deep-Dives
|
||||
|
|
@ -820,7 +820,7 @@ ## ▷ Modding & Fan Content
|
|||
## ▷ Fan Games
|
||||
|
||||
* 🌐 **[GameJolt Undertale](https://gamejolt.com/games/best/tag-undertale)** or **[itch.io Undertale](https://itch.io/games/tag-undertale)** - Fan Game Indexes / Indie Tributes
|
||||
* ⭐ **[Don't Forget](https://gamejolt.com/games/dontforget/150752)** - Online Multiplayer Fangame / Deltarune Elements
|
||||
* ⭐ **[Don't Forget](https://gamejolt.com/games/dontforget/150752)** - Online Multiplayer Fangame / Deltarune Elements
|
||||
* ⭐ **[Undertale Yellow](https://gamejolt.com/games/UndertaleYellow/136925)** - Major UNDERTALE Prequel Fan Game / Massive Mod Community / [Wiki](https://undertaleyellow.wiki.gg/) / [Mods](https://gamebanana.com/games/19606)
|
||||
* ⭐ **[Disbelief Papyrus](https://gamejolt.com/games/DisbeliefUnofficial/464116)** - Genocide Route AU / Iconic Papyrus Fight
|
||||
* ⭐ **[DustTale](https://gamejolt.com/games/dusttale/308853)** - Popular Dark AU / Murderous Sans Story
|
||||
|
|
|
|||
|
|
@ -214,7 +214,7 @@ ## ▷ GIF Tools
|
|||
* [ScreenToGif](https://www.screentogif.com/) - GIF Recorder / Windows / [GitHub](https://github.com/NickeManarin/ScreenToGif)
|
||||
* [licecap](https://www.cockos.com/licecap/) - Create GIFs via Screencasts / Windows, Mac, Linux / [GitHub](https://github.com/justinfrankel/licecap)
|
||||
* [ugiffer](https://iobureau.com/ugiffer/) - Create GIFs via Screencasts / Windows
|
||||
* [blinkies.cafe](https://blinkies.cafe/) - Custom Retro Blinkie GIFs / Badges [GitHub](https://github.com/piconaut/blinkies.cafe)
|
||||
* [blinkies.cafe](https://blinkies.cafe/) - Custom Retro Blinkie GIFs / Badges / [GitHub](https://github.com/piconaut/blinkies.cafe)
|
||||
|
||||
***
|
||||
|
||||
|
|
|
|||
|
|
@ -765,7 +765,7 @@ ## ▷ System Tools
|
|||
* ⭐ **[Alfred](https://www.alfredapp.com/)**, [Raycast](https://www.raycast.com/), [Albert](https://albertlauncher.github.io/), [Quicksilver](https://qsapp.com/), [KeyboardCowboy](https://github.com/zenangst/KeyboardCowboy) or [SOL](https://sol.ospfranco.com/) - Keystroke Launchers / Spotlight Replacements / [Alfred Workflows / Themes](https://www.packal.org/) / [Albert GitHub](https://github.com/albertlauncher/albert)
|
||||
* ⭐ **[CustomShortcuts](https://www.houdah.com/customShortcuts/)**, [Karabiner-Elements](https://karabiner-elements.pqrs.org/) or [ShortcutKeeper](https://shortcutkeeper.com/) - Custom Keyboard Shortcuts
|
||||
* ⭐ **[alt-tab-macos](https://alt-tab-macos.netlify.app/)** - Windows-Style Alt-Tab for Mac
|
||||
* [MuMuPlayer](https://www.mumuplayer.com/, [NoxPlayer](https://www.bignox.com/) or [Genymotion](https://www.genymotion.com/download/) - Android on macOS
|
||||
* [MuMuPlayer](https://www.mumuplayer.com/), [NoxPlayer](https://www.bignox.com/) or [Genymotion](https://www.genymotion.com/download/) - Android on macOS
|
||||
* [Advanced macOS Commands](https://saurabhs.org/advanced-macos-commands) - Advanced Command-Line Tools
|
||||
* [Conky](https://conky.cc), [eul](https://github.com/gao-sun/eul), [Stats](https://github.com/exelban/stats), [Mission Center](https://gitlab.com/mission-center-devs/mission-center) or [MacFetch](https://github.com/gantoreno/macfetch) - Hardware / System Monitors / [Conky Colors](https://github.com/helmuthdu/conky_colors)
|
||||
* [Hot](https://github.com/macmade/hot) - CPU Monitor
|
||||
|
|
|
|||
|
|
@ -365,7 +365,7 @@ ## ▷ Downloading / Stahování
|
|||
|
||||
* [War-Forum](https://war-forum.net/) - Video / Audio / Books / Magazines / Comics / NSFW
|
||||
* [Datoid](https://datoid.to/) - Video / Audio / Books / Sign-Up Required for 1GB+ Files
|
||||
* [FastShare.cloud](https://fastshare.cloud/) - Video / Audio / Books
|
||||
* [FastShare.cloud](https://fastshare.cloud/) - Video / Audio / Books
|
||||
* [WarezCenter](https://warcenter.cz/) - Video / Audio / Books / NSFW
|
||||
* [WebShare](https://webshare.cz/) - Video / Audio / Books
|
||||
* [hellspy](https://hellspy.to/) - Video / Geoblocked
|
||||
|
|
@ -453,7 +453,7 @@ # ► French / Français
|
|||
* [Perspective Monde](https://perspective.usherbrooke.ca/) - Datasets / Statistics
|
||||
* [carto.tchoo](https://carto.tchoo.net/) - Live Train Map
|
||||
* [Prix Carburants](https://www.prix-carburants.gouv.fr/) - Gas Prices
|
||||
* [Donnons](https://donnons.org/) or [Geev](https://www.geev.com/) - Free Stuff Exchange / Gifting
|
||||
* [Donnons](https://donnons.org/) or [Geev](https://www.geev.com/) - Free Stuff Exchange / Gifting
|
||||
* [Signsuisse](https://www.sgb-fss.ch/signsuisse/fr/), [LSF Dico](https://lsfdico.injs-metz.fr/) or [LSQ](https://lsq-fr.ca/) - French Sign Language Dictionaries
|
||||
* [I Say LSF](https://dico.swax-lsf.fr/) - French Sign Translator
|
||||
|
||||
|
|
@ -1067,7 +1067,7 @@ ## ▷ Streaming / پخش
|
|||
|
||||
* [RadioVatani](https://www.radiovatani.com/) - Persian Movies / TV / Live / 1080p
|
||||
* [Nostalgik](https://nostalgiktv.org/) - Persian Movies / TV / Cartoons / 720p
|
||||
* [myket](https://myket.ir/ ) - Movies / TV / Region Locked
|
||||
* [myket](https://myket.ir/) - Movies / TV / Region Locked
|
||||
* [imvbox](https://www.imvbox.com/) - Movies / TV / Sub
|
||||
* [hikoca](https://hikoca.co.uk/) - Movies / TV
|
||||
* [Anten.ir](https://www.anten.ir/) - Live TV / Sports
|
||||
|
|
@ -1111,7 +1111,7 @@ ## ▷ Streaming
|
|||
* ⭐ **[Grupa Mirai](https://www.grupa-mirai.pl/)** - Anime / Sub / 1080p / [Discord](https://discord.gg/WyXrp6ZK5J)
|
||||
* [Virpe](https://virpe.cc/) - Movies / TV
|
||||
* [Vestroiakr](https://vestroiakr.blogspot.com/) - Movies / TV / Anime
|
||||
* [kinoteka](https://kinoteka.cc/) - Movies / TV / Anime
|
||||
* [kinoteka](https://kinoteka.cc/) - Movies / TV / Anime
|
||||
* [premiumsmart](https://premiumsmart.eu/) - Movies / TV / Anime
|
||||
* [Zerion](https://zerion.cc/) - Movies / TV / Cartoons / Dub / 720p
|
||||
* [Zaluknij](https://zaluknij.cc/) - Movies / TV / Anime
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@ ## ▷ VPN Server
|
|||
* [OpenConnect](https://gitlab.com/openconnect/openconnect) - SSL VPN / [GUI](https://openconnect.github.io/openconnect-gui/)
|
||||
* [Pritunl](https://pritunl.com/) - VPN Server / [GitHub](https://github.com/pritunl/pritunl)
|
||||
* [Algo VPN](https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/) - Cloud VPN / [GitHub](https://github.com/trailofbits/algo)
|
||||
* [SShuttle](https://sshuttle.readthedocs.io/en) - SSH VPN Server [GitHub](https://github.com/sshuttle/sshuttle)
|
||||
* [SShuttle](https://sshuttle.readthedocs.io/en) - SSH VPN Server / [GitHub](https://github.com/sshuttle/sshuttle)
|
||||
* [DSVPN](https://github.com/jedisct1/dsvpn) - Simple VPN Server
|
||||
* [Openconnect](https://ocserv.gitlab.io/www/index.html) - SSL VPN Server
|
||||
|
||||
|
|
|
|||
|
|
@ -874,7 +874,7 @@ # ► Tracking / Database
|
|||
* ⭐ **[GoodReads](https://www.goodreads.com/)** - Tracking / Database / Reviews / Recommendations / [Frontend](https://github.com/nesaku/BiblioReads)
|
||||
* ⭐ **[StoryGraph](https://www.thestorygraph.com/)** - Tracking / Recommendations
|
||||
* ⭐ **[MyAnimeList](https://myanimelist.net/)** - Manga / Light Novels / Tracking / Database / Reviews / [Tools](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/storage#wiki_myanimelist_tools)
|
||||
* ⭐ **[Anilist](https://anilist.co/)** - Manga / Light Novels / Manhwa / Manhua / Tracking / Databsase / Reviews [Wrapper](https://github.com/AurelicButter/AniList-Node) / [Extras](https://greasyfork.org/en/scripts/370473-automail)
|
||||
* ⭐ **[Anilist](https://anilist.co/)** - Manga / Light Novels / Manhwa / Manhua / Tracking / Databsase / Reviews / [Wrapper](https://github.com/AurelicButter/AniList-Node) / [Extras](https://greasyfork.org/en/scripts/370473-automail)
|
||||
* ⭐ **[MangaBaka](https://mangabaka.org/)** - Multi-Site Manga + Novel Rating Aggregator / Tracking / [Discord](https://mangabaka.org/discord)
|
||||
* ⭐ **[Novel Updates](https://www.novelupdates.com/)** or [RanobeDB](https://ranobedb.org/) - Light Novel Tracking / Databases
|
||||
* ⭐ **[LeagueOfComicGeeks](https://leagueofcomicgeeks.com/)** - Comic Tracking / Database / Releases
|
||||
|
|
|
|||
|
|
@ -308,7 +308,7 @@ ### Mod / Resource Pack Indexes
|
|||
|
||||
### Premium Only Launchers
|
||||
|
||||
* **Note** - The following options require a official Minecraft account to use.
|
||||
* **Note** - The following options require an official Minecraft account to use.
|
||||
|
||||
***
|
||||
|
||||
|
|
|
|||
|
|
@ -419,7 +419,7 @@ ## ▷ ASCII Art
|
|||
|
||||
* ⭐ **[TAAG](https://patorjk.com/software/taag/)**, [DeepAA](https://github.com/OsciiArt/DeepAA), [Kammerl](https://www.kammerl.de/ascii/AsciiSignature.php), [ASCII Art Studio](https://www.majorgeeks.com/files/details/ascii_art_studio.html) or [ASCII Today](https://ascii.today/) - ASCII Art / Text Generators
|
||||
* [REXPaint](https://www.gridsagegames.com/rexpaint/), [Playscii](https://jp.itch.io/playscii) or [PabloDraw](https://picoe.ca/products/pablodraw/) - ASCII Editors
|
||||
* [ASCII Paint](https://ascii.alienmelon.com/, [TextPaint](https://textpaint.com/) or [ASCII Blaster](https://asdf.us/asciiblaster/), [2](https://ircart.github.io/asciiblaster/) / [GitHub](https://github.com/ircart/asciiblaster)- ASCII Paint Tools
|
||||
* [ASCII Paint](https://ascii.alienmelon.com/), [TextPaint](https://textpaint.com/) or [ASCII Blaster](https://asdf.us/asciiblaster/), [2](https://ircart.github.io/asciiblaster/) / [GitHub](https://github.com/ircart/asciiblaster)- ASCII Paint Tools
|
||||
* [shabzefilters](https://shabzefilters.netlify.app/), [ascii-art-generator](https://www.ascii-art-generator.org/), [asciiart](https://asciiart.club/), [ascii-image-converter](https://github.com/TheZoraiz/ascii-image-converter), [Monospace](https://codepen.io/Mikhail-Bespalov/pen/JoPqYrz), [ITOA](https://itoa.hex.dance/), [ascii-exploration](https://ascii-exploration.vercel.app/), [text-image](https://www.text-image.com/) or [ASCII-art-creator](https://github.com/CherryPill/ASCII-art-creator) - Image to ASCII Art
|
||||
* [Love ASCII](http://loveascii.com/), [asciiart.eu](https://www.asciiart.eu/), [EmojiCombos](https://emojicombos.com/), [16colors](https://16colo.rs/), [ascii.co](https://ascii.co.uk/art) or [RoySAC](https://www.roysac.com/sitemap.html) - Browse / Copy ASCII Art
|
||||
* [Image to Braille](https://505e06b2.github.io/Image-to-Braille/) - Convert Images to Braille
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ # ► Specialty Streaming
|
|||
* [Viddsee](https://www.viddsee.com/), [Shortverse](https://www.shortverse.com/explore), [Short of the Week](https://www.shortoftheweek.com/) or [Argo](https://web.watchargo.com/) - Short Films
|
||||
* [0xDB](https://0xdb.org/) - Rare Movies
|
||||
* [HomeMovies101](https://www.homemovies100.it/en/) - Home Movies
|
||||
* [Prelinger Archives](https://www.panix.com/~footage/) - Ephemeral Films [Archive](https://archive.org/details/prelinger)
|
||||
* [Prelinger Archives](https://www.panix.com/~footage/) - Ephemeral Films / [Archive](https://archive.org/details/prelinger)
|
||||
* [3DS Movies](https://rentry.co/FMHYB64#3dsm) - 3D Movies for 3DS Handhelds
|
||||
* [r/MusicalBootlegs](https://www.reddit.com/r/MusicalBootlegs) or ["Slime Tutorials"](https://youtube.com/playlist?list=PLsIt5G4GJ27lxWP9Qi5N70zRSkJAT0ntc) - Broadway Show Recordings
|
||||
* [GlobalShakespeares](https://globalshakespeares.mit.edu/) - Shakespeare Performance Recordings
|
||||
|
|
@ -579,7 +579,7 @@ ## ▷ IPTV Tools
|
|||
|
||||
# ► Smart TV
|
||||
|
||||
* 🌐 **[TroyPoint](https://troypoint.com/)** - App Indexe
|
||||
* 🌐 **[TroyPoint](https://troypoint.com/)** - App Index
|
||||
* ⭐ **[TizenTube](https://tizentube.6513006.xyz/)** - Ad-Free Samsung Smart TV YouTube / [GitHub](https://github.com/reisxd/TizenTube), [2](https://github.com/reisxd/TizenBrew)
|
||||
* ⭐ **[webOS Homebrew](https://www.webosbrew.org/)** - LG TV Homebrew / [Guide](https://wispydocs.pages.dev/lg-tv-homebrew/) / [Discord](https://discord.gg/xWqRVEm) / [GitHub](https://github.com/webosbrew/)
|
||||
* [Stremio](https://www.stremio.com/) - Torrent Streaming App
|
||||
|
|
|
|||
|
|
@ -23,6 +23,31 @@ function getDocsFiles(dir) {
|
|||
const files = getDocsFiles(DOCS_DIR);
|
||||
let hasErrors = false;
|
||||
|
||||
// Load typos from CSV
|
||||
const typosMap = new Map();
|
||||
try {
|
||||
const typosPath = path.resolve(__dirname, 'typos.csv');
|
||||
if (fs.existsSync(typosPath)) {
|
||||
const typosContent = fs.readFileSync(typosPath, 'utf-8');
|
||||
const typoLines = typosContent.split('\n');
|
||||
typoLines.forEach(line => {
|
||||
const parts = line.split(',');
|
||||
if (parts.length >= 2) {
|
||||
const typo = parts[0].trim().toLowerCase();
|
||||
const correction = parts[1].trim();
|
||||
if (typo && correction) {
|
||||
typosMap.set(typo, correction);
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log(`✅ Loaded ${typosMap.size} typos from dictionary.`);
|
||||
} else {
|
||||
console.warn('⚠️ scripts/typos.csv not found, using fallback list.');
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(`⚠️ Failed to load typos: ${e.message}`);
|
||||
}
|
||||
|
||||
console.log('🔍 Scanning markdown files for formatting issues...\n');
|
||||
|
||||
files.forEach(file => {
|
||||
|
|
@ -30,6 +55,21 @@ files.forEach(file => {
|
|||
const lines = content.split('\n');
|
||||
const relativePath = path.relative(process.cwd(), file);
|
||||
|
||||
// Files to complete ignore from all checks
|
||||
const FILES_TO_IGNORE = [
|
||||
'docs/feedback.md',
|
||||
'docs/index.md'
|
||||
];
|
||||
|
||||
if (FILES_TO_IGNORE.some(fileToIgnore => relativePath === fileToIgnore)) return;
|
||||
|
||||
// Files to ignore for english-specific checks (Typos, A/An, Repeated Words)
|
||||
const FILES_TO_IGNORE_ENGLISH_CHECKS = [
|
||||
'docs/non-english.md'
|
||||
];
|
||||
const isSeparatedEnglishCheck = FILES_TO_IGNORE_ENGLISH_CHECKS.some(f => relativePath === f);
|
||||
|
||||
|
||||
lines.forEach((line, index) => {
|
||||
const lineNum = index + 1;
|
||||
let errors = [];
|
||||
|
|
@ -139,6 +179,140 @@ files.forEach(file => {
|
|||
errors.push(`Missing space before slash (e.g. "Word/ Word"): "${match[0]}"`);
|
||||
break;
|
||||
}
|
||||
|
||||
// C. Double slash separated by spaces: "/ /"
|
||||
if (/\/\s+\//.test(lineWithoutLinks)) {
|
||||
errors.push('Double slash with spaces detected (e.g. "/ /")');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Check 9: Adjacent links without separator (e.g. "Text [Link]" instead of "Text / [Link]")
|
||||
const FILES_TO_IGNORE_LINK_SEPARATOR_CHECK = [
|
||||
'docs/beginners-guide.md',
|
||||
'docs/unsafe.md'
|
||||
];
|
||||
|
||||
if (!FILES_TO_IGNORE_LINK_SEPARATOR_CHECK.some(ignoredFile => file.endsWith(ignoredFile))) {
|
||||
const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
||||
let match;
|
||||
while ((match = linkRegex.exec(line)) !== null) {
|
||||
const index = match.index;
|
||||
if (index === 0) continue;
|
||||
|
||||
const preceding = line.slice(0, index);
|
||||
|
||||
// Ignore if line starts with valid list marker followed immediately by this link
|
||||
// e.g. "* [Link]" or "- [Link]" or "1. [Link]"
|
||||
if (/^\s*([*+-]|\d+\.)\s*$/.test(preceding)) continue;
|
||||
// Ignore if Starred item "* ⭐ [Link]"
|
||||
if (/^\s*[*+-]\s+⭐\s*$/.test(preceding)) continue;
|
||||
// Ignore if link is preceded by bold/italic markers only (start of line)
|
||||
if (/^\s*[*+-]\s+[*_]+\s*$/.test(preceding)) continue;
|
||||
|
||||
const trimmedPreceding = preceding.trimEnd();
|
||||
if (trimmedPreceding.length === 0) continue;
|
||||
|
||||
// Check last character
|
||||
const lastChar = trimmedPreceding.slice(-1);
|
||||
// Allowed: separators, openers, end of sentences
|
||||
// ! for images (![Alt]), * for bold, ( for parens, etc.
|
||||
const allowedChars = ['/', '-', ',', '(', '&', '>', ':', '|', '*', '!', '.', '?', ';', '_', '⭐', '+', '#', '►', '▷'];
|
||||
if (allowedChars.includes(lastChar)) continue;
|
||||
|
||||
// Check for allowed functional words (prepositions, conjunctions, determiners, etc.)
|
||||
// to avoid flagging sentences like "Try a [VPN]" or "Use [Adblock]"
|
||||
const allowedWords = [
|
||||
'or', 'and',
|
||||
'a', 'an', 'the',
|
||||
'use', 'using', 'via', 'with',
|
||||
'in', 'on', 'at', 'by',
|
||||
'to', 'for', 'from',
|
||||
'check', 'see', 'try',
|
||||
'requires', 'including', 'includes',
|
||||
'that', 'your', 'our',
|
||||
'of', 'about', 'their', 'join', 'getting', 'most',
|
||||
'like', 'every', 'being', 'mostly', 'highly', 'up', 'we', 'optionally'
|
||||
];
|
||||
const wordRegex = new RegExp(`(^|[^a-zA-Z0-9])(${allowedWords.join('|')})$`, 'i');
|
||||
if (wordRegex.test(trimmedPreceding)) continue;
|
||||
|
||||
errors.push(`Missing separator before link (expected "/", "or", ",", etc): "...${preceding.slice(-10)}[${match[1]}]..."`);
|
||||
}
|
||||
}
|
||||
|
||||
// Check 10, 11, 12: English-specific checks (Repeated words, Typos, Grammar)
|
||||
if (!isSeparatedEnglishCheck) {
|
||||
// Prepare clean line for text-based checks (remove URLs and Markdown links)
|
||||
// Remove entire link block: [Text](Url) -> " "
|
||||
const lineCleaned = line.replace(/https?:\/\/[^\s)]+/g, '')
|
||||
.replace(/\[[^\]]+\]\([^)]*\)/g, ' ');
|
||||
|
||||
// Check 10: Repeated words (e.g. "the the")
|
||||
const repeatedWordMatch = lineCleaned.match(/\b([a-zA-Z]+)\s+\1\b/i);
|
||||
if (repeatedWordMatch) {
|
||||
errors.push(`Repeated word detected: "${repeatedWordMatch[0]}"`);
|
||||
}
|
||||
|
||||
// Check 11: Common Typos
|
||||
// Check 11: Common Typos from CSV
|
||||
// We load this once usually, but here for simplicity we assume 'commonTyposMap' is prepared.
|
||||
// Actually, let's just stick to the hardcoded list for now as a fallback,
|
||||
// but if the CSV loading logic was added, we would use it.
|
||||
// Since we are inside the line loop, we shouldn't load the file here.
|
||||
// The loading should happen outside. We will assume 'typosMap' exists.
|
||||
|
||||
if (typeof typosMap !== 'undefined' && typosMap.size > 0) {
|
||||
// Unicode-aware split to avoid breaking words like "Română" or "Slovenčina"
|
||||
const words = lineCleaned.split(/[^\p{L}0-9']+/u);
|
||||
const ALLOWED_TYPOS = [
|
||||
'hong', 'hls', 'troy', 'fami', 'rentry', 'typesafe', 'spritesheet', 'ba',
|
||||
'puyo', 'moo', 'ne', 'nes', 'rg', 'rgshop', 'rgshows',
|
||||
're', 'revanced', 'skipper', 'ste', 'sneedacity', 'rom', 'ide', 'luks', 'cse', 'gameboy',
|
||||
'lan', 'pokemon', 'sa', 'cah', 'rin', 'tx', 'mame'
|
||||
];
|
||||
for (const word of words) {
|
||||
const lowerWord = word.toLowerCase();
|
||||
if (typosMap.has(lowerWord) && !ALLOWED_TYPOS.includes(lowerWord)) {
|
||||
errors.push(`Possible typo: "${word}" (should be "${typosMap.get(lowerWord)}")`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Fallback to small list if CSV not loaded
|
||||
const commonTypos = {
|
||||
'teh': 'the', 'adn': 'and', 'thier': 'their', 'dont': "don't", 'cant': "can't",
|
||||
'wont': "won't", 'occured': 'occurred', 'seperate': 'separate',
|
||||
'independant': 'independent', 'reccomend': 'recommend', 'recieve': 'receive',
|
||||
'adress': 'address', 'neccessary': 'necessary', 'tring': 'trying', 'availalbe': 'available'
|
||||
};
|
||||
for (const [typo, correction] of Object.entries(commonTypos)) {
|
||||
const typoRegex = new RegExp(`\\b${typo}\\b`, 'i');
|
||||
if (typoRegex.test(line)) {
|
||||
if (!/http/.test(line)) {
|
||||
errors.push(`Possible typo: "${typo}" (should be "${correction}")`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check 12: Basic A/An Grammar
|
||||
const aAnMatch = line.match(/\b(a)\s+([aeio]\w+)/i);
|
||||
if (aAnMatch) {
|
||||
const word = aAnMatch[2].toLowerCase();
|
||||
if (word !== 'one') {
|
||||
errors.push(`Incorrect article "a" usage: "${aAnMatch[0]}" (should be "an")`);
|
||||
}
|
||||
}
|
||||
|
||||
const anAMatch = line.match(/\b(an)\s+([bcdfVkLmMnNpPqQrRsStTvVwWxXyYzZ]\w+)/i);
|
||||
if (anAMatch) {
|
||||
const word = anAMatch[2];
|
||||
const isAcronym = /^[A-Z0-9]+$/.test(word);
|
||||
if (!isAcronym) {
|
||||
errors.push(`Incorrect article "an" usage: "${anAMatch[0]}" (should be "a")`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (errors.length > 0) {
|
||||
|
|
|
|||
118405
scripts/typos.csv
Normal file
118405
scripts/typos.csv
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue