Perfect World Project · Foreign Exchange
Ask a city for its files and you get WordPerfect ordinances, Lotus budgets,
dBASE permit logs, Excel 95 salary tables, Outlook .msg dumps, and
TIFFs of paper. None of it is secret. All of it is unreadable in
practice, which does the same work as secret and costs the agency
nothing.
This is the desk that changes the money. Hand it a currency nobody accepts anymore and it gives you back plain text, CSV, and JSON — identified by its bytes, never by its file extension, with the exchange recorded line by line so anyone can check the rate.
One file, read in memory and thrown away. Nothing is stored, nothing is logged, and nothing leaves this server. To convert a whole vault, use the command line below — that runs on your machine and never uploads anything.
or drag one here — .doc .wpd .wk1 .dbf .xls .msg .pdf .zip .dbf .shp, or anything at all
stateless · 25 MB limit · nothing retained
Generated from the running code, so this page cannot promise more than the engine delivers. Where the rate is poor, it says so.
full — the content is read properly · tables — the grid comes out · text — the words, not the layout · partial — real but knowingly incomplete · detect — identified precisely, with the tool you'd still need named. A format we can only half-read says so; that honesty is the difference between an archive and a pile.
The engine is pure Python with no dependencies. Copy the folder onto any
machine with Python 3.9 or newer — a laptop, a library computer, a Raspberry
Pi — and it runs. Start with scan: it reads nothing into a
database and writes nothing at all, it just tells you what you were sent.
# what did they actually send us? python3 -m app.foreign_exchange scan ./vault # convert it, keeping the originals python3 -m app.foreign_exchange convert ./vault \ -o ./bundle --keep-originals --sqlite # one file, in detail python3 -m app.foreign_exchange inspect odd-file.doc
# what comes out bundle/ manifest.json census + what ran records.jsonl one object per file dataset.csv the same, flat text/<id>.txt extracted text tables/<id>.N.csv extracted grids provenance.jsonl every success AND failure originals/ byte-for-byte sources
Every record carries the SHA-256 of the original bytes, which adapter read it, and whether the conversion lost anything. Files that could not be read are in the bundle saying so, rather than quietly missing. An archive that can't show its work isn't evidence.