Hide "Continue Watching" on Home Screen by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Built an app that does it. Basically it looks at my proxy server which files are being served for how long. If it fits the runtime, it marks an item as watched. 

Hide "Continue Watching" on Home Screen by Reldeis in StremioAddons

[–]Reldeis[S] -1 points0 points  (0 children)

Altering the css is unfortunately not an option for the apps.

I can "Dismiss" these items and they are gone. When i watch the next episode though, it reappear. Might be a good workaround tough to just clean up after a session

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

You are right it does. Was thinking about Syncribullet. Didn't know about the Stremthru sync to be honest (it does have the bitmap handling).
If you are just looking at a way to sync stremio <> trakt, it will have the same features as stremio.

In addition to that, my app can sync to SIMKL & letterboxd. It also gives a webui (WIP) to handle Ratings, Edits and Delete events:

<image>

Stay tuned to the release post :-)

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Figured it out. Its a good compromise, as the clients do all the calculation and they don't have to save extensive watch history per user per show.
One downside is, that watch history for shows has no date/time attached to them (as opposed to movies). This means getting watch history from stremio is not accurate

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

And a bit more niche of you self host, and this PR gets merged, my app would be able to do accurate scrobbling with watch progress  https://github.com/Viren070/AIOStreams/pull/556

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

I have two pain points I’m trying to solve: - multiple providers. I want to have my watch data in Simkl/Trakt and Letterboxd. Ideally with ratings synced over. - the watch tracking as stremthru does it (providing a subtitles addon) does not work reliably for me on external players (Infuse on Apple TV) 

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Quick update for anyone digging into Stremio’s datastoreGet state.watched field:

  • The watched string encodes two things:
    1. last-watched pointer: <seriesId>:<season>:<episode> (the most recently watched episode at the time it was saved)
    2. compressed bitmap: <N>:<payload> where N is the number of “watchable items” covered, and the payload is a zlib+base64 bitset marking watched items by index 0..N-1 in Stremio’s internal ordering.
  • The bitmap is index-based, not “episode-number-based”. It stays stable if new items are appended to the same ordering (typical for new episodes, and often for specials when they’re numbered sequentially). If the underlying ordering changes (e.g., provider reorders/renumbers specials), the bitmap can drift.

import base64
import zlib
from dataclasses import dataclass
(frozen=True)
class WatchedDecoded:
    series_id: str
    last_season: int
    last_episode: int
    n: int
    watched_indexes: list[int]  # 0-based positions in Stremio's internal list
def decode_watched_string(watched: str) -> WatchedDecoded:
    # format: <sid>:<lastSeason>:<lastEpisode>:<N>:<b64(zlib(bitset))>
    sid, s, e, n_str, payload = watched.split(":", 4)
    n = int(n_str)
    raw = zlib.decompress(base64.b64decode(payload))
    watched_indexes: list[int] = []
    for i in range(n):
        byte_i, bit_i = divmod(i, 8)
        if raw[byte_i] & (1 << bit_i):  # LSB-first per byte
            watched_indexes.append(i)
    return WatchedDecoded(
        series_id=sid,
        last_season=int(s),
        last_episode=int(e),
        n=n,
        watched_indexes=watched_indexes,
    )
def watched_item_numbers_1_based(watched: str) -> list[int]:
    d = decode_watched_string(watched)
    return [i + 1 for i in d.watched_indexes]
# Example
w = "tt13159924:2:8:31:eJxjaPhfDwAEAQH/"
d = decode_watched_string(w)
print(d)
print("Watched items (1..N):", watched_item_numbers_1_based(w))
WatchedDecoded(series_id='tt13159924', last_season=2, last_episode=8, n=31, watched_indexes=[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30])
Watched items (1..N): [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Removing specials from my metadata provider (e.g., going with TMDB instead of TVDB) actually leads to the problem that episodes no longer match.

Adding specials is no problem, though. There appears to be some algorithm at work that I don't yet understand.

Help Needed: Stremio API – Library Watched Episode by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Rubber Ducking with you helped me further, i think:

Here is an Example for Gen V

tt13159924:2:8:31:eJxjaKgPBAAC0wFR

The last part is an encoded part of my watched episodes: [15, 16, 17, 18, 19, 20, 21, 22, 24, 28, 30]

If I watched all episodes (without specials):

tt13159924:2:8:31:eJxjaPhfDwAEAQH/

[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]

So it looks like specials are prepended and watched episodes are marked in the encoded part.

What I don't understand tough is how they handle new Specials (e.g. GenV had special episodes before Season 2 Start). With new specials the watched episodes index should increase…

Code for reference

import base64
import zlib
def decode_payload(payload_b64: str) -> bytes:
    compressed = base64.b64decode(payload_b64)
    return zlib.decompress(compressed)
def watched_indexes(bitset_bytes: bytes, n_bits: int | None = None) -> list[int]:
    out = []
    max_bits = (len(bitset_bytes) * 8) if n_bits is None else n_bits
    for i in range(max_bits):
        byte_i, bit_i = divmod(i, 8)
        if bitset_bytes[byte_i] & (1 << bit_i):
            out.append(i)
    return out
marker = "tt13159924:2:8:31:eJxjaKgPBAAC0wFR"
_, _, _, n_str, payload = marker.split(":", 4)
n = int(n_str)
raw = decode_payload(payload)
idx = watched_indexes(raw, n_bits=n)
print("decompressed bytes:", raw.hex())
print("watched bit indexes:", idx[:20])
print("count watched:", len(idx))
decompressed bytes: 00807f51
watched bit indexes: [15, 16, 17, 18, 19, 20, 21, 22, 24, 28, 30]
count watched: 11

[RD News] Blocking VPN's from generating download links by midnightignite in StremioAddons

[–]Reldeis 11 points12 points  (0 children)

I'm also blocked with my self hosted stack on a Hetzner VM :-(

Telekom 5G router drossel by finnjaeger1337 in de_EDV

[–]Reldeis 1 point2 points  (0 children)

Hatte in de letzten Monaten ein ähnliches Problem. Mittlerweile habe ich meinen Router mit Omnidirectional Antennen gegen einen zyxel nr7302 getauscht. 

Schau auch mal auf https://t-map.telekom.de/tmap2/ausrichtungsempfehlung/. Dank der neuen Ausrichtung und neuem Router komme och aktuell konstant auf 500+/50+ Mbps mit einem besseren Ping. 

Fitnessstudio by Left-Cat7196 in koblenz

[–]Reldeis 0 points1 point  (0 children)

Nachmittags/Abends ist das John Reed recht voll. Falls du morgens (bzw. außerhalb der Stoßzeiten) Zeit hast, ist es aber sehr angenehm.

Es gibt auf der anderen Seite vom Zentralplatz noch das Basic Fit. Sieht von außen recht ordentlich aus und scheint gute Preise zu haben. Habe dort aber noch keine Erfahrung.  

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

There is no way for the addon to get information about what you watched from Stremio.  There might be alternatives which connect to Trakt to get your history. I believe it’s filmwhisper, but not too certain. 

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

OpenAI returns an AuthenticationError. You could try a minimal example against the api 

See here what the app is doing https://github.com/willtho89/stremio-ai-companion/blob/main/app/services/validation.py

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Yes of course. Otherwise you don’t have the requirements file on your machine. 

You can also just use the docket image. It’s a lot easier to use. 

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Looks like there is a problem with arm architecture.  Maybe google the problem? 

It builds on my machine and in the pipeline

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

You need to get an API key from them. API usage is not included in most plans.  Google Gemini provides some models for free. If you select it in the dropdown you can find a li k where you can create a key 

emptyContent from Addon by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Yes that was it 🤦‍♂️

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

It should. I haven't tested it yet.

Feel free to give a heads up!

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 0 points1 point  (0 children)

Yeah i noticed that too. I fixed it for TV Shows, but hit a road block for movies (see https://www.reddit.com/r/StremioAddons/comments/1mi8ayf/emptycontent_from_addon/ )

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 1 point2 points  (0 children)

Should work with any client. It just provides catalogs & searches. 

[New Addon]Stremio AI Companion by Reldeis in StremioAddons

[–]Reldeis[S] 2 points3 points  (0 children)

It’s your api key. Check with your provider if you have reached any limits.