Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyAnimeList To Refract

License: MIT Python 3

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.


💔 Why this exists

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".


⚙️ How it works

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 episodes
  • tvtime-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.


🚀 Getting started

1. Prerequisites

No coding knowledge needed, just:

  • Python 3 — check with python3 --version in a terminal. Missing it? Install from python.org/downloads (Windows: check "Add Python to PATH" during install).
  • This repo, downloaded — no git needed. Click Code → Download ZIP on the repo page and unzip it anywhere.

2. Open a terminal in the project folder

  • 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".

3. Run it

# 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/

4. Import into Refract

⚠️ 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.


🔒 Privacy

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.


📁 Repo structure

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

🧭 My attempts: Plans A–D

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.


📄 License

MIT

About

Converte a tua lista de anime do MyAnimeList para o formato "TV Time" que o import de TV Time do Refract suporta

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages