Another Note — a watchful shinigami eye rendered in glowing lines, with teal and crimson signal accents
   .-"      "-.
  /            \
 |              |
 |,  .-.  .-.  ,|
 | )(_o/  \o_)( |
 |/     /\     \|
 (_     ^^     _)
  \__|IIIIII|__/
   | \IIIIII/ |
   \          /
    `--------`

Another Note

A single-file, cross-platform command-line tool that reimplements the Shinigami Eyes social-profile label filters — reading the shipped bloom-filter data to tell you whether a profile identifier carries a trans-friendly or anti-trans signal, or neither. Fully offline. Privacy-preserving by design.

Python 3.10+ Zero-config · no build Offline classify CI · 50 tests MIT + CC-BY-NC-SA

What it does

One script. Two privacy-preserving ideas carried over from the upstream project.

Classify offline

Point it at a profile URL or handle and it answers from the bundled bloom filters — no network, no account list, no enumeration.

Bloom filters

The dataset is a fixed-size bit array plus k hash functions. Membership is testable; the underlying account list is not recoverable.

Encrypted reporting

Submitting labels uses RSA-OAEP-256 + AES-CBC-256 to the project's public key, so the cloud provider cannot read what you send.

Human-in-the-loop

Every report is confirmed one-by-one at an interactive prompt. No flag, pipe, or environment variable can skip that step.

“Neither” is not a verdict. A neither result means the key is absent from the shipped data — a coverage gap, never a statement about any person. A positive label reflects a third-party crowd-sourced signal, not a verified fact.

Quick start

No install, no build step. Standard library plus cryptography (only for report).

# clone git clone https://github.com/bescritt/another-note cd another-note # classify from arguments, flags, or a STDIN pipe (offline) python3 another_note.py classify facebook.com/example_page_one python3 another_note.py classify --url https://twitter.com/example_handle_one python3 another_note.py classify --twitter handle --facebook page cat list.txt | python3 another_note.py classify # coverage sanity signal python3 another_note.py estimate # math self-check (synthetic, no real accounts) python3 another_note.py selfcheck # submit labels — interactive, per-item, no override python3 another_note.py report "facebook.com/x:transgender_friendly" "facebook.com/y:transgender_averse"

Exit codes

CodeMeaning
0success
1runtime / usage error, or report POST failed
2an input became a non-keyable domain/URL (--fail-on-unsupported)
3reporting aborted (no interactive confirmation available)

Reporting — safety model

The report path posts only to the upstream endpoint using the upstream encryption scheme. The port authors run no server.

# 1. each entry normalizes through the identifier sanitizer # non-keyable identifiers (e.g. bare instagram.com/<handle>) are refused # 2. every remaining entry is confirmed individually at an interactive prompt # typing 'yes' — no flag, env var, or pipe skips this # 3. when stdin is non-interactive, submission aborts rather than guessing facebook.com/x • transgender_friendly — confirm? (yes/no) yes → built hybrid envelope (RSA-OAEP-256 + AES-CBC-256) → POST

Anyone who removes, bypasses, or automates that prompt operates outside this project's safety model and the upstream intent. The wire label tokens use the upstream server's expected JSON keys (t-friendly / transphobic); they appear only at the server boundary.

License

Two licenses, cleanly separated.

Upstream — MIT

LICENSE-MIT

The algorithm and format knowledge reimplemented here — the FNV-1a hash contract, the bloom-filter byte layout, the identifier normalization rules, and the submit-vote encryption envelope — originate from Shinigami Eyes, which is MIT-licensed. The verbatim MIT text is bundled and its copyright notice kept intact, as MIT requires.

This port — CC-BY-NC-SA 4.0

LICENSE-CC

The new code, documentation, packaging, and legal text carry the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. Share and adapt under the same terms, with credit and no commercial use.

Acknowledgements. Another Note ports the Shinigami Eyes browser extension. We thank the original authors and contributors for the design, the privacy-preserving architecture, and the public dataset. Please support the original authors via their repository: github.com/shinigami-eyes. No verified first-party donation URL was located at writing time.