syncribullet icon indicating copy to clipboard operation
syncribullet copied to clipboard

Allows for syncing currently watched items from Stremio

  • Table of Contents :toc:
  • [[#info][Info]]
    • [[#goal][Goal]]
    • [[#help][Help]]
    • [[#warning][WARNING]]
  • [[#todo][ToDo]]
    • [[#dynamic-sync][Dynamic Sync]]
    • [[#import-sync][Import Sync]]
    • [[#advanced-sync][Advanced Sync]]
    • [[#two-way-sync][Two-Way Sync]]
    • [[#catalogs][Catalogs]]
  • [[#use-the-addon][Use the Addon]]
  • [[#modify-and-build-yourself][Modify and Build yourself]]
    • [[#build][Build]]
    • [[#start][Start]]
    • [[#develop][Develop]]
  • [[#known-issues][Known Issues]]
  • [[#what-else][What else?]]
    • [[#naming][Naming]]
    • [[#pull-requests][Pull Requests]]
    • [[#stars][Stars]]
    • [[#contact][Contact]]
    • [[#support][Support]]
  • Info Currently the addon synchronizes with following services:
  • Anilist
  • Simkl

I plan on adding the following in the near future:

  • MyAnimelist
  • Kitsu
  • Trakt

** Goal I want to implement a two way sync over multiple services with Stremio acting as the Sender and the watchlists acting as the Receivers.

** Help If you want to help, the next step is adding mappings between the services to a generalized format.

*** Syncing The idea is that everything is the same everywhere. So a mapping to check what should be synced would look like:

#+begin_src typescript let lastWatched; if (symkl.last_watched_at > stremio.state.lastWatched) { lastWatched = symkl.last_watched_at; } else if (anilist.mediaEntry.last_watched) { lastWatched = anilist.mediaEntry.last_watched; } #+end_src

*** Mapping Information should be mapped as much as possible. After deciding the leader of the sync, we get all possible values and fill up the rest: #+begin_src typescript // If Symkl has lastWatched if (symkl.state === "completed") { stremio.state.flaggedAsWatched = true anilist.state = "COMPLETED" } // If Anilist has lastWatched if (symkl.state === "COMPLETED") { stremio.state.flaggedAsWatched = true symcl.state = "completed" } #+end_src

** WARNING I have tested this as good as possible. Everything published here is currently good to go and shouldn't mess up your library. That said if anything does happen... I can't guarantee anything. Open up an Issue and I may be able to help out.

  • ToDo

** Dynamic Sync Dynamic Sync is when an item in the Senders is updated, that it get's reflected on the Receivers.

  • [X] Dynamic Sync from Stremio to Anilist
  • [ ] Dynamic Sync from Stremio to Kitsu
  • [ ] Dynamic Sync from Stremio to MyAnimelist
  • [X] Dynamic Sync from Stremio to Simkl
  • [-] Dynamic Sync from Stremio to Trakt (Already native Support use that)

** Import Sync Import Sync is theoretically a one-time action where the whole library get's synchronised from the Senders to the Receivers and vice-versa. But the plan is, that this can be run multiple times without wierd issues.

  • [ ] Import Sync from Stremio to Anilist
  • [ ] Import Sync from Stremio to Kitsu
  • [ ] Import Sync from Stremio to MyAnimelist
  • [-] Import Sync from Stremio to Simkl (Alternative until tested: [[https://github.com/aliyss/simkl-stremio][simkl-stremio]])
  • [-] Import Sync from Stremio to Trakt (Alternative until tested: [[https://github.com/aliyss/trakt-stremio-import][trakt-stremio-import]])

** Advanced Sync Advanced Sync is when the theoretical Receivers share their data between each other, validating and keeping each other in sync.

  • [ ] Sync between all Receivers

** Two-Way Sync Of course I'm going for the two-way sync. However this is harder than it actually seems at the moment. Due to not knowing what the prefered sync order is.

** Catalogs Stremio Catalog Support, self explanatory if you are using stremio.

  • [X] Anilist
  • [ ] Kitsu
  • [ ] MyAnimelist
  • [X] Simkl
  • [ ] Trakt
  • Use the Addon

[[https://56bca7d190fc-syncribullet.baby-beamup.club/][Click here!]]

  • Modify and Build yourself

** Build

#+begin_src bash npm install npm run build #+end_src

** Start Start the program. Then open the browser at the url mentioned, if this doesn't already happen automatically.

#+begin_src bash npm run start #+end_src

** Develop Instead of Start. Use the following. This will allow you to see the changes live.

#+begin_src bash npm run start:dev #+end_src

  • Known Issues

  • Authtokens are not updated if they expire. I'm working on that.

  • What else?

** Naming I chose the name SyncriBullet, because I want to blend all of the tracking websites together in a synchronised mix. There's not much more to it.

** Pull Requests Feel free to open pull requests if you think there can be improvements made. I will add an eslint check asap.

** Stars A star would be kind, but honestly I use GitHub stars more as bookmarks. So instead bookmark it.

** Contact

  • [[https://discord.gg/zNRf6YF][Stremio Addons Discord Server]]

  • [[https://discord.com/invite/u89XfYn][Simkl Discord Server]]

  • [[https://discord.com/invite/TF428cr][AniList Discord Server]]

  • [[https://discord.com/invite/zAypMTH][Aliyss' Discord Server]]

** Support If you like what I do consider buying me a coffee ;)

[[https://www.buymeacoffee.com/aliyss][Buy Me A Coffee]]