English | Português
Converts your MyAnimeList anime list into the "TV Time Liberator" format that Refract's TV Time import accepts — for anyone who, like me, lost their TV Time data when it shut down.
Every anime saga has its unforgettable betrayal — the best friend turned villain out of nowhere. This time it wasn't fiction — TV Time made sure to earn its spot in the Top 10 anime betrayals.
I'd used TV Time since July 16, 2020, tracking 331 followed shows and 4928 likes. It shut down with only 15 days' notice, and by the time I went looking for my data 3 days later, the official GDPR portal (gdpr.tvtime.com) already had dead DNS. Years of history, gone.
This repo is Plan C of my recovery attempts — the one that actually worked. The rest of the log (what didn't work) is at the bottom, under "My attempts".
Accepts: MyAnimeList's official anime export (https://myanimelist.net/panel.php?go=export → "Anime List") — anyone can grab theirs, even without ever having had a TV Time account.
Produces: the "TV Time Liberator" format — the same schema Refract's official Chrome extension used to produce while TV Time was still up, and which Refract's "TV Time" import still accepts:
tvtime-series-<today>.json— followed shows + watched episodestvtime-movies-<today>.json— watched movies
Schema documented by the open-source jeremy-albinet/tvtime-to-refract-converter, taken from a real TV Time GDPR export.
Along the way, it fixes a real mismatch: MAL gives each season its own id (e.g. "Attack on Titan" and "Attack on Titan Season 2" are separate entries), while TV Time/TheTVDB treat a show as a single entry with multiple seasons. The script merges the right entries using the community mapping Fribb/anime-lists. Full detail in docs/mal-import.
No coding knowledge needed, just:
- Python 3 — check with
python3 --versionin a terminal. Missing it? Install from python.org/downloads (Windows: check "Add Python to PATH" during install). - This repo, downloaded — no
gitneeded. Click Code → Download ZIP on the repo page and unzip it anywhere.
- Windows: Shift + right-click an empty space inside the folder → "Open PowerShell window here".
- Mac: right-click the folder → Services → "New Terminal at Folder" (or open Terminal and type
cd, then drag the folder in). - Linux: right-click inside the folder in your file manager → "Open in Terminal".
# Export your list at https://myanimelist.net/panel.php?go=export → "Anime List"
# Put the downloaded file in private/mal/, then run:
python3 mal_to_refract.py
# Output (2 .json files) lands in private/output/
⚠️ Note: this script is meant for people who never got the chance to import real TV Time data. If you've already imported TV Time shows/movies into Refract, running this import on top may overwrite that data — back up your current import first. If you try it anyway, let us know how it goes.
Refract → Settings/Import → "TV Time" → select the two .json files from private/output/. Refract shows how many shows/movies it recognized.
Runs entirely on your computer — nothing is sent anywhere, except the one-time, public download of the Fribb/anime-lists mapping (anime-list-full.json, third-party anime data, not yours).
Everything personal (your MAL export, the generated files) lives in private/, outside version control (see .gitignore) — see "Repo structure" below.
| Path | Contents |
|---|---|
docs/ |
documented results for each plan (public, no personal data) |
docs/resources/ |
third-party notes, sample data, tvtime_recover.py |
mal_to_refract.py |
the script, at the repo root |
private/ |
personal data, exports and real results (outside the public repo, see .gitignore) |
private/mal/ |
raw MyAnimeList exports |
private/output/ |
real results generated by the scripts on my data |
| Plan | Result | Detail |
|---|---|---|
| A — unrooted Android cache | ❌ Dead end — adb backup blocked for third-party apps since Android 12 |
docs/unrooted-android |
| B — browser storage | ❌ Dead end — valid session saved locally, but the backend is completely shut down | docs/browser-storage |
| C — rebuild the list via MAL | ✅ Works — that's the mal_to_refract.py above |
docs/mal-import |
| D — log everything again | 🤷 Only what's left over — most of it was already on MAL too, just missing movies and shows | — |
Hope this helped somehow.