Skip to content

Commit 949dda2

Browse files
committed
readme + landing copy
1 parent f9080a8 commit 949dda2

1 file changed

Lines changed: 44 additions & 41 deletions

File tree

README.md

Lines changed: 44 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,29 @@
11
# Invisibles
22

3-
Some text carries characters you can't see: zero-width spaces, non-breaking spaces that aren't real
4-
spaces, direction controls, the odd characters that ride along in text copied out of an AI.
5-
Invisibles shows you what's hiding and strips it, all in your browser.
3+
Paste text, see every hidden character in it with its name and code point, then
4+
click once to strip them. Zero-width spaces, non-breaking spaces that look like
5+
real ones, direction controls, the odd characters that ride along in text copied
6+
out of an AI.
67

78
[![Ko-fi](https://img.shields.io/badge/Ko--fi-buy_me_a_coffee-FF5E5B?style=flat-square&logo=ko-fi&logoColor=white)](https://ko-fi.com/jju1s)
89
[![License](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)
910
[![Tests](https://img.shields.io/github/actions/workflow/status/cig13zs/invisibles/test.yml?style=flat-square&label=tests)](https://github.com/cig13zs/invisibles/actions)
1011

11-
Web app: **[cig13zs.github.io/invisibles](https://cig13zs.github.io/invisibles/)**. Or install the
12-
[browser extension](#browser-extension) so it's one click from any tab, offline.
12+
Web app: **[cig13zs.github.io/invisibles](https://cig13zs.github.io/invisibles/)**.
13+
Or install the [browser extension](#browser-extension) so it's one click from
14+
any tab, offline.
1315

14-
Paste text, see every hidden character with its name and code point, then click once to remove them.
15-
One invisible character kept a PlayStation trophy stuck for ten years. The same kind of thing breaks
16-
CSV and JSON imports, stops passwords from matching, throws off code search, and hides inside text
17-
pasted out of ChatGPT. Most editors never draw these characters, so you find out after something
18-
breaks.
16+
One invisible character kept a PlayStation trophy stuck for ten years. The same
17+
thing breaks CSV and JSON imports, stops passwords matching, throws off code
18+
search, and hides in text pasted out of ChatGPT. Most editors never draw these
19+
characters, so you find out after something breaks.
1920

20-
There are two builds and they share one engine (`core.js`):
21+
Almost every other tool for this is a website you paste into, which means your
22+
text goes to their server first. This one has no server. It's one HTML page and
23+
one small script, and it works offline.
2124

22-
- **Web app**, nothing to install: [cig13zs.github.io/invisibles](https://cig13zs.github.io/invisibles/)
23-
- **Browser extension**, a popup you can open from any page. Works offline, declares no permissions.
24-
25-
## It doesn't upload anything
26-
27-
Almost every other "remove invisible characters" or "AI text cleaner" tool is a website you paste
28-
into, so your text goes to their server first. This one has no server. It's one HTML page and one
29-
small script. It works offline and it's free.
25+
There are two builds sharing one engine (`core.js`): the web app, and a popup
26+
extension that declares no permissions.
3027

3128
## What it looks for
3229

@@ -40,16 +37,19 @@ small script. It works offline and it's free.
4037
| Variation selectors | `U+FE00`..`U+FE0F` | Invisible; can carry hidden data |
4138
| Control chars | C0/C1, line and paragraph separators | Non-printing; break parsers |
4239

43-
Look-alike spaces are replaced with a normal space so words don't run together. Everything else is
44-
removed. There's an optional toggle that also swaps fancy punctuation (curly quotes, em dashes,
45-
ellipsis) for plain ASCII, for when you're scrubbing the typographic giveaways out of AI text.
40+
Look-alike spaces get replaced with a normal space so words don't run together.
41+
Everything else is removed. There's an optional toggle that also swaps fancy
42+
punctuation (curly quotes, em dashes, ellipsis) for plain ASCII, for scrubbing
43+
typographic giveaways out of AI text.
4644

4745
## Browser extension
4846

49-
The extension is popup-only. Click the toolbar icon, paste, clean, copy. It declares no permissions
50-
and no host access, so it can't read any page you visit. It works with no connection.
47+
Popup only. Click the toolbar icon, paste, clean, copy. It declares no
48+
permissions and no host access, so it can't read any page you visit, and it
49+
works with no connection.
5150

52-
Not on the Chrome Web Store yet, so load it unpacked (Chrome, Edge, Brave, Opera):
51+
Not on the Chrome Web Store yet, so load it unpacked in Chrome, Edge, Brave or
52+
Opera:
5353

5454
1. Download the latest zip from [Releases](https://github.com/cig13zs/invisibles/releases) and unzip it.
5555
2. Open `chrome://extensions` and turn on Developer mode.
@@ -58,7 +58,8 @@ Not on the Chrome Web Store yet, so load it unpacked (Chrome, Edge, Brave, Opera
5858

5959
## Use it as a library
6060

61-
`core.js` has no dependencies and runs in the browser (`window.Invisibles`) or in Node (`require`).
61+
`core.js` has no dependencies and runs in the browser (`window.Invisibles`) or
62+
in Node (`require`).
6263

6364
```js
6465
const I = require('./core.js');
@@ -72,13 +73,13 @@ I.normalizePunctuation('“a”—b'); // '"a"--b' (opt-in)
7273

7374
`scan()` and `clean()` never throw, even on non-string input.
7475

75-
## How it's built
76+
## Files
7677

7778
```
78-
core.js classify() + scan() + clean() + normalizePunctuation(), browser and Node
79+
core.js classify() + scan() + clean() + normalizePunctuation()
7980
core.test.js node core.test.js
80-
index.html the web app: paste, reveal, clean, copy. No framework, no build step
81-
extension/ MV3 popup (popup.html + core.js + icons), no permissions
81+
index.html the web app. No framework, no build step
82+
extension/ MV3 popup, no permissions
8283
```
8384

8485
```bash
@@ -87,18 +88,20 @@ node core.test.js
8788

8889
## Limits
8990

90-
It flags characters, not intent. A non-breaking space is sometimes there on purpose, so the reveal
91-
view shows you exactly what and where before you strip anything. The punctuation normalize is opt-in
92-
and lossy, since em dashes become `--`, and it's off by default. It can't tell you whether text was
93-
written by an AI; it only shows the characters that are actually there.
91+
It flags characters, not intent. A non-breaking space is sometimes deliberate,
92+
so the reveal view shows you exactly what and where before you strip anything.
9493

95-
## More tools
94+
The punctuation normalize is opt-in and lossy, since em dashes become `--`. It's
95+
off by default.
9696

97-
- **[Carryover](https://github.com/cig13zs/carryover)** — AI chat context transfer for ChatGPT, DeepSeek & Grok
98-
- **[Rinse](https://github.com/cig13zs/rinse)** — see the GPS in a photo, then wash it off
99-
- **[Return Google Cache](https://github.com/cig13zs/return-google-cache)** — put the Cached link back on Google results
100-
- **[Return 100 Results](https://github.com/cig13zs/return-100-results)** — browse ~100 Google results as one page
97+
It can't tell you whether text was written by an AI. It only shows the
98+
characters that are actually there.
99+
100+
## More tools
101101

102-
All free, all offline, all open source. [More →](https://github.com/cig13zs/About-Me)
102+
- [Carryover](https://github.com/cig13zs/carryover), AI chat context transfer for ChatGPT, DeepSeek and Grok
103+
- [Rinse](https://github.com/cig13zs/rinse), see the GPS in a photo and wash it off
104+
- [Return Google Cache](https://github.com/cig13zs/return-google-cache), put the Cached link back on Google results
105+
- [Return 100 Results](https://github.com/cig13zs/return-100-results), browse ~100 Google results as one page
103106

104-
MIT licensed. Do what you like with it.
107+
MIT licensed. [Ko-fi](https://ko-fi.com/jju1s) if it saved you a headache.

0 commit comments

Comments
 (0)