Files
RexiMemo-OSE/README.md
T

6.2 KiB

RexiMemo: Open Source Edition

RexiMemo OSE is a deliberately reduced public edition of the RexiMemo Flipnote Hatena replacement server. It keeps the old proxy-style DSi connection model, a SQLite database, Flipnote browsing, posting from Flipnote Studio, Creator's Rooms, stars, downloads, web text comments, and one-frame mini Flipnote comments.

This is not a source dump of the production service. Production-only security, privacy, identity, moderation, operations, migration and community systems have been removed before release so the public repository does not expose sensitive deployment logic, credentials, private integration code or production data-handling machinery. The trade-off is important: OSE is smaller and easier to inspect, but some of its remaining mechanisms are intentionally basic and are not suitable for a hardened public service without further work.

The server does not contain Nintendo NAS, DNS interception, SSLv3/TLS gateway code or an authentication service. It listens on port 8080 and accepts the historical HTTP proxy request style used by the older public Hatena server. DSi requests to the Hatena hosts are expected to carry X-DSi-SID; obtaining that transport authentication is outside this repository.

What is kept

  • SQLite storage instead of the old plaintext flipnotes.dat database.
  • The Flipnote Studio proxy resource tree and PPM/TMB/UGO/NTFT handling.
  • Browse pages on DSi and web, plus a small About page listing open-source credits.
  • Flipnote posting from Flipnote Studio. Web PPM upload is not included.
  • Creator's Rooms. A room is created automatically the first time an account or guest IP posts a Flipnote.
  • Optional username/password accounts.
  • Guest posting and comments tied to the source IP when no account is logged in.
  • Text comments on the website and DSi, plus one-frame mini Flipnote comments from Flipnote Studio.
  • A minimal web admin page for IP bans and Flipnote deletion.
  • Three anonymised sample Flipnotes copied from a production database so a fresh checkout has content to browse.
  • Newly generated geometric NTFT/NPF placeholder assets. The web client uses the RexiMemo logo with an Open Source Edition subtitle; other production artwork and all bundled font files are omitted.

What is intentionally not here

RexiMemo OSE has no built-in NAS/DNS/auth gateway, certificate or private-key material, production session system, device management, FSID proof/linking, PPM signature verification, emulator or bot detection, passkeys, profile pictures, Creator's Room themes, experiments, Sudomemo migration, Discord bot/integration, support centre, policy/terms pages, notification system, API tokens, web Flipnote uploader, advanced moderation cases, or production moderation tooling.

Login state is only an IP -> account row in SQLite. There are no session cookies or device records. This means people sharing an IP can also share login state, and changing IPs logs a user out. Guest identity works the same way. IP addresses are stored in the database for this purpose. Bans are also intentionally simple and only block an IP address.

Passwords are stored with a simple SHA-256 digest in this reference edition. That is not modern password storage. Replace it, replace the IP login model, and add the security controls appropriate to your deployment before exposing an OSE instance to untrusted users.

Running it

Use Python 3.10 or newer.

python3 -m pip install -r requirements.txt
python3 server.py

The default port is 8080. Set REXIMEMO_PORT to use another port.

A detailed built-in documentation page can be enabled explicitly:

python3 server.py docs:enabled

With that flag, /docs is available and a Docs link appears in the web navigation. Without it, the route is not exposed. The same manual is also included as DOCS.md for reading directly on GitHub.

Open the web client at http://127.0.0.1:8080/.

For Flipnote Studio on a DSi, OSE only provides the Hatena HTTP server/proxy portion. The console still needs a working authentication/NAS path. Configure the DSi to use the official RexiMemo DNS service, or another functional DNS/auth/NAS service, then enable Proxy Server in the same DSi connection and set it to the IP address of the machine running OSE with port 8080. If REXIMEMO_PORT is changed, use that port instead.

This split is deliberate: authentication/NAS, private keys and the production network-security implementation are not included in OSE, reducing the risk of exposing sensitive live-service security material in the public repository. Do not add production credentials or private authentication code to the checkout.

The seeded administrator account is:

username: reximemo
password: alpine

Change or remove that account before using the server anywhere outside a local test setup.

Accounts and Creator's Rooms

Accounts are optional. Signing in associates the current source IP with an account. A Flipnote posted from that IP is attributed to the account and creates its Creator's Room if one does not exist yet. If no account is signed in, OSE creates a guest Creator's Room for the posting IP and uses the author name embedded in the Flipnote where available.

Mini Flipnote comments follow the same rule. No signed mini-Flipnote identity proof, FSID ownership verification or device-linking flow is performed in OSE.

Database and sample content

The live database is database/reximemo.sqlite3. Flipnotes are stored under database/Creators/<FSID>/ and mini comments under database/Comments/.

The repository ships with three sample PPM files. Their author names, FSIDs and filenames were rewritten to sample values before inclusion; the original production account, session, device, comment and moderation records are not included.

Placeholder assets

tools/generate_placeholders.py rebuilds the DSi NTFT/NPF assets included with OSE. They are plain geometric graphics and do not reuse RexiMemo production images. The web logo is the one deliberate artwork exception and includes an Open Source Edition subtitle.

License

RexiMemo OSE retains the GNU Affero General Public License version 3 used by the public Hatena server code. See LICENSE and Hatenatools/License.txt.