Lumora v6.1
Live TV regions
- The Live tab can be narrowed to the regions your providers actually carry. Settings has a new Regions pane: every country the catalogue knows, plus the two groupings the panels use as a locality of their own (Arabic, Latin America), multi-select, with nothing ticked meaning All regions. It reads the only signal providers give - the category name (Xtream
category_name/ M3Ugroup-title) and, when that says nothing, the channel name ("UK: BBC ONE") - so it works on the catalogue already on disk, with no provider refresh. Detect from device seeds the selection from the device's own locale, and the selection travels in a backup with the rest of the settings. - A two-letter code is only trusted when the content proves what it means.
HR|is horse racing, not Croatia;TS|is tennis, not Tunisia;AR|is Arabic-language news rather than Argentina. The handful of genuinely ambiguous codes are settled from the text beside them before the table is consulted, a bare two-letter word ("NO EVENTS", "IN THE NEWS") only counts when the panel separated it with a pipe or colon, and a category the provider tagged as a brand, league, quality tier or language resolves to no region at all. - Untagged channels stay visible unless you say otherwise. Rows a provider shipped with no locality - brands, league channels, world feeds - are a state of their own, governed by Show channels with no region tag (on by default) rather than by a country tick, so filtering to the UK cannot quietly drop half a sports catalogue. A selection that would hide everything says which regions came up empty instead of leaving a blank tab.
- Every list agrees with the filter. The drop happens inside the Live derive, in the same pass as the adult filter, so the category rows, the grid, Search, the guide, catch-up, Multiview and the Sports board all see the same catalogue by construction. The selection is part of the derived cache key (sorted, so a stored set's iteration order cannot miss the cache on every launch), and the session log records what was filtered and how many rows fell out.
Live player guide
- What's on now and next stays on screen while you watch. The player's controls bar carries the channel's listings as a strip of four cards: OK opens the selected programme's details, a long press arms the same reminder the guide offers, and the rail refills from the stored guide as it runs out while its now/next labels advance once a minute. The old single-line "now playing" subtitle is gone - it showed one programme and hid the rest. The bar itself is about half its previous height: channel identity, the transport and a two-row option grid share the space, so REC, Subtitles and the rest stay inside the panel instead of scrolling off its edge, with the D-pad walking the two rows column by column. A timeline filter drops overlapping or duplicate provider rows, so a programme that already started cannot reappear behind Next.
Diagnostics
- Diagnostics can be saved to the TV itself. Save diagnostics to this device writes the crash reports and the session log into one text file under
Download/Lumora- through MediaStore on Android 10+, so no storage permission is asked, and the app's own external files folder on older releases. The QR page still serves the same evidence to a phone; this is the path for a set with no browser nearby. The report carries the build header and is written off the interface thread, then the dialog names the file it landed on rather than just saying it worked.
Posters & shelves
- Posters fill their tile instead of sitting in a card frame. The grid, shelf, search, filmography and cast tiles each drew a surface frame around the artwork - 8dp on a poster, 6dp on a face - so every picture was inset in a border of card colour. The frame is gone: the artwork runs to the tile's edge, the focus ring is drawn over the picture while the tile is focused, and each image height grew by exactly the padding that was removed, so the rows keep their previous size.
Backup
- Exporting or importing a backup no longer crashes on a release build. The settings section built its JSON list type as an anonymous Gson
TypeTokensubclass, and R8 rewrites the generic signature of those subclasses even when the class is kept - so Gson's constructor threw "TypeToken must be created with a type argument" from the backup code's static initialiser, and every backup operation died with anExceptionInInitializerErrorbefore it could read a setting. The type is built withTypeToken.getParameterizednow, which carries the type in the token object instead of a class-file attribute. A build check now rejects any future anonymousTypeTokenin production sources, because that failure only exists in release builds and every test passes without it.
Discover
- Scraper catalogues load on release builds again. The A-Z index for AniWorld/SerienStream and the StreamingCommunity title parser used the same anonymous
TypeTokenform. Their constructors threw the same exception, the surrounding "start empty" handling swallowed it, and those catalogues came back empty in release builds only. Both useTypeToken.getParameterizednow.
Stremio
- Long addon stream URLs are no longer cut short.
parseStreamscapped every direct URL withtake(2048), so a signed CDN link from an aggregator (AIOStreams/TorBox answered with URLs of 3-4 KB) reached the server truncated, and the server answered with its "Link not recognised" error slate. That slate is itself playable video, so Find & Play treated the attempt as a success and stayed on it instead of trying the next source. The sanity cap is 16 KB now, and a URL over it is dropped rather than shortened so the queue moves on; subtitle URLs follow the same rule. - An addon's direct streams are no longer one entry in Versions. Find & Play still picks one automatically, but the Versions list collapsed a Stremio addon's direct URLs to a single entry per addon - so an aggregator such as AIOStreams, with 40-50 cached results for an episode, left no way to choose a different release. An addon that answers with more than one direct stream now gets its own submenu in Versions, listing every stream by the addon's own line (release name, size, seeders, cache state, indexer) and marking the one playing. Two streams that share a release title are distinct choices again, while the last-good-source memory still keys on the title, so a re-signed URL remains the same remembered source.
Installation
Download the APK below and install on your Android TV, Fire TV Stick, or phone.