Compare commits

...

1327 commits
1.2.1 ... main

Author SHA1 Message Date
Nayif
7d60a0c43f
Merge pull request #577 from skoruppa/main
fix for Kitsu and Mal content being still incorrectly requested
2026-03-09 05:19:50 +05:30
Nayif
e6c7bfc895
Merge pull request #565 from hoangtamthai/main
fix: Sync Setting Screen use correct SafeAreaView
2026-03-09 05:19:33 +05:30
Nayif
911730770b
Merge pull request #588 from saimuelbr/improve-language-detector
fix(i18n): use languageTag to detect region and select the correct language
2026-03-09 05:18:46 +05:30
Nayif
66b38c483b
Merge pull request #589 from saimuelbr/feat-scroll-filters
feat(ui): add horizontal scroll to download filters
2026-03-09 05:18:20 +05:30
tapframe
d840b06ca7 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-03-06 20:58:23 +05:30
tapframe
e0bc66c167 added Issue and PR templates 2026-03-06 20:56:45 +05:30
Nayif
237bf51b66
Merge pull request #608 from chrisk325/patch-16
fix edge case trailer unmount logic
2026-03-06 20:49:52 +05:30
chrisk325
6e7a121be0
minor fix to invalidate cache logic 2026-03-06 13:43:04 +05:30
chrisk325
a64d5ac910
fix invalidate cache logic 2026-03-06 13:40:20 +05:30
chrisk325
21e5035c97
minor fix to trailer retry logic 2026-03-06 13:32:44 +05:30
chrisk325
9dfb3aa474
fix edge cases 2026-03-06 13:24:02 +05:30
chrisk325
b40d45cbcb
fix unmount logic edgecases 2026-03-06 13:21:47 +05:30
tapframe
b89c5b7b4f change in ipa bundleID 2026-03-06 09:10:09 +05:30
Nayif
98b7defef6
Merge pull request #605 from chrisk325/patch-15
trailer aspect ratio from contain to cover
2026-03-06 05:40:43 +05:30
chrisk325
0dc207cc85
trailer aspect ratio from contain to cover 2026-03-06 05:37:33 +05:30
Nayif
e5006d95b1
Merge pull request #602 from chrisk325/patch-14
fix merge issues and movie trailers quality in hero section remove scaling
2026-03-06 05:29:13 +05:30
chrisk325
4c6aa39ccf
reduce cache ttl 2026-03-06 04:30:52 +05:30
chrisk325
1f64ee453a
fix previous merge issues 2026-03-06 04:19:24 +05:30
chrisk325
7bd4779745
fix merge issues 2026-03-06 04:15:27 +05:30
chrisk325
33fa8a0826
fix movie trailers quality in hero section remove scaling 2026-03-06 02:13:06 +05:30
Nayif
642f4ce7aa
Merge pull request #601 from chrisk325/patch-13
fix logic for cdn caching
2026-03-06 01:28:55 +05:30
chrisk325
ec9c0db867
fix logic for cdn caching 2026-03-06 01:25:51 +05:30
Nayif
94fc9b639f
Merge pull request #600 from altCK129/trailer-fix
fix local trailer playback and addresses a lot of tmdb hardcoded api key related issues.
2026-03-06 00:07:38 +05:30
Nayif
ff449c8817
Merge branch 'main' into trailer-fix 2026-03-06 00:07:21 +05:30
CK
dbd5b42b86
Delete .github/workflows/buillld.yml 2026-03-05 23:54:37 +05:30
CK
ea4218840c
Update youtubeExtractor.ts 2026-03-05 16:45:59 +00:00
CK
86477b594a
Update TrailerModal.tsx 2026-03-05 16:34:00 +00:00
CK
16a9c5c41d
Update HeroSection.tsx 2026-03-05 21:55:44 +05:30
CK
a2a801d68a
Update youtubeExtractor.ts 2026-03-05 21:39:26 +05:30
CK
5fa02d7c53
Update youtubeExtractor.ts 2026-03-05 21:35:41 +05:30
CK
09707af661
Update youtubeExtractor.ts 2026-03-05 21:27:34 +05:30
CK
23984bdfa6
Update trailerService.ts 2026-03-05 21:26:54 +05:30
CK
83d19f466c
Update TrailerModal.tsx 2026-03-05 20:23:28 +05:30
CK
6f8515f943
Update TrailerPlayer.tsx 2026-03-05 20:22:29 +05:30
CK
16ab2461d9
Update trailerService.ts 2026-03-05 20:21:37 +05:30
CK
da39ca47bc
Update youtubeExtractor.ts 2026-03-05 20:20:44 +05:30
CK
25de499931
Update youtubeExtractor.ts 2026-03-05 20:12:35 +05:30
CK
e9d549cebb
Update HeroSection.tsx 2026-03-05 15:44:38 +05:30
CK
c75f6ae9d0
Update youtubeExtractor.ts 2026-03-05 09:43:48 +00:00
CK
54173cd704
Update AppleTVHero.tsx 2026-03-05 14:56:33 +05:30
CK
02cecaf1ac
Update HeroSection.tsx 2026-03-05 14:54:29 +05:30
CK
c6c27bf86a
Update AppleTVHero.tsx 2026-03-05 14:51:17 +05:30
CK
8d50959abd
Update HeroSection.tsx 2026-03-05 14:50:25 +05:30
CK
80eb45e775
Rename build.yml to buillld.yml 2026-03-05 13:59:45 +05:30
CK
ffe94607d2
Update TrailerModal.tsx 2026-03-05 13:58:52 +05:30
CK
639d53263d
Update TrailerContext.tsx 2026-03-05 13:57:41 +05:30
CK
2019230dfd
Update TrailerPlayer.tsx 2026-03-05 13:54:56 +05:30
CK
b2cce94841
Update TrailersSection.tsx 4 2026-03-05 13:50:11 +05:30
CK
274d2f7d0a
Update HeroSection.tsx 3 2026-03-05 13:49:06 +05:30
CK
02e9aef9f2
Update AppleTVHero.tsx 2 2026-03-05 13:47:47 +05:30
CK
601194b93f
Update youtubeExtractor.ts 1 2026-03-05 13:46:02 +05:30
CK
879af0a0c2
Create build.yml 2026-03-05 13:43:08 +05:30
Nayif
3aff41a4d0
Merge pull request #595 from chrisk325/patch-11 2026-03-05 01:09:16 +05:30
chrisk325
ed5bb26a59
fix trailers: update user agents and innertube api key depreciation 2026-03-05 01:07:15 +05:30
tapframe
905c59d23d fetches watched_items locally when calculating the local only CW section. 2026-03-05 01:01:04 +05:30
tapframe
a0f10cacdc fix cw nuviosync ordering 2026-03-05 00:01:10 +05:30
saimuelbr
cf62ae74e6 fix(i18n): use languageTag to detect region and select the correct language 2026-03-03 15:37:10 -03:00
tapframe
1af5bf1633 fix for homescreen settinsg resetting on tablet layout 2026-03-03 22:25:39 +05:30
saimuelbr
51706e1478 feat(ui): add horizontal scroll to download filters 2026-03-02 18:02:42 -03:00
Nayif
58cb561712
Merge pull request #582 from saimuelbr/main
minor fix: Adding pt-BR code option to TMDBSettingsScreen.tsx
2026-03-03 01:04:38 +05:30
saimuelbr
c279d43404 fix: Adding pt-BR code option to TMDBSettingsScreen.tsx 2026-03-02 16:21:56 -03:00
Nayif
b699f87b99
Merge pull request #581 from chrisk325/patch-10
completely revert all changes for sort order
2026-03-03 00:32:44 +05:30
chrisk325
87931064fa
completely revert all changes for sort order 2026-03-02 23:56:50 +05:30
Nayif
d85a0f1899
Merge pull request #580 from chrisk325/revert-576-patch-9 2026-03-02 23:42:45 +05:30
chrisk325
14e5395b34
syntax 2026-03-02 23:35:43 +05:30
chrisk325
d6b4e788a8
prefer trakt's timestamp over local 2026-03-02 23:30:05 +05:30
chrisk325
b0425b2da7
Revert "fix continue watching sort order while merging episodes" 2026-03-02 23:22:52 +05:30
tapframe
0899aa8a49 prrimary profile id will be used for mobile sync 2026-03-02 23:05:11 +05:30
Nayif
b996396f17
Merge pull request #576 from chrisk325/patch-9
fix continue watching sort order while merging episodes
2026-03-02 19:05:48 +05:30
skoruppa
5bbc2abe8b fix for Kitsu and Mal content being still incorrectly requested 2026-03-02 09:17:58 +01:00
chrisk325
fd8a8dfb4a
swap timestamp priority from local to trakt first 2026-03-02 12:29:05 +05:30
chrisk325
15ee553f86
fix continue watching sort order while merging episodes 2026-03-02 12:20:50 +05:30
Nayif
84f8fc94fc
Merge pull request #573 from chrisk325/patch-8
added trailer server as a fallback for edge cases
2026-03-01 21:42:58 +05:30
chrisk325
7ca8db1071
added trailer server as a fallback for edge cases 2026-03-01 21:36:25 +05:30
Nayif
ea4bd8680b
Merge pull request #570 from chrisk325/local-trailer
feat: on device local trailers for hero section on metadata screen
2026-03-01 21:32:17 +05:30
Nayif
8ee0f2ca1b
Merge pull request #572 from chrisk325/patch-7
fix continue watching sort order yet again (edge cases)
2026-03-01 21:08:59 +05:30
chrisk325
9037a09421
fix continue watching sort order yet again (edge cases) 2026-03-01 19:53:14 +05:30
chrisk325
5391ebda85
add wview fallback as well 2026-03-01 18:24:18 +05:30
chrisk325
2eea341578
fix for keys 2026-03-01 18:23:28 +05:30
chrisk325
9a4face265
fix key 2026-03-01 18:22:00 +05:30
chrisk325
9f6a28dbe7
fix hardcoded tmdb key 2026-03-01 18:20:41 +05:30
chrisk325
3bf8177c58
fix 2026-03-01 17:09:21 +05:30
Nayif
5d8f9efa34
Merge pull request #569 from chrisk325/patch-6 2026-03-01 16:27:21 +05:30
chrisk325
7d0f6c3892
fix trailer cache logic 2026-03-01 16:13:08 +05:30
chrisk325
b9a91d03df
fix for low quality trailers 2026-03-01 16:12:13 +05:30
chrisk325
cadcda27df
fix 2026-03-01 15:22:14 +05:30
chrisk325
8cd1ec8188
fix 2026-03-01 15:21:37 +05:30
chrisk325
005e4b7ea9
fix 2026-03-01 15:20:09 +05:30
chrisk325
ca8c503a47
fix for low quality trailers 2026-03-01 15:12:26 +05:30
chrisk325
e475feae84
fix for low quality trailers 2026-03-01 15:10:59 +05:30
chrisk325
f653aa9aa7
fix for low quality trailers 2026-03-01 15:09:49 +05:30
chrisk325
c764faf2a7
fix race conditions 2026-03-01 15:06:50 +05:30
chrisk325
5b6554ff37
fix trailers in homescreen hero 2026-03-01 15:05:10 +05:30
chrisk325
47a484fe3d
local trailers 2026-03-01 13:24:33 +05:30
chrisk325
9134c3eb95
local trailers for herosection 2026-03-01 13:23:31 +05:30
chrisk325
9a4af754f0
local extractor 2026-03-01 13:21:02 +05:30
chrisk325
9d5bbaf3b1
added local extractor 2026-03-01 13:19:31 +05:30
chrisk325
d732fa2016
fix edge cases where items sync back to trakt with "now" timestamp 2026-03-01 00:53:06 +05:30
Thái Hoàng Tâm
91d81d53c1
fix: Sync Setting Screen use SafeAreaView from 'react-native-safe-area-context' instead of the deprecated one from 'react-native'
The bug is described at Discord https://discord.com/channels/1379902184207941732/1477029029449306358
2026-02-28 19:40:36 +01:00
Nayif
cc528cb188
Merge pull request #564 from Joe00011/main
Add Japanese (ja) translation
2026-02-28 23:53:27 +05:30
Nayif
dc23330ce0
Merge pull request #554 from chrisk325/patch-5
reduce trakt api calls and fix sort order for trakt continue watching
2026-02-28 23:52:39 +05:30
Nayif
dda4df16d2
Merge pull request #558 from hoangtamthai/patch-1
Update legal information link in README
2026-02-28 23:52:19 +05:30
Nayif
dcb5e2d177
Merge pull request #563 from dusaan-m/main
fix(auth): disable auto-capitalize on password input
2026-02-28 23:52:02 +05:30
Joe00011
2888ceb710
Add Japanese (ja) to resources 2026-03-01 02:47:04 +09:00
Joe00011
3e83be2bf0
Add Japanese (ja) translation 2026-03-01 02:41:24 +09:00
Dušan Milivojević
6b566cf69d fix(auth): disable auto-capitalize on password input 2026-02-28 16:26:05 +01:00
Thái Hoàng Tâm
db7cd130b8
Update legal information link in README 2026-02-28 11:44:34 +01:00
chrisk325
6bc287d2b3
remove watched epis from this week section 2026-02-28 14:13:21 +05:30
Nayif
4f2eea4158
Merge pull request #550 from chrisk325/patch-4
qol: only disable/dim the audio track button when 0 tracks are available
2026-02-28 08:05:53 +05:30
chrisk325
b152619c03
reduce trakt api calls and fix sort order for trakt continue watching 2026-02-28 06:11:01 +05:30
chrisk325
34ee842ec1
qol: only disable/dim the audio track button when 0 tracks are available 2026-02-28 05:48:00 +05:30
tapframe
a1f15c5b10 update ipa and sources.json 2026-02-28 05:30:13 +05:30
tapframe
e91cc93289 update version 2026-02-28 00:46:36 +05:30
Nayif
18f49f0853
Merge pull request #540 from chrisk325/subtitle-info
Feat: add audio track info and subtitle track info to exoplayer
2026-02-27 22:10:01 +05:30
Nayif
d7c3b3612e
Merge pull request #541 from chrisk325/patch-3
improve app launch: reduce ota check at launch
2026-02-27 22:09:49 +05:30
chrisk325
18b6a51a9e
fix 2026-02-27 19:08:09 +05:30
chrisk325
d5b3487298
fix 2026-02-27 19:07:05 +05:30
chrisk325
231a32de2f
fix 2026-02-27 19:06:29 +05:30
chrisk325
62994d5825
fix 2026-02-27 19:03:29 +05:30
chrisk325
a75de21584
fix 2026-02-27 19:02:30 +05:30
chrisk325
b3d4953da2
add estimated bitrate for known formats 2026-02-27 18:59:00 +05:30
chrisk325
c63af981ab
fix 2026-02-27 18:55:51 +05:30
chrisk325
fbe0d9fc39
fix 2026-02-27 18:55:08 +05:30
chrisk325
d2b4d0d745
dix 2026-02-27 18:53:06 +05:30
chrisk325
9b65bc95a0
fix 2026-02-27 18:50:52 +05:30
chrisk325
4203ad18be
fix for bitrate 2026-02-27 18:49:51 +05:30
chrisk325
39ddd236e6
fix for ac3 edge cases 2026-02-27 18:42:10 +05:30
chrisk325
86c528c199
fix for dts track info 2026-02-27 18:33:20 +05:30
chrisk325
ed0b273f47
improve app launch: reduce ota check at launch 2026-02-27 17:29:53 +05:30
chrisk325
da6ad87370
fix 2026-02-27 16:44:08 +05:30
chrisk325
8232a1406f
fix for when player does not send lang info 2026-02-27 16:41:36 +05:30
chrisk325
de1bf7f746
fix for when player does not return lang 2026-02-27 16:39:13 +05:30
chrisk325
34d8988915
fix duplicate 2026-02-27 15:37:54 +05:30
chrisk325
24c9090ff1
fix for edge cases with 6.1 ch track 2026-02-27 15:00:06 +05:30
chrisk325
dfb63e9965
fix for edge cases with 6.1 ch track 2026-02-27 14:58:48 +05:30
chrisk325
fe49d12df3
remove hardcoded track info 2026-02-27 14:57:34 +05:30
chrisk325
234ff23d1f
add logs to debug mimetypes 2026-02-27 13:43:07 +05:30
chrisk325
7882f66a67
update to parse the track info 2026-02-26 21:17:15 +05:30
chrisk325
f84d88bf4d
pass the audio track and subtitle track jnfo 2026-02-26 21:15:37 +05:30
chrisk325
2730a27702
fix 2026-02-26 14:00:38 +05:30
chrisk325
f606ef0431
crash fix 2026-02-26 13:57:55 +05:30
chrisk325
b4dc7cdd88
add audio channel count extractor 2026-02-26 12:53:38 +05:30
chrisk325
74bcc041af
add codec, channel count info to track selector 2026-02-26 12:50:05 +05:30
Nayif
5f53c683c7
Merge pull request #531 from chrisk325/patch-2
fix kitsuid duplication that was preventing streams to be fetched via…
2026-02-26 05:23:24 +05:30
chrisk325
8fa4a013d1
fix kitsuid duplication that was preventing streams to be fetched via kitsu ids 2026-02-26 05:17:21 +05:30
Nayif
25f5d4f9ef
Merge pull request #521 from albyalex96/main
Updated Italian Localization
2026-02-25 23:29:51 +05:30
Nayif
b0263b5cc2
Merge pull request #522 from saimuelbr/main 2026-02-25 17:53:36 +05:30
saimuelbr
5deb859810 minor i18n fix 2026-02-24 20:18:44 -03:00
albyalex96
ac34d0228a
Updated Italian Localization 2026-02-24 23:41:39 +01:00
tapframe
6cc9bb78e9 Merge branch 'addonConfig' 2026-02-25 00:43:01 +05:30
tapframe
ba909a4aec Remove hardcoded addon config URL guesses 2026-02-25 00:42:55 +05:30
tapframe
f1dc4bb555 Merge branch 'milicevicivan/main'
# Conflicts:
#	src/i18n/locales/bg.json
#	src/i18n/locales/cs.json
#	src/i18n/locales/fil.json
#	src/i18n/locales/he.json
#	src/i18n/locales/it.json
#	src/i18n/locales/mk.json
#	src/i18n/locales/nl-NL.json
#	src/i18n/locales/pl.json
#	src/i18n/locales/ro.json
#	src/i18n/locales/ru.json
#	src/i18n/locales/sl.json
#	src/i18n/locales/sq.json
#	src/i18n/locales/sr.json
#	src/i18n/locales/tr.json
#	src/i18n/locales/zh-CN.json
2026-02-25 00:38:25 +05:30
tapframe
59105e394d Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-02-25 00:31:52 +05:30
tapframe
e6faa7c59f Merge branch 'main' into saimuelbr/main 2026-02-25 00:31:17 +05:30
Nayif
4bdc2f5474
Merge pull request #514 from chrisk325/patch-1
fix imdb logo: switch to fastimage for imdb logo when mdblist is enabled
2026-02-25 00:16:24 +05:30
craitose
0b82682dd9 addon configure url fix 2026-02-24 10:10:55 +00:00
chrisk325
ec7103eb28
switch to fastimage for imdb logo 2026-02-24 12:42:13 +05:30
milicevicivan
14bbbb0ae9
Update sl.json 2026-02-22 21:32:05 +01:00
milicevicivan
01cf2f2c5b
Update zh-CN.json 2026-02-22 21:31:26 +01:00
milicevicivan
61ba3c64a0
Update tr.json 2026-02-22 21:30:34 +01:00
milicevicivan
ec51019632
Update sr.json 2026-02-22 21:29:35 +01:00
milicevicivan
4bd5c230e4
Update sq.json 2026-02-22 21:27:12 +01:00
milicevicivan
687387fb0b
Update sl.json 2026-02-22 21:26:05 +01:00
milicevicivan
b0dc9f9fa0
Update ru.json 2026-02-22 21:24:51 +01:00
milicevicivan
9debb0a7c7
Update ro.json 2026-02-22 21:23:37 +01:00
milicevicivan
2c0e3331f6
Update pt-PT.json 2026-02-22 21:12:51 +01:00
milicevicivan
3b40d61cf3
Update pt-BR.json 2026-02-22 21:11:06 +01:00
milicevicivan
fb3fef505f
Update pl.json 2026-02-22 21:09:57 +01:00
milicevicivan
0b44c170f8
Update nl-NL.json 2026-02-22 21:08:35 +01:00
milicevicivan
ab7e4e17ca
Update mk.json 2026-02-22 21:07:04 +01:00
milicevicivan
d1eb7d0c85
Update it.json 2026-02-22 20:58:37 +01:00
milicevicivan
66a51ea9cd
Update hi.json 2026-02-22 20:52:19 +01:00
milicevicivan
37c8e59d2c
Update he.json 2026-02-22 20:50:47 +01:00
milicevicivan
a8a79bbe3a
Update fr.json 2026-02-22 20:50:07 +01:00
milicevicivan
e56685b744
Update fil.json 2026-02-22 20:49:24 +01:00
milicevicivan
9a5eb5aaf7
Update es.json 2026-02-22 20:48:07 +01:00
milicevicivan
8bfed55f31
Update de.json 2026-02-22 20:47:15 +01:00
milicevicivan
a683147c80
Update cs.json 2026-02-22 20:46:24 +01:00
milicevicivan
4d578a8cbc
Update bg.json 2026-02-22 20:45:01 +01:00
milicevicivan
c88f2d05ed
Update ar.json 2026-02-22 20:44:15 +01:00
milicevicivan
31904fc3ae
Merge branch 'tapframe:main' into main 2026-02-22 20:40:49 +01:00
tapframe
32e93ea25d feat: Implement profilespecific watch progress syncing with upsert logic and trigger progress saving on pause and seek completion. 2026-02-23 00:16:38 +05:30
tapframe
81d528e0f6 update sync logic 2026-02-22 17:58:47 +05:30
saimuelbr
1e982e2bfe Adding i18n in Nuvio Sync Screen 2026-02-22 00:14:56 -03:00
milicevicivan
b93d4ac3bc
Merge branch 'tapframe:main' into main 2026-02-21 22:05:09 +01:00
tapframe
37ad5647f8 ref: Simkl authentication to use PKCE and update exchangeCodeForToken method 2026-02-21 18:05:12 +05:30
Nayif
5a8fa30787
Merge pull request #495 from sssserrano/feat/add-catalan
Add Catalan language
2026-02-21 14:57:04 +05:30
Nayif
65947fabaa
Merge pull request #496 from johnneerdael/main
Fix OpenRouter AI chat failures by defaulting to openrouter/free + custom model override
2026-02-21 14:55:25 +05:30
John Neerdael
a7fcf6779c Fix OpenRouter model routing and add configurable model setting 2026-02-20 23:15:41 +01:00
sandra
55afd3fd56 Add Catalan language 2026-02-20 17:56:16 +01:00
tapframe
a05a16f67b implement bounded concurrency for catalog loading and add loading screen timeout 2026-02-20 21:59:25 +05:30
tapframe
29e5dee001 improve episode progress removal logic and normalize episode IDs 2026-02-20 21:51:36 +05:30
tapframe
24794a67e9 minor db deletion logic fix 2026-02-20 21:30:24 +05:30
milicevicivan
6c6f90de51
Merge branch 'tapframe:main' into main 2026-02-19 21:47:25 +01:00
tapframe
9b330b8226 add forgot password link to AuthScreen and enhance URL normalization in SupabaseSyncService 2026-02-19 06:23:08 +05:30
Nayif
9cab1f4f1e
Merge pull request #485 from skoruppa/main
Prioritize external meta addons & fix episode ID parsing
2026-02-19 01:17:24 +05:30
skoruppa
bf5f7c60de prioritize external meta addons & fix episode ID parsing
same as for NuvioTV

also

fix: correct episode ID parsing for non-season formats (mal🆔episode)
2026-02-18 12:23:19 +01:00
milicevicivan
2a11926cdf
Added Trakt favicon 2026-02-18 00:30:19 +01:00
milicevicivan
ee9eb628fd
Delete assets/trakt-favicon.png 2026-02-18 00:29:57 +01:00
milicevicivan
5a372c3e82
Delete assets/trakt-logo.png 2026-02-18 00:29:43 +01:00
milicevicivan
e99d1180c2
Add files via upload 2026-02-18 00:28:12 +01:00
milicevicivan
d7598df136
Delete assets/trakt-logo.png 2026-02-18 00:27:23 +01:00
milicevicivan
f85ac52ae5
Better simkl favicon (Letter S) 2026-02-18 00:11:09 +01:00
milicevicivan
046a69d8c8
Delete assets/simkl-favicon.png 2026-02-18 00:09:43 +01:00
milicevicivan
772ff5319c
New Simkl favicon 2026-02-18 00:00:34 +01:00
milicevicivan
8617418fc8
Delete assets/simkl-favicon.png 2026-02-17 23:59:55 +01:00
milicevicivan
71ecb3f6da
Higher quality Simkl favicon 2026-02-17 23:51:24 +01:00
milicevicivan
cf59b54f6a
Delete assets/simkl-favicon.png 2026-02-17 23:50:56 +01:00
milicevicivan
e359187428
Higher quality Simkl logo 2026-02-17 23:48:37 +01:00
milicevicivan
50e11cc90e
Delete assets/simkl-logo.png 2026-02-17 23:48:00 +01:00
milicevicivan
f3fbc70167
Svg-png
Back to png, but more quality picture.
Calling svg might not work and licensing problems solved.
2026-02-17 23:12:39 +01:00
milicevicivan
f62e0252aa
Delete src/assets/tmdb_logo.svg 2026-02-17 23:03:35 +01:00
Nayif
3b40812187
update readme 2026-02-18 01:26:54 +05:30
tapframe
290089770f update version 2026-02-18 01:17:20 +05:30
milicevicivan
691547dd50
Updated tmdb logo to higher quality (png-svg) 2026-02-17 19:59:45 +01:00
milicevicivan
45233abc35
Delete src/assets/tmdb_logo.png 2026-02-17 19:58:42 +01:00
milicevicivan
c6968d1094
Merge branch 'tapframe:main' into main 2026-02-17 19:54:00 +01:00
milicevicivan
e27f80e5e0
Update es.json 2026-02-17 17:22:25 +01:00
milicevicivan
693ed68efe
Merge pull request #2 from IberianSoldierPC/main
es.json improved
2026-02-17 17:21:21 +01:00
IberianSoldierPC
8b8498ad60
es.json improved 2026-02-17 12:24:30 +01:00
tapframe
8603b1ea86 fix localization files 2026-02-17 14:57:02 +05:30
milicevicivan
1455488e94
Update tr.json 2026-02-16 23:16:45 +01:00
tapframe
7eadee8fd8 Merge branch 'milicevicivan/main'
# Conflicts:
#	src/i18n/locales/it.json
#	src/i18n/locales/sr.json
2026-02-17 03:41:56 +05:30
milicevicivan
82546afb25
Update pl.json 2026-02-16 23:09:50 +01:00
tapframe
544670d998 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-02-17 03:39:19 +05:30
tapframe
a57b2bdbdd Remove linked devices information from SyncSettingsScreen 2026-02-17 03:38:42 +05:30
tapframe
46fe7f7cdf Add Nuvio Sync feature and update branding assets 2026-02-17 03:31:29 +05:30
milicevicivan
f8266d1403
Update pl.json 2026-02-16 23:00:22 +01:00
milicevicivan
53020c5ba7
Merge pull request #1 from wrs92/patch-2
Update pl.json
2026-02-16 22:58:04 +01:00
milicevicivan
85013928b2
Merge branch 'main' into patch-2 2026-02-16 22:57:49 +01:00
tapframe
575382a629 icon update 2026-02-17 03:04:05 +05:30
tapframe
36d93c270a authentication error handling 2026-02-17 02:23:53 +05:30
tapframe
b5ae55da9e Refactor AuthScreen and SyncSettingsScreen; remove warning details and sync code generation
- Removed warning details and associated animations from AuthScreen.
- Simplified AuthScreen layout by eliminating unused state and styles.
- Updated SyncSettingsScreen to fetch remote sync stats and display them.
- Introduced new actions for pulling from cloud and uploading local data.
- Removed legacy code related to sync code generation and claiming.
- Enhanced UI with new section headers and improved layout for better user experience.
- Added reconciliation logic for remote watched items in watchedService.
- Implemented addon order reconciliation based on remote manifest URLs in stremioService.
2026-02-17 01:33:36 +05:30
milicevicivan
705a257965
Update tr.json 2026-02-16 20:11:44 +01:00
milicevicivan
088bcaf651
Update sr.json 2026-02-16 20:07:29 +01:00
milicevicivan
2f9f41c2b1
Update sq.json 2026-02-16 20:06:52 +01:00
milicevicivan
f1643db448
Update sl.json 2026-02-16 20:06:23 +01:00
milicevicivan
8311156091
Update ru.json 2026-02-16 20:05:39 +01:00
milicevicivan
263de3af98
Update ro.json 2026-02-16 20:05:09 +01:00
milicevicivan
c185c11275
Update pl.json 2026-02-16 17:32:04 +01:00
milicevicivan
f7b24cf393
Update nl-NL.json 2026-02-16 17:31:12 +01:00
milicevicivan
f868fa915f
Update mk.json 2026-02-16 17:30:37 +01:00
tapframe
e27b6de202 acc sync init 2026-02-16 21:39:41 +05:30
wrs92
89e307e5f7
Update pl.json 2026-02-16 15:15:29 +01:00
milicevicivan
7e023607c3
Update fil.json 2026-02-16 14:03:12 +01:00
milicevicivan
eeafa1065f
Update cs.json 2026-02-16 14:02:15 +01:00
milicevicivan
eefd50e9d5
Update bg.json 2026-02-16 10:25:01 +01:00
milicevicivan
81ff3dff10
Update he.json 2026-02-16 09:44:02 +01:00
Nayif
57fa5e1d9c
Merge pull request #472 from meilluer/main 2026-02-14 15:37:38 +05:30
milicevicivan
e0391bc79c
Update PlaybackSettingsScreen.tsx 2026-02-12 23:36:03 +01:00
milicevicivan
fdd0461234
Update TMDBSettingsScreen.tsx 2026-02-12 23:32:15 +01:00
milicevicivan
f7ebe5e9b6
Update zh-CN.json 2026-02-12 21:56:30 +01:00
milicevicivan
8ab5e8bc70
Update tr.json 2026-02-12 21:55:21 +01:00
milicevicivan
9ff8217f53
Update sr.json 2026-02-12 21:53:41 +01:00
milicevicivan
e6afbc9e4b
Update sl.json 2026-02-12 21:51:09 +01:00
milicevicivan
79f8d42e44
Update ru.json 2026-02-12 21:50:23 +01:00
milicevicivan
3f5336a71a
Update ro.json 2026-02-12 21:49:24 +01:00
milicevicivan
f10ac01cfc
Update pt-PT.json 2026-02-12 21:47:53 +01:00
milicevicivan
2922e1f137
Update pt-BR.json 2026-02-12 21:47:13 +01:00
milicevicivan
251b144409
Update pl.json 2026-02-12 21:46:22 +01:00
milicevicivan
f28290b23d
Update nl-NL.json 2026-02-12 21:45:00 +01:00
milicevicivan
d4b82c4291
Update mk.json 2026-02-12 21:43:09 +01:00
milicevicivan
f44f7327f6
Update it.json 2026-02-12 21:41:17 +01:00
milicevicivan
d0b577648b
Update hi.json 2026-02-12 21:40:37 +01:00
milicevicivan
c34e5a5c17
Update he.json 2026-02-12 21:39:00 +01:00
milicevicivan
f6208c0a02
Update fr.json 2026-02-12 21:37:43 +01:00
milicevicivan
c6f52a2937
Update fil.json 2026-02-12 21:36:56 +01:00
milicevicivan
8f0393bc2a
Update es.json 2026-02-12 21:35:50 +01:00
milicevicivan
3c142a1349
Update en.json 2026-02-12 21:34:54 +01:00
milicevicivan
831a528131
Update de.json 2026-02-12 21:33:49 +01:00
milicevicivan
dd2fb6996e
Update cs.json 2026-02-12 21:32:53 +01:00
milicevicivan
5bfe3815e4
Update bg.json 2026-02-12 21:32:08 +01:00
milicevicivan
c8f5606a03
Update ar.json 2026-02-12 21:30:58 +01:00
milicevicivan
af55172cb2
Update locales.ts 2026-02-12 21:29:58 +01:00
milicevicivan
69eb15942f
Update resources.ts 2026-02-12 21:29:02 +01:00
milicevicivan
65b7403abc
Added Albanian lang 2026-02-12 21:27:56 +01:00
milicevicivan
ad1d404310
Update zh-CN.json 2026-02-12 21:14:46 +01:00
milicevicivan
720610186c
Update tr.json 2026-02-12 21:13:46 +01:00
milicevicivan
48400248c7
Update sr.json 2026-02-12 21:12:45 +01:00
milicevicivan
6d8a857931
Update sl.json 2026-02-12 21:11:29 +01:00
milicevicivan
e366f77dd1
Update ru.json 2026-02-12 21:09:42 +01:00
milicevicivan
d17140e6f8
Update pt-PT.json 2026-02-12 21:08:09 +01:00
milicevicivan
a24b491477
Update pt-BR.json 2026-02-12 21:07:42 +01:00
milicevicivan
e95d39526e
Update pl.json 2026-02-12 21:06:58 +01:00
milicevicivan
483b838746
Update nl-NL.json 2026-02-12 21:06:08 +01:00
milicevicivan
93daa44c0d
Update mk.json 2026-02-12 21:05:03 +01:00
milicevicivan
6dd1f62cd9
Update it.json 2026-02-12 21:03:57 +01:00
milicevicivan
760ac969fc
Update hi.json 2026-02-12 21:03:02 +01:00
milicevicivan
bd10151702
Update he.json 2026-02-12 21:01:54 +01:00
milicevicivan
1f2bef724f
Update fr.json 2026-02-12 21:00:24 +01:00
milicevicivan
4b700c8efd
Update fil.json 2026-02-12 20:59:35 +01:00
milicevicivan
948cccca5e
Update es.json 2026-02-12 20:58:40 +01:00
milicevicivan
ad4aefcdf8
Update en.json 2026-02-12 20:57:49 +01:00
milicevicivan
b13f107aa2
Update de.json 2026-02-12 20:57:02 +01:00
milicevicivan
2eb5c607b4
Update cs.json 2026-02-12 20:56:16 +01:00
milicevicivan
db1d34bb37
Update bg.json 2026-02-12 20:54:12 +01:00
milicevicivan
19f4387923
Update ar.json 2026-02-12 20:53:02 +01:00
milicevicivan
5b4800b856
Update locales.ts 2026-02-12 20:51:46 +01:00
milicevicivan
7a7cf9847c
Update resources.ts 2026-02-12 20:51:01 +01:00
milicevicivan
40de18fa7b
Added Romanian lang 2026-02-12 20:49:51 +01:00
tapframe
8a4aa64074 update player icon 2026-02-12 13:02:19 +05:30
Nayif
d3ed746975
Merge pull request #465 from paregi12/Introdb
feat: update IntroDB integration to support recap and outro segments
2026-02-12 11:52:49 +05:30
tapframe
a0dde2814b Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-02-12 11:51:22 +05:30
tapframe
9ea8007bfc update lang strings 2026-02-12 11:51:15 +05:30
meilluer
5874a78ce0 "hero" section pauses when not in view 2026-02-11 15:52:09 +05:30
Nayif
b6a2c9850d
Merge pull request #470 from tapframe/revert-466-Upscale
Revert "Upscale"
2026-02-10 15:49:33 +05:30
Nayif
1a3b9e367b
Revert "Upscale" 2026-02-10 15:49:01 +05:30
tapframe
682c429f1a Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-02-10 14:41:13 +05:30
paregi12
f90bbea1bb fix(player): prevent Up Next fallback from triggering early when outro exists 2026-02-09 22:07:58 +05:30
Nayif
9faf4d6337
Merge pull request #466 from paregi12/Upscale
Upscale
2026-02-09 21:33:41 +05:30
paregi12
3a8ec97a7b fix(player): dedupe skip-segment fetches and harden segment hook 2026-02-09 19:34:19 +05:30
paregi12
275a75b61d feat(player): implement smart Up Next trigger based on IntroDB outro segments 2026-02-09 12:42:13 +05:30
milicevicivan
bfad186efb
Update zh-CN.json 2026-02-08 21:02:19 +01:00
milicevicivan
af4d6a6c16
Update tr.json 2026-02-08 21:00:56 +01:00
milicevicivan
63e8c5e5af
Update sr.json 2026-02-08 20:59:57 +01:00
milicevicivan
d7d8e54831
Update sl.json 2026-02-08 20:54:45 +01:00
milicevicivan
3f89370578
Update ru.json 2026-02-08 20:53:48 +01:00
milicevicivan
d59727b260
Update pt-PT.json 2026-02-08 20:52:48 +01:00
milicevicivan
2f6d271218
Update pt-BR.json 2026-02-08 20:51:39 +01:00
milicevicivan
322a8a2f5f
Update pl.json 2026-02-08 20:49:28 +01:00
milicevicivan
9a15ef94cf
Update nl-NL.json 2026-02-08 20:47:46 +01:00
milicevicivan
358459b9dd
Update mk.json 2026-02-08 20:45:16 +01:00
milicevicivan
407282e0c9
Update it.json 2026-02-08 20:43:20 +01:00
milicevicivan
625855c0e9
Update hi.json 2026-02-08 20:40:40 +01:00
milicevicivan
1defc4357a
Update he.json 2026-02-08 20:37:49 +01:00
milicevicivan
c94626bd6c
Update fr.json 2026-02-08 20:35:36 +01:00
milicevicivan
b467a315e0
Update fil.json 2026-02-08 20:32:24 +01:00
milicevicivan
295622ad3d
Update es.json 2026-02-08 20:29:28 +01:00
milicevicivan
2332e5e4a2
Update en.json 2026-02-08 20:22:09 +01:00
milicevicivan
364e5aa09d
Update de.json 2026-02-08 20:21:08 +01:00
milicevicivan
7744549dc0
Update cs.json 2026-02-08 20:19:57 +01:00
milicevicivan
b4297a8848
Update bg.json 2026-02-08 20:18:24 +01:00
milicevicivan
720137c1ef
Update ar.json 2026-02-08 20:16:21 +01:00
milicevicivan
383540f64d
Update locales.ts 2026-02-08 20:11:04 +01:00
milicevicivan
651a14af60
Update locales.ts 2026-02-08 20:06:28 +01:00
milicevicivan
1b9e20c97c
Update ar.json 2026-02-08 20:04:52 +01:00
milicevicivan
8fbb47852d
Update locales.ts 2026-02-08 20:00:50 +01:00
milicevicivan
4f93d08ea8
Added Dutch (Netherlands) lang 2026-02-08 19:56:57 +01:00
milicevicivan
bff4374f1a
Update resources.ts 2026-02-08 19:55:15 +01:00
paregi12
c0447acdf2 fix(player): enforce shader toggle and harden shader asset checks 2026-02-08 16:12:30 +05:30
milicevicivan
9fa2f0b2b4
Update TMDBSettingsScreen.tsx
Mistake fixed
2026-02-07 22:33:19 +01:00
milicevicivan
da07db4098
Update PlaybackSettingsScreen.tsx 2026-02-07 18:22:43 +01:00
paregi12
b857256916 feat: update IntroDB integration to support recap and outro segments 2026-02-07 19:23:26 +05:30
paregi12
c225528cd3 fix: resolve syntax error 2026-02-07 15:54:56 +05:30
paregi12
cb1bc64daa fix: resolve shader persistence loop, icons, and preset memory; add FSR/SSim shaders and clean UI 2026-02-07 15:26:16 +05:30
paregi12
f6b13c27c9 feat: conditionally show upscaler button based on user setting 2026-02-07 15:26:16 +05:30
paregi12
2394f5d158 fix: implement native upscaler bridge, equalizer methods, and restore centered player UI 2026-02-07 08:32:27 +05:30
paregi12
9f6d456bf3 fix: add missing jszip dependency and native bridge methods for upscaler 2026-02-07 08:26:51 +05:30
paregi12
3fe5da1434 upscaler 2026-02-07 08:26:51 +05:30
paregi12
25e77490c3 Refactor player UI: Move episodes/streams to right, other controls to left, and timestamp above timeline. Also fix PostHogProvider type error. 2026-02-07 08:26:51 +05:30
milicevicivan
e978c14da6
Update TMDBSettingsScreen.tsx 2026-02-06 23:19:44 +01:00
milicevicivan
cea31cb5af
Update zh-CN.json 2026-02-06 23:09:27 +01:00
milicevicivan
af4a345fe5
Update tr.json 2026-02-06 23:07:43 +01:00
milicevicivan
63ea389fd7
Update sr.json 2026-02-06 23:06:59 +01:00
milicevicivan
14a73ecab3
Update sl.json 2026-02-06 23:06:02 +01:00
milicevicivan
8530e9fc29
Update ru.json 2026-02-06 23:05:08 +01:00
milicevicivan
7e14caca92
Update pt-PT.json 2026-02-06 23:03:38 +01:00
milicevicivan
c28099eccf
Update pt-BR.json 2026-02-06 23:03:00 +01:00
milicevicivan
40bf847c58
Update pl.json 2026-02-06 23:02:07 +01:00
milicevicivan
149c523a68
Update mk.json 2026-02-06 23:01:00 +01:00
milicevicivan
fed0c47b6d
Update it.json 2026-02-06 23:00:04 +01:00
milicevicivan
1dd9345bd0
Update hi.json 2026-02-06 22:59:00 +01:00
milicevicivan
489d63e4de
Update he.json 2026-02-06 22:57:40 +01:00
milicevicivan
20c24abac0
Update fr.json 2026-02-06 22:55:48 +01:00
milicevicivan
140e4e05ad
Update es.json 2026-02-06 22:54:28 +01:00
milicevicivan
e8b237714c
Update en.json 2026-02-06 22:52:57 +01:00
milicevicivan
a34fa5f73e
Update de.json 2026-02-06 22:52:30 +01:00
milicevicivan
4222a44df2
Update cs.json 2026-02-06 22:51:35 +01:00
milicevicivan
1132fc3e1e
Update bg.json 2026-02-06 22:49:44 +01:00
milicevicivan
e1f813fc8f
Update ar.json 2026-02-06 22:48:41 +01:00
milicevicivan
6de94e813a
Update locales.ts 2026-02-06 22:46:54 +01:00
milicevicivan
67169771ec
Update resources.ts 2026-02-06 22:45:15 +01:00
milicevicivan
b8f661a47c
Added Filipino lang 2026-02-06 22:43:48 +01:00
milicevicivan
5aa90afde1
Update TMDBSettingsScreen.tsx
Mistake fixed
2026-02-06 21:22:44 +01:00
milicevicivan
cc9e35596c
Update TMDBSettingsScreen.tsx
Added new languages
2026-02-06 21:05:43 +01:00
milicevicivan
fb2bde5304
Update zh-CN.json 2026-02-06 15:48:03 +01:00
milicevicivan
f56eab6a23
Update tr.json 2026-02-06 15:46:48 +01:00
milicevicivan
14d4e52c8c
Update sr.json 2026-02-06 15:45:52 +01:00
milicevicivan
5464aa57e3
Update sl.json 2026-02-06 15:43:55 +01:00
milicevicivan
58a263dc96
Update pt-PT.json 2026-02-06 15:42:42 +01:00
milicevicivan
c90b84836a
Update pt-BR.json 2026-02-06 15:42:02 +01:00
milicevicivan
fb4f1f84cc
Update pl.json 2026-02-06 15:41:13 +01:00
milicevicivan
748b002a47
Update mk.json 2026-02-06 15:39:59 +01:00
milicevicivan
4111aa4b39
Update it.json 2026-02-06 15:38:17 +01:00
milicevicivan
2f26d54f76
Update hi.json 2026-02-06 15:37:31 +01:00
milicevicivan
a51e426779
Update he.json 2026-02-06 15:36:25 +01:00
milicevicivan
5c3f38588e
Update fr.json 2026-02-06 15:35:18 +01:00
milicevicivan
d7b0e4f9ae
Update es.json 2026-02-06 15:34:30 +01:00
milicevicivan
ba30666e16
Update en.json 2026-02-06 15:33:35 +01:00
milicevicivan
69fef74d61
Update de.json 2026-02-06 15:32:51 +01:00
milicevicivan
79d820bc8d
Update cs.json 2026-02-06 15:31:57 +01:00
milicevicivan
6dff3833c4
Update bg.json 2026-02-06 15:30:04 +01:00
milicevicivan
c3667e71a4
Update ar.json 2026-02-06 15:27:50 +01:00
milicevicivan
759a8cd557
Update locales.ts 2026-02-06 15:26:18 +01:00
milicevicivan
d2e628f174
Update resources.ts 2026-02-06 15:25:10 +01:00
milicevicivan
b3c25915c6
Added Russian lang 2026-02-06 15:23:21 +01:00
Nayif
dbb5337204
update readme 2026-02-06 16:21:27 +05:30
milicevicivan
4c4c58ad3e
Update zh-CN.json 2026-02-06 00:40:38 +01:00
milicevicivan
1131ad61fd
Update tr.json 2026-02-06 00:39:46 +01:00
milicevicivan
aa9f009f9c
Update sr.json 2026-02-06 00:38:46 +01:00
milicevicivan
9c0f462081
Update sl.json 2026-02-06 00:36:48 +01:00
milicevicivan
a621ba9380
Update pt-PT.json 2026-02-06 00:35:43 +01:00
milicevicivan
3ebf18873d
Update pt-BR.json 2026-02-06 00:35:02 +01:00
milicevicivan
3c368a63db
Update pl.json 2026-02-06 00:34:18 +01:00
milicevicivan
3a2999003d
Update it.json 2026-02-06 00:33:18 +01:00
milicevicivan
b871cd0954
Update hi.json 2026-02-06 00:32:07 +01:00
milicevicivan
6991c233a1
Update he.json 2026-02-06 00:31:12 +01:00
milicevicivan
681f5580a9
Update fr.json 2026-02-06 00:29:40 +01:00
milicevicivan
f6b637bc3e
Update es.json 2026-02-06 00:28:42 +01:00
milicevicivan
144acbcf0c
Update en.json 2026-02-06 00:26:59 +01:00
milicevicivan
7415d1bf15
Update de.json 2026-02-06 00:26:17 +01:00
milicevicivan
d1514b9a44
Update cs.json 2026-02-06 00:25:31 +01:00
milicevicivan
8c4ae9ab63
Update bg.json 2026-02-06 00:24:36 +01:00
milicevicivan
6607d5d514
Update ar.json 2026-02-06 00:21:53 +01:00
milicevicivan
c013a8b057
Update locales.ts 2026-02-06 00:19:39 +01:00
milicevicivan
984aac52d5
Update resources.ts 2026-02-06 00:18:21 +01:00
milicevicivan
c121a0bd30
Added Macedonian lang 2026-02-06 00:16:06 +01:00
milicevicivan
bb229fd959
Update zh-CN.json 2026-02-05 22:47:42 +01:00
milicevicivan
b4bbd1b933
Update tr.json 2026-02-05 22:46:38 +01:00
milicevicivan
59e3454dc8
Update sr.json 2026-02-05 22:45:50 +01:00
milicevicivan
7e343b6e3a
Update pt-PT.json 2026-02-05 22:44:09 +01:00
milicevicivan
5e7ac9cc2c
Update pt-BR.json 2026-02-05 22:43:35 +01:00
milicevicivan
afa3ac76aa
Update pl.json 2026-02-05 22:42:45 +01:00
milicevicivan
05c5e8f8f5
Update it.json 2026-02-05 22:41:52 +01:00
milicevicivan
8aade987bd
Update hi.json 2026-02-05 22:40:50 +01:00
milicevicivan
c70bcacd39
Update he.json 2026-02-05 22:39:34 +01:00
milicevicivan
095992a1fe
Update fr.json 2026-02-05 22:37:54 +01:00
milicevicivan
e5b53fe278
Update es.json 2026-02-05 22:37:07 +01:00
milicevicivan
465cd8c726
Update en.json 2026-02-05 22:36:19 +01:00
milicevicivan
b72143ca4c
Update de.json 2026-02-05 22:35:35 +01:00
milicevicivan
007559a3cf
Update cs.json 2026-02-05 22:34:43 +01:00
milicevicivan
fafa9d924d
Update bg.json 2026-02-05 22:33:40 +01:00
milicevicivan
97e35442b2
Update ar.json 2026-02-05 22:29:33 +01:00
milicevicivan
39de93e509
Update locales.ts 2026-02-05 22:27:04 +01:00
milicevicivan
db1dc0c216
Update resources.ts 2026-02-05 22:26:12 +01:00
milicevicivan
61024439f9
Added Slovenian lang 2026-02-05 22:24:20 +01:00
milicevicivan
200a5025f0
Update zh-CN.json 2026-02-05 22:14:00 +01:00
milicevicivan
bc1a0e481c
Update sr.json 2026-02-05 22:12:44 +01:00
milicevicivan
c7b8bee85e
Update pt-PT.json 2026-02-05 22:11:48 +01:00
milicevicivan
fbb20a602e
Update pt-BR.json 2026-02-05 22:11:10 +01:00
milicevicivan
a085678049
Update pl.json 2026-02-05 22:10:31 +01:00
milicevicivan
1eb3ce4b09
Update it.json 2026-02-05 22:09:37 +01:00
milicevicivan
dc9a5e73be
Update hi.json 2026-02-05 22:08:36 +01:00
milicevicivan
8bdfe319ac
Update he.json 2026-02-05 22:07:31 +01:00
milicevicivan
bd31a5b061
Update fr.json 2026-02-05 22:06:43 +01:00
milicevicivan
ab2ee7d075
Update es.json 2026-02-05 22:05:08 +01:00
milicevicivan
054e8b8439
Update en.json 2026-02-05 22:04:21 +01:00
milicevicivan
eaa9eef289
Update de.json 2026-02-05 22:02:48 +01:00
milicevicivan
e4bd00c0de
Update cs.json 2026-02-05 22:01:47 +01:00
milicevicivan
73742e62e6
Update bg.json 2026-02-05 22:00:53 +01:00
milicevicivan
4ba570f300
Update ar.json 2026-02-05 21:59:58 +01:00
milicevicivan
a39a6ba5e9
Update locales.ts 2026-02-05 21:57:57 +01:00
milicevicivan
7186c6ce9f
Update resources.ts 2026-02-05 21:57:11 +01:00
milicevicivan
5f65c48c02
Added Turkish lang 2026-02-05 21:56:02 +01:00
milicevicivan
9834d974bc
Update zh-CN.json 2026-02-05 20:06:33 +01:00
milicevicivan
957f014d0e
Update sr.json 2026-02-05 20:05:48 +01:00
milicevicivan
d5fe93d688
Update pt-PT.json 2026-02-05 20:04:57 +01:00
milicevicivan
ddc3b4e06c
Update pt-BR.json 2026-02-05 20:04:14 +01:00
milicevicivan
dfeb7bee79
Update pl.json 2026-02-05 20:03:31 +01:00
milicevicivan
8ccd3a5a9c
Update pl.json 2026-02-05 20:02:49 +01:00
milicevicivan
c4687cc3e7
Update it.json 2026-02-05 20:01:44 +01:00
milicevicivan
98412343e3
Update hi.json 2026-02-05 20:00:40 +01:00
milicevicivan
bcc7ca7226
Update he.json 2026-02-05 19:59:43 +01:00
milicevicivan
c25a1a934d
Update fr.json 2026-02-05 19:58:49 +01:00
milicevicivan
4b1b6830b9
Update es.json 2026-02-05 19:57:55 +01:00
milicevicivan
7cfcdc9f03
Update en.json 2026-02-05 19:55:57 +01:00
milicevicivan
3e7c6c3609
Update de.json 2026-02-05 19:55:15 +01:00
milicevicivan
9d1dc93733
Update bg.json 2026-02-05 19:54:07 +01:00
milicevicivan
10a016409f
Update ar.json 2026-02-05 19:52:52 +01:00
milicevicivan
8793807788
Update locales.ts 2026-02-05 19:50:31 +01:00
milicevicivan
830fc09774
Add Czech language support to resources 2026-02-05 19:49:23 +01:00
milicevicivan
4304ec7b54
Added Czech lang 2026-02-05 19:46:50 +01:00
milicevicivan
7112dd9ed0
Add Polish language translation to zh-CN.json 2026-02-05 19:15:25 +01:00
milicevicivan
eeccecb542
Added Polish lang 2026-02-05 19:13:35 +01:00
milicevicivan
0b473d47c6
Add Polish language support to pt-PT.json 2026-02-05 19:12:19 +01:00
milicevicivan
780a93bb11
Add Polish language support to pt-BR.json 2026-02-05 19:11:44 +01:00
milicevicivan
04d25178b4
Add Polish language translation to it.json 2026-02-05 19:09:23 +01:00
milicevicivan
3098e1ab13
Add Polish language support to hi.json 2026-02-05 19:08:21 +01:00
milicevicivan
209103d6c3
Added Polish lang 2026-02-05 19:07:25 +01:00
milicevicivan
72c3d301a0
Add Polish language translation to fr.json 2026-02-05 19:05:24 +01:00
milicevicivan
1bad730545
Add Polish language support to locales 2026-02-05 19:04:08 +01:00
milicevicivan
339e3e2ad4
Add Polish language support to locales 2026-02-05 19:02:51 +01:00
milicevicivan
2720d2231c
Add Polish language support to de.json 2026-02-05 19:02:13 +01:00
milicevicivan
e274989d0b
Added Polish lang 2026-02-05 19:01:23 +01:00
milicevicivan
c17b09e53d
Add Polish language translation to ar.json 2026-02-05 18:59:01 +01:00
milicevicivan
a1c16b9bea
Add Polish language support to locales 2026-02-05 18:56:20 +01:00
milicevicivan
eccb7b76d6
Add Polish language support to resources 2026-02-05 18:55:20 +01:00
milicevicivan
de5a17dd9f
Added Polish lang 2026-02-05 18:53:13 +01:00
milicevicivan
fb2edf6888
Add Bulgarian language support to localization 2026-02-05 18:41:20 +01:00
milicevicivan
8e958027e6
Added Bulgarian lang 2026-02-05 18:40:12 +01:00
milicevicivan
7d8441fad9
Add Bulgarian language support to pt-PT.json 2026-02-05 18:38:22 +01:00
milicevicivan
22799aa2c1
Add Bulgarian language support to pt-BR.json 2026-02-05 18:37:02 +01:00
milicevicivan
5c05b43708
Add Bulgarian language support to it.json 2026-02-05 18:35:13 +01:00
milicevicivan
948c1719e9
Add Bulgarian language support to hi.json 2026-02-05 18:34:12 +01:00
milicevicivan
476d3b806c
Added Bulgarian lang 2026-02-05 18:32:45 +01:00
milicevicivan
911c5ce96c
Add Bulgarian language support to French locale 2026-02-05 18:30:49 +01:00
milicevicivan
0c9ea1c375
Add Bulgarian language support to es.json 2026-02-05 18:29:25 +01:00
milicevicivan
abf7b40e70
Add Bulgarian language support to locales 2026-02-05 18:28:16 +01:00
milicevicivan
f9bccef201
Add Bulgarian translation to de.json 2026-02-05 18:27:08 +01:00
milicevicivan
fb67d908c8
Add Bulgarian language support to translations 2026-02-05 18:25:12 +01:00
milicevicivan
528f0dcbff
Add Bulgarian locale to locales.ts 2026-02-05 17:48:45 +01:00
milicevicivan
52bfa24a20
Add Bulgarian translations to resources 2026-02-05 17:47:27 +01:00
milicevicivan
85ac2e810f
Added Bulgarian lang 2026-02-05 17:45:52 +01:00
milicevicivan
31d3d4bec8
Add Hebrew locale to locales.ts 2026-02-05 17:24:01 +01:00
milicevicivan
11b05aa534
Delete he,json.txt (accidently added) 2026-02-05 17:22:33 +01:00
milicevicivan
9109c6050c
Add Hebrew translation to resources 2026-02-05 17:12:24 +01:00
milicevicivan
9d4caf43e5
Add Hebrew language support to zh-CN.json 2026-02-05 17:11:17 +01:00
milicevicivan
1add810f8f
Update sr.json 2026-02-05 17:10:07 +01:00
milicevicivan
420d496965
Add Hebrew language translation to pt-PT.json 2026-02-05 17:08:02 +01:00
milicevicivan
51c65bca4c
Add Hebrew language support to pt-BR locale 2026-02-05 17:07:15 +01:00
milicevicivan
4f0ce62a2d
Add Hebrew language support in Italian locale 2026-02-05 17:06:02 +01:00
milicevicivan
ca8eabd14b
Add Hebrew language translation to hi.json 2026-02-05 17:05:04 +01:00
milicevicivan
6ad54ce8da
Add Hebrew language support to French locale 2026-02-05 17:03:39 +01:00
milicevicivan
5da830a0e5
Add Hebrew language support to Spanish locales 2026-02-05 17:02:30 +01:00
milicevicivan
cd308475b6
Add Hebrew language support to locales 2026-02-05 17:00:47 +01:00
milicevicivan
0bd9c397cc
Add Hebrew language translation to de.json 2026-02-05 16:59:39 +01:00
milicevicivan
8aa004d474
Add Hebrew language support in Arabic locale 2026-02-05 16:58:19 +01:00
milicevicivan
c6a53d5852
Add Hebrew localization support 2026-02-05 16:54:15 +01:00
milicevicivan
68621a8ca0
Added Hebrew (wrong format and destination fixed) 2026-02-05 16:53:01 +01:00
milicevicivan
e9d71d99d1
Added Hebrew lang 2026-02-05 16:42:45 +01:00
milicevicivan
f96be99d75
Update sr.json 2026-02-05 15:41:34 +01:00
milicevicivan
8680b4bab8
Update sr.json 2026-02-05 15:27:01 +01:00
milicevicivan
4fb3f04ca1
Update sr.json 2026-02-05 15:26:38 +01:00
milicevicivan
31858088f5
Update sr.json 2026-02-05 15:23:27 +01:00
milicevicivan
e4fb45fab4
Update sr.json 2026-02-05 15:14:21 +01:00
milicevicivan
febab48943
Update sr.json
Mistake fixed
2026-02-05 14:28:36 +01:00
milicevicivan
e255587335
Update sr.json
Mistake fixed
2026-02-05 14:16:14 +01:00
tapframe
77b8b59734 fix: stream addon selection logic with fallback for non-standard types 2026-02-05 12:17:38 +05:30
tapframe
4c9bcbf64e update download URLs to use versioned paths for releases 2026-02-05 11:32:05 +05:30
tapframe
23ffc9977b feat(i18n): add privacy settings translations for multiple languages 2026-02-05 11:29:24 +05:30
tapframe
1b9010435f Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-02-05 10:56:19 +05:30
tapframe
454a6f387f feat: Implement privacy settings and telemetry management 2026-02-05 10:56:07 +05:30
Nayif
457dc9f8e2
Merge pull request #456 from paregi12/Api-key
Api key
2026-02-02 13:02:27 +05:30
paregi12
682d3f2eb3 refactor: improve IntroDB API key verification and handle unmounted state 2026-02-01 22:49:32 +05:30
paregi12
f8bac1aa56 feat: implement IntroDB API key verification before saving 2026-02-01 22:49:32 +05:30
tapframe
c43e6d879f Revert TrailerContext.tsx to before d6c3e81e 2026-02-01 01:11:52 +05:30
tapframe
fc56980399 Fix locales.ts syntax error 2026-02-01 01:09:27 +05:30
Nayif
520f8595aa
Merge pull request #452 from paregi12/feat-intro-db-submission
feat: implement intro submission feature
2026-02-01 01:03:47 +05:30
Nayif
d6c3e81e5c
Merge pull request #453 from xicoivy/main
Trailer orientation
2026-02-01 01:02:58 +05:30
xicoivy
2e6c67e1b6
Update TMDBSettingsScreen.tsx
Added Croatian lang
2026-01-31 18:45:42 +01:00
xicoivy
4449a924a3
Update TrailerContext.tsx
Added automatic screen orientation when playing trailer.
2026-01-31 17:44:36 +01:00
xicoivy
045353bc1b
Update locales.ts
Added Serbian lang
2026-01-31 17:21:19 +01:00
paregi12
8d9fed3f7f feat: implement intro submission feature and update to beta.14 2026-01-31 14:08:39 +05:30
Nayif
28216b475f
Merge pull request #450 from xicoivy/main
Update Croatian (hr.json) translations
2026-01-30 19:37:50 +05:30
Nayif
58a2dec385
Merge pull request #449 from chrisk325/patch-13
small workaround until the full rework for imdb logo
2026-01-30 19:37:05 +05:30
xicoivy
33bb4c86b9
Mistake fixed 2026-01-30 00:14:42 +01:00
xicoivy
c2060b1d93
Added Serbian (mistake fixed) 2026-01-29 19:27:10 +01:00
xicoivy
1f0dba4294
Added Serbian language 2026-01-29 19:24:58 +01:00
xicoivy
bff70c8d6b
Added Serbian 2026-01-29 19:24:08 +01:00
xicoivy
385fb8b96d
Added Serbian 2026-01-29 19:22:22 +01:00
xicoivy
b9cf9ac6c8
Added Serbian 2026-01-29 19:20:50 +01:00
xicoivy
a1945b239f
Added Serbian 2026-01-29 19:18:46 +01:00
xicoivy
c8b5a00e57
Added Serbian 2026-01-29 19:17:43 +01:00
xicoivy
b69bacc202
Added Serbian 2026-01-29 19:15:40 +01:00
xicoivy
c867e137b1
Added Serbian 2026-01-29 19:14:19 +01:00
xicoivy
104d9d7b53
Added Serbian 2026-01-29 19:11:13 +01:00
xicoivy
c1efcf8e92
Added Serbian 2026-01-29 19:08:44 +01:00
xicoivy
c821b560f2
Added Serbian 2026-01-29 19:06:37 +01:00
xicoivy
6b11c70647
Added Serbian 2026-01-29 19:04:27 +01:00
xicoivy
4a6bc7ecdb
Added Serbian 2026-01-29 19:02:05 +01:00
xicoivy
ba20f0853a
Update Croatian (hr.json) translations
Changed Croatian translations for the existing strings.
2026-01-29 18:30:32 +01:00
chrisk325
62415550df
small workaround until the full rework for imdb logo 2026-01-29 19:52:09 +05:30
Nayif
93f951af60
Merge pull request #448 from chrisk325/revert-445-patch-12
Revert "better approach for imdb logo using remote svg lib"
2026-01-29 17:52:24 +05:30
tapframe
f73e418b36 revert: drop theintrodb.org integration
Revert the theintrodb.org skip-intro provider and return to the existing introdb.app behavior.
2026-01-29 11:50:11 +05:30
chrisk325
82a60e8c5f
Revert "better approach for imdb logo using remote svg lib" 2026-01-29 04:19:52 +05:30
tapframe
ec7525668b Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-01-29 01:16:25 +05:30
Nayif
5fa793e1f5
Merge pull request #445 from chrisk325/patch-12
better approach for imdb logo using remote svg lib
2026-01-29 01:15:25 +05:30
chrisk325
504a34df24
small fix 2026-01-28 22:30:52 +05:30
chrisk325
6f0db7303b
better approach for imdb logo using remote svg lib 2026-01-28 21:57:59 +05:30
Nayif
fc2ff910e6
Merge pull request #444 from chrisk325/patch-11
fix imdb logo not appearing while using mdblist
2026-01-28 20:14:07 +05:30
chrisk325
983f33556f
fix imdb logo not appearing while using mdblist 2026-01-28 19:41:51 +05:30
tapframe
13c4313703 fix for addon renaming and disabling due to addon.id key conflict 2026-01-27 18:48:26 +05:30
tapframe
c6b45340ba Buffer Indicator behaviour fix while controls are hidden 2026-01-27 15:57:00 +05:30
tapframe
de576915d5 added buffer indicator 2026-01-27 00:41:53 +05:30
tapframe
fd9cc1ac52 improved gesture handler behaviour 2026-01-27 00:26:37 +05:30
tapframe
a318bd350b Added double tap to Skip, Slide to seek 2026-01-26 23:30:57 +05:30
tapframe
8b267fb6d7 improved touch handling player controls 2026-01-26 23:10:46 +05:30
tapframe
a8f10fbcd8 disabled android player brightness control temporarily 2026-01-26 17:17:24 +05:30
tapframe
2417bf548a feat: added theintrodb.org skip intro service 2026-01-26 16:55:58 +05:30
tapframe
aeb49232dd update index.html 2026-01-26 13:23:48 +05:30
tapframe
c36210e9c2 added simkl watchlists 2026-01-26 12:53:14 +05:30
tapframe
f4bd44d3e0 Removed Debrid Integration 2026-01-26 11:46:28 +05:30
tapframe
4ea96b477f update readme 2026-01-26 11:04:16 +05:30
tapframe
a6b1310cf3 update readme 2026-01-26 10:54:56 +05:30
tapframe
77f5cb2b80 added Hindi 2026-01-25 22:55:22 +05:30
tapframe
86f6bc4ae2 added chinese 2026-01-25 22:43:53 +05:30
tapframe
df6006c221 release: 1.3.7 2026-01-25 22:31:36 +05:30
tapframe
d09625ebbd optimized bufferConfig ExoPlayer 2026-01-25 16:34:35 +05:30
tapframe
36b2375db0 added donor screen 2026-01-25 14:37:42 +05:30
tapframe
4f6a150592 added back ksplayer deps to .pbxproj 2026-01-24 22:52:05 +05:30
tapframe
fd7372a2e9 added liveactivity for ios downloads 2026-01-24 13:41:36 +05:30
tapframe
671ed871e3 updated downloads behaviour 2026-01-24 11:59:59 +05:30
tapframe
83bb91e1d1 added support for multiple addon installation of the same addon.id 2026-01-24 10:25:27 +05:30
tapframe
e5fb18fe5c added croatian 2026-01-24 01:38:36 +05:30
tapframe
916ad188bc added preflight content length fetching logic 2026-01-24 01:19:15 +05:30
tapframe
828644cce4 Reapply "streamscreen tvshow rendering fix"
This reverts commit b817ff37b5.
2026-01-24 01:15:42 +05:30
tapframe
b24cd9ca66 added axios response limit 2026-01-23 12:57:16 +05:30
tapframe
181de15b93 type fixes 2026-01-22 12:30:04 +05:30
tapframe
fefb0cda01 minor ui changes 2026-01-22 00:51:34 +05:30
tapframe
68dd37cc1d added concurrency limit to pluginservice 2026-01-22 00:16:01 +05:30
tapframe
4547e153ac forgot to update version num 2026-01-21 20:43:54 +05:30
tapframe
ef1504ad5b release: 1.3.6 2026-01-21 19:21:37 +05:30
tapframe
1931bbc558 removed special episodes appearing from thisweeksection 2026-01-21 17:56:38 +05:30
tapframe
a042cf5ca6 update aspect ratio indicator ios 2026-01-21 17:51:17 +05:30
tapframe
154d568aa3 added aspect ratio indicator 2026-01-21 17:48:11 +05:30
tapframe
b33fde8c9e fix for txt file playback, exoplayer 2026-01-21 17:36:57 +05:30
tapframe
afdac8c1e9 minor sub fixes 2026-01-21 17:01:40 +05:30
tapframe
9d0163b4eb removed the stream/MKV/URL-validation HEAD probes; 2026-01-21 16:25:09 +05:30
tapframe
a4548c69e9 added inbuit update downloader for android 2026-01-21 15:59:13 +05:30
tapframe
0ee748cd10 adjusted safe area view 2026-01-21 15:01:47 +05:30
tapframe
b817ff37b5 Revert "streamscreen tvshow rendering fix"
This reverts commit 41adf5913f.
2026-01-20 19:37:25 +05:30
tapframe
2314d1db86 verbose logs cleanup 2026-01-19 13:57:49 +05:30
tapframe
674dbcf818 slide parallax fix appletv hero 2026-01-19 13:19:33 +05:30
tapframe
b3765f13da various simkl api call optimizations 2026-01-19 12:52:03 +05:30
tapframe
effab63a70 simkl optimizations 2026-01-18 16:57:18 +05:30
tapframe
f008654ac7 Merge branch 'main' and resolve .gitignore conflict 2026-01-18 14:37:03 +05:30
tapframe
335edb214a update gitignore 2026-01-18 14:36:21 +05:30
Nayif
d7dc0ea8ae
Merge pull request #421 from tapframe/simkl
Simkl Init (Alpha)
2026-01-18 14:32:29 +05:30
tapframe
34a3c52aed Mentioning Alpha stage 2026-01-18 14:31:54 +05:30
tapframe
34d809c510 margin adjustment 2026-01-18 14:29:36 +05:30
tapframe
00cf7e696d Revert "margin adjustments"
This reverts commit 6f15e104ef.
2026-01-18 14:29:00 +05:30
tapframe
6f15e104ef margin adjustments 2026-01-18 14:27:49 +05:30
tapframe
3e30048c03 added "simk" harcodings to locales 2026-01-18 14:26:23 +05:30
tapframe
4a61136690 removed primary colour from trakt icon 2026-01-18 14:18:30 +05:30
tapframe
ea2debb9dd ui changes 2026-01-18 14:15:02 +05:30
tapframe
25e1102832 simkl init 2026-01-18 13:48:19 +05:30
tapframe
bfba45e74a removed streamscreen header filter 2026-01-18 11:56:37 +05:30
tapframe
44f9aa5c35 Auto-select first stream sort fix 2026-01-18 10:39:38 +05:30
tapframe
301560b21a minor bug fixes 2026-01-18 10:25:42 +05:30
Nayif
696d37dd08
Merge pull request #415 from tapframe/revert-406-patch-9
Revert "fix tmdb enrichment overriding addon provided metadata even when turned off"
2026-01-17 17:32:39 +05:30
Nayif
a6fe84b07a
Revert "fix tmdb enrichment overriding addon provided metadata even when turned off" 2026-01-17 17:31:47 +05:30
Nayif
fd864c0cc0
Merge pull request #404 from saifshaikh1805/patch/brightness-issue#299 2026-01-16 11:28:18 +05:30
Nayif
a8867df4e6
Merge pull request #396 from AdityasahuX07/patch-22
Minor bug fix for discover filter not save the "All Genres" state.
2026-01-15 13:55:05 +05:30
Nayif
950fc5cf90
Merge pull request #406 from chrisk325/patch-9
fix tmdb enrichment overriding addon provided metadata even when turned off
2026-01-15 13:54:29 +05:30
Saif Shaikh
eef72d8b70 fix: Brightness issue #299 2026-01-14 03:37:00 -08:00
Saif Shaikh
54b51391ad Revert "fix: brightness issue #299"
This reverts commit 0cd94da7ce.
2026-01-14 03:35:15 -08:00
chrisk325
7ed65d59d3
fix tmdb enrichment overriding addon provided metadata even when turned off 2026-01-14 15:07:17 +05:30
tapframe
41adf5913f streamscreen tvshow rendering fix 2026-01-14 13:45:46 +05:30
Saif Shaikh
0cd94da7ce fix: brightness issue #299 2026-01-13 05:30:56 -08:00
tapframe
5ff8ebca92 updated missing translation keys 2026-01-12 21:03:16 +05:30
tapframe
61a69799d4 added skip intro toggle 2026-01-12 19:29:39 +05:30
tapframe
0ddc78587b should fix trakt local porgress sync conflict 2026-01-12 18:43:13 +05:30
tapframe
f552958f03 improved trakt continue watching logic 2026-01-12 18:04:51 +05:30
tapframe
f9c043ba32 fix showbox token not reading 2026-01-12 16:12:51 +05:30
AdityasahuX07
15af3e1dc2
Minor bug fix for discover filter not save the "All Genres" state.
Refactor genre saving and loading logic

Updated genre handling to save empty string for 'All genres' and adjusted loading logic accordingly.
2026-01-12 15:38:39 +05:30
tapframe
7bf3a344f3 release: 1.3.5 (33) 2026-01-12 00:13:29 +05:30
Nayif
14e8e90ee3
Merge pull request #391 from saifshaikh1805/patch-issue301
fix: issue #301
2026-01-11 22:48:15 +05:30
Nayif
d52c202518
Merge pull request #394 from AdityasahuX07/patch-20
Implement save and load for discover settings
2026-01-11 22:47:38 +05:30
tapframe
c728f4ea8d updated exoplayer sub behaviour 2026-01-11 22:46:54 +05:30
tapframe
c20c2713d0 updated exosub 2026-01-11 20:45:36 +05:30
tapframe
d398c73214 removed debrid integration 2026-01-11 20:45:32 +05:30
tapframe
9e6b455323 temp disable splash 2026-01-11 20:45:28 +05:30
AdityasahuX07
5a2271c64e
Implement save and load for discover settings
Added functionality to save and load discover settings including type, catalog, and genre.
2026-01-11 18:21:56 +05:30
tapframe
eb6fcf639f ksp sub updates 2026-01-11 00:46:30 +05:30
tapframe
a85cc93026 internal sub offset, bg fix android 2026-01-10 23:43:32 +05:30
tapframe
56fd18a8e9 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-01-10 23:31:47 +05:30
tapframe
82d0ebb714 Fix ExoPlayer subtitle styling and iOS MPV config
- Fix subtitle track selection (only first track worked)
- Fix subtitle styling (background, outline, bottom offset)
- Update iOS MPV to match Wayve settings (Vulkan, HDR, stability options)
- Add patch-package for react-native-video fixes
2026-01-10 23:31:08 +05:30
Saif Shaikh
df5772d40b fix: issue #301 2026-01-10 08:10:20 -08:00
Nayif
3030d5961d
Merge pull request #388 from saifshaikh1805/patch/bottomSheetIssuesAndRefactor
patch: bottom sheet back button behavior, SettingsScreen.tsx refactor
2026-01-10 13:36:20 +05:30
Saif Shaikh
6974768457 patch: bottom sheet back button behavior, SettingsScreen.tsx refactor 2026-01-09 23:46:31 -08:00
Nayif
d31cd2fcdc
Merge pull request #386 from AdityasahuX07/patch-19
Adjust padding and margin values in LibraryScreen and CatalogSection
2026-01-09 23:17:48 +05:30
AdityasahuX07
b916bdbcca
Adjust item separator height in CatalogScreen 2026-01-09 20:19:48 +05:30
AdityasahuX07
67d53cf5ce
Adjust padding and margin values in LibraryScreen and CatalogSection
make the uniform gap between the posters to look symmetric.
2026-01-09 20:15:56 +05:30
tapframe
175d6a173e update doc 2026-01-09 18:27:19 +05:30
tapframe
b7140e15a5 added an AppState listener to the player 2026-01-09 17:49:39 +05:30
tapframe
76310dae1b updated AI model 2026-01-09 17:02:08 +05:30
tapframe
01a041aebf fix: fixed autoplay stream 2026-01-09 16:46:46 +05:30
tapframe
031c0c8772 added dev options to prod builds 2026-01-09 01:11:29 +05:30
tapframe
fd1e303403 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-01-09 00:44:40 +05:30
tapframe
45b63cb33f fixed skip bacwards icon render cache issue 2026-01-09 00:44:32 +05:30
Nayif
c9dfecb68c
Merge pull request #381 from AdityasahuX07/patch-18
Move libraryBadge to its correct position.
2026-01-08 23:29:20 +05:30
tapframe
aa6406eae0 added dev docs 2026-01-08 21:38:48 +05:30
tapframe
26e4c6db88 updated docs 2026-01-08 21:37:01 +05:30
tapframe
2439bd1cd8 added deeplink support for plugin installation 2026-01-08 16:50:18 +05:30
tapframe
1fdcdd02bf updated tablet ui for plugin test screen 2026-01-08 16:15:15 +05:30
tapframe
bb94a49662 Fix: Critical Tablet screen crash fix upon app opening 2026-01-08 15:54:40 +05:30
tapframe
2ebec55bbc updated continue watching logic to render only last 30 watch progress 2026-01-08 15:03:59 +05:30
tapframe
5fe23c7ad1 fixed tmdb enrichment logic overrding addons meta while turned off. 2026-01-08 14:10:43 +05:30
tapframe
b6a5c108de All slide_from_right animations for Android have been replaced with 'default' 2026-01-08 13:09:44 +05:30
tapframe
83ce7cf44d fix: updated stremioservice to handle empty meta addon cases 2026-01-08 13:05:36 +05:30
tapframe
28632d192f updated plugin tester localization 2026-01-08 13:00:42 +05:30
tapframe
2a265bf716 update dev tools translation 2026-01-08 12:35:37 +05:30
AdityasahuX07
b06800860c
move libraryBadge to its correct position.
Add styles to libraryBadge in SearchResultItem.

Fixes issue #377
2026-01-08 12:30:55 +05:30
tapframe
75702d823f plugintest: added player testing support 2026-01-08 03:49:38 +05:30
tapframe
f865b737e6 adjusted plugintest screen layout for tablets 2026-01-08 03:44:39 +05:30
tapframe
2169354f0d refactored plugintest screen 2026-01-08 03:41:32 +05:30
tapframe
8dc1217c36 added repo testing 2026-01-08 03:16:37 +05:30
tapframe
0a1511f09f plugintest screen init 2026-01-08 02:41:43 +05:30
tapframe
73030f150a fix: android seekbar to show timestamp as we drag 2026-01-08 01:30:58 +05:30
tapframe
a1f4702647 reanimated warnings: Fixed by removing the direct .value read in
SkipIntroButton
2026-01-08 00:31:33 +05:30
tapframe
2ddfe63fa4 added polyfill to follow redirect "manual" 2026-01-08 00:27:26 +05:30
tapframe
79ffe92864 fixed searchscreen handlers after the refactor. 2026-01-07 22:29:21 +05:30
tapframe
e5178c9414 Added the missing malId and kitsuId props to
KSPlayerCore.tsx
2026-01-07 22:18:27 +05:30
Nayif
f779febc32
Merge pull request #367 from AdityasahuX07/patch-17
[Updated]Added double tap on search button to open keyboard for ready to search feature.
2026-01-07 22:13:23 +05:30
Nayif
5afd3d6b08
Merge pull request #358 from paregi12/feature/ani-skip
feat: implement AniSkip support in video player
2026-01-07 22:12:54 +05:30
tapframe
6005574019 added german and pt-Portugal in localisation 2026-01-07 18:13:37 +05:30
AdityasahuX07
645dcecaca
Merge branch 'main' into patch-17 2026-01-07 17:33:53 +05:30
AdityasahuX07
1686138499
Update AppNavigator.tsx 2026-01-07 17:32:52 +05:30
AdityasahuX07
cd1ed27f1e
Update print statement from 'Hello' to 'Goodbye' 2026-01-07 17:19:19 +05:30
AdityasahuX07
3b210b06d5
Update AppNavigator.tsx 2026-01-07 17:18:37 +05:30
tapframe
0f9c1b03a5 added trakt attribution 2026-01-07 16:38:04 +05:30
tapframe
217244c367 removing unattributed logos 2026-01-07 15:45:24 +05:30
tapframe
852868cf89 updated legalscreen with localization 2026-01-07 14:22:31 +05:30
tapframe
a52a2ccc31 update readme 2026-01-07 14:16:18 +05:30
tapframe
210ae6b0ee updated pluginscreen terminology 2026-01-07 14:01:02 +05:30
tapframe
c6e55429e4 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-01-07 13:31:20 +05:30
tapframe
07b27dd485 fixed the issue where common.settings was displayed as a raw key 2026-01-07 13:31:05 +05:30
paregi12
5166dbd446
Merge branch 'tapframe:main' into feature/ani-skip 2026-01-07 13:18:43 +05:30
Nayif
0722923a78
Merge pull request #370 from Eazvy/main
fix escape key crashing on macOS
2026-01-07 12:50:16 +05:30
tapframe
a85698b009 added localization to themescreen. 2026-01-07 12:44:42 +05:30
tapframe
9b2b619121 added italian language to UI. 2026-01-07 12:37:22 +05:30
Nayif
ac097f6513
Merge pull request #371 from albyalex96/patch-1
Add Italian Localization
2026-01-07 12:32:14 +05:30
paregi12
a383289457
Merge branch 'tapframe:main' into feature/ani-skip 2026-01-07 07:47:50 +05:30
albyalex96
e76b44cff1
Created it locale 2026-01-07 01:03:24 +01:00
Eazvy
0f9f6bbe5d
fix accidental override of buffering 2026-01-06 18:23:01 -05:00
Eazvy
c48670fa74
fix escape key crashing on macOS
just adds an ignore listener so it doesn't crash, nor do anything
2026-01-06 18:13:04 -05:00
Nayif
c530619039
Merge pull request #368 from saimuelbr/main
Correcting forgotten parameter in json i18n
2026-01-07 01:06:57 +05:30
saimuelbr
5e221e7e97 minor fix 2026-01-06 16:03:52 -03:00
tapframe
65909a5f2e catalogscreen optimization for heavy render list 2026-01-07 00:23:03 +05:30
tapframe
bbdd4c0504 updated remaining contents for localization 2026-01-07 00:05:02 +05:30
tapframe
9924d26ff6 refactor search screen 2026-01-06 23:48:22 +05:30
tapframe
b10aab6057 release: 1.3.4 2026-01-06 19:44:54 +05:30
paregi12
ccad48fbb4
Merge branch 'tapframe:main' into feature/ani-skip 2026-01-06 18:29:04 +05:30
tapframe
91e9549ec6 type fix 2026-01-06 17:43:03 +05:30
AdityasahuX07
066bf6f15d
Enhance Search tab behavior with event emitter
Added DeviceEventEmitter to handle search input focus on tab press for Search tab.
2026-01-06 17:08:42 +05:30
AdityasahuX07
56df30a4da
Implement focus event listener for Search tab
Added a focus event listener to handle when the Search tab is pressed while already on the Search screen, focusing the input and clearing previous results.
2026-01-06 17:02:38 +05:30
tapframe
27ce25f5c5 added french 2026-01-06 16:11:54 +05:30
tapframe
334d0b1863 added arabic 2026-01-06 15:56:27 +05:30
tapframe
437645d5fd updated remaining files 2026-01-06 15:32:23 +05:30
tapframe
280536e93c updated remaining pages for localization. metascreen and player components 2026-01-06 15:26:13 +05:30
tapframe
611b37c847 added to remaining. metascreen 2026-01-06 14:57:08 +05:30
tapframe
5e3198c9c6 metascreen/streamscrean localization init 2026-01-06 14:46:11 +05:30
tapframe
6ef047db3c updated remaining main screens for localization 2026-01-06 14:04:16 +05:30
tapframe
cdab715463 updated tab navigator for localization 2026-01-06 13:18:31 +05:30
tapframe
96ac361c8e completed settingscreen localization 2026-01-06 13:15:07 +05:30
tapframe
ed4950cd1f updated sub pages 2026-01-06 12:07:37 +05:30
tapframe
afddf4bf2d updated settinsgcreen and it's sub-pages to support localization 2026-01-06 11:39:12 +05:30
tapframe
9c37ad8b94 multi-lang init 2026-01-06 11:34:05 +05:30
tapframe
9877f513e2 up next logic improvements 2026-01-06 10:07:58 +05:30
tapframe
f4b5082827 chore: updated continue watching card hold behaviour 2026-01-06 09:40:42 +05:30
tapframe
1627928fb2 added back up next 2026-01-06 09:17:56 +05:30
tapframe
6ff5aa9e02 updated react native video patch file 2026-01-06 00:25:18 +05:30
Nayif
20601cd7ba
Merge pull request #361 from chrisk325/patch-8
Several optimizations for exoplayer for preventing crashes with heavy file sizes
2026-01-06 00:17:12 +05:30
tapframe
2d6b4afa2d fix: added timeout for tabletstreamscreen to prevent blackscreen until backdrop is fetched 2026-01-06 00:12:00 +05:30
tapframe
4ce14ec4cc optimized perf 2026-01-06 00:00:33 +05:30
tapframe
0f1d736716 slight onboarding screen Ui change 2026-01-05 23:42:51 +05:30
tapframe
edeb6ebe3c feat: added new poster like layout for continue watching card 2026-01-05 17:54:17 +05:30
tapframe
ab7f008bbb added toggle to control this week sections 2026-01-05 13:39:02 +05:30
paregi12
1e60af1ffb feat: prioritize IntroDB and implement ARM API for faster MAL ID resolution 2026-01-05 00:33:33 +05:30
tapframe
4dd1fca0a7 increased cache buffer ksplayer 2026-01-05 00:02:03 +05:30
tapframe
81b97da75e chore: trakt update 2026-01-04 20:50:37 +05:30
paregi12
6a7d6a1458 feat: implement robust IMDb to MAL resolution for AniSkip support 2026-01-04 19:23:53 +05:30
tapframe
2835ede747 Changed Trakt Continue watch Sync Behaviour. now fetches directly from api when authenticated and doesn't merges to local storage. 2026-01-04 18:43:44 +05:30
chrisk325
59f77ac831
optimisations for exo 2026-01-04 16:17:16 +05:30
tapframe
3e63efc178 added parallel season fetching 2026-01-04 15:57:23 +05:30
tapframe
4aa22cc1c3 chore: improved tmdb enrichment logic 2026-01-04 15:37:49 +05:30
chrisk325
4fdda9a184
several exoplayer optimizations to prevent crashes with huge file sizes 2026-01-04 15:25:27 +05:30
chrisk325
5bd9f41104
decreasing player refresh time from 4 times per second to 2 times , to prevent crashes with heavy files 2026-01-04 14:36:50 +05:30
chrisk325
486ea63a8a
fixing exo crash and some UI flaws 2026-01-04 14:33:16 +05:30
paregi12
0919a40c75 fix: correct AniSkip API query parameters 2026-01-04 11:58:54 +05:30
paregi12
3de2fb4809 feat: implement AniSkip support in video player 2026-01-04 11:45:05 +05:30
Nayif
3d5a9ebf42
Merge pull request #355 from chrisk325/patch-7 2026-01-04 11:13:38 +05:30
chrisk325
be3e111e63
small fix 2026-01-04 05:44:56 +05:30
chrisk325
8a0bed7238
ironed out a ui flaw + fix 2026-01-04 05:17:40 +05:30
chrisk325
d2556b6c36
rework 2026-01-04 04:46:13 +05:30
chrisk325
506ca4f95c
rework the trakt sync logic 2026-01-04 03:49:06 +05:30
Nayif
5b2c57d5c7
Merge pull request #351 from tapframe/revert-347-feature/improved10secSkipAndRewind
Revert "patch: incremental 10 sec skip/rewind on multiple taps"
2026-01-04 00:11:43 +05:30
Nayif
7c2b1ac73d
Merge pull request #352 from tapframe/revert-345-feature/seekingTimestamp
Revert "add: current timestamp update while sliding the seek bar on Android"
2026-01-04 00:11:31 +05:30
Nayif
a55669d16f
Revert "add: current timestamp update while sliding the seek bar on Android" 2026-01-04 00:11:13 +05:30
Nayif
656062bc25
Revert "patch: incremental 10 sec skip/rewind on multiple taps" 2026-01-04 00:10:45 +05:30
Nayif
b42401a909
Merge pull request #350 from chrisk325/patch-6
Complete fix for trakt up next thanx to @oceanm8 on discord for the idea
2026-01-03 22:05:06 +05:30
chrisk325
2c6c110265
fix 2026-01-03 20:03:03 +05:30
chrisk325
e7b3458f34
small fix 2026-01-03 19:54:46 +05:30
chrisk325
e0ad949141
small fix 2026-01-03 19:47:53 +05:30
chrisk325
28d27128d1
fix local data overriding trakt progress 2026-01-03 19:11:35 +05:30
chrisk325
ebbe715581
small fix 2026-01-03 18:52:53 +05:30
chrisk325
af138944b5
fix trakt sync to local for upnext 2026-01-03 18:45:43 +05:30
chrisk325
4603d1dc2a
redo how trakt marks stuff as watched to local 2026-01-03 18:33:06 +05:30
chrisk325
e323906083
fix up next 2026-01-03 18:11:27 +05:30
Nayif
6cb115ed74
Merge pull request #348 from chrisk325/patch-5 2026-01-03 10:36:11 +05:30
chrisk325
0149068126
fix continue watching metadata 2026-01-03 02:25:15 +05:30
Nayif
7894258a26
Merge pull request #347 from saifshaikh1805/feature/improved10secSkipAndRewind 2026-01-03 01:54:46 +05:30
Nayif
775242255a
Merge pull request #345 from saifshaikh1805/feature/seekingTimestamp 2026-01-03 01:54:37 +05:30
chrisk325
faa4f341e6
fix up next yet again (final fix probably) 2026-01-03 01:50:43 +05:30
chrisk325
a079649563
fix trakt syncing watched shows/movies back to trakt's recent history 2026-01-03 01:23:40 +05:30
Saif Shaikh
63359532a3 patch: incremental 10 sec skip/rewind on multiple taps 2026-01-02 11:44:50 -08:00
Saif Shaikh
5d42a828d2 add: current timestamp update while sliding the seek bar on Android 2026-01-01 23:32:32 -08:00
Nayif
2da03d4931
Merge pull request #334 from chrisk325/patch-3
fixes trakt up next
2026-01-01 16:12:53 +05:30
chrisk325
4235e327fc
fixes trakt up next 2026-01-01 15:45:49 +05:30
tapframe
0d3454cd24 updated source.json 2026-01-01 04:05:23 +05:30
tapframe
5850650713 1.3.3 2026-01-01 03:49:32 +05:30
tapframe
47f3cb4b71 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2026-01-01 03:32:38 +05:30
Nayif
2b802079a0
Merge pull request #331 from chrisk325/main
fixed tmdb enrichment logic , fixed trakt not syncing watch progress for old seasons
2026-01-01 03:31:40 +05:30
chrisk325
0d416f724c
small fix to backdrop fallback logic 2026-01-01 02:02:53 +05:30
tapframe
a6a0a8b1b1 removed sandboxed environment 2026-01-01 02:00:54 +05:30
chrisk325
dd1a3ed496
fix tmdb enrichment override for the logo 2026-01-01 01:58:30 +05:30
chrisk325
9f3831e733
fix for trakt only syncing the latest season disregarding the previous seasons 2026-01-01 01:16:18 +05:30
chrisk325
fd1107a5a3
fix backdrop override by tmdb enrichment 2026-01-01 00:09:33 +05:30
chrisk325
a9a78d5565
fix tmdb enrichment overriding metadata even when turned off 2025-12-31 23:48:56 +05:30
Nayif
a794e27235
Merge pull request #328 from AdityasahuX07/patch-15
Minor UI changes and Bug fix.
2025-12-31 20:03:59 +05:30
Nayif
9bb9d6548a
Merge pull request #327 from chrisk325/main
this should fix addon provided metadata for "continue watching" and "trakt this week"
2025-12-31 20:02:54 +05:30
Nayif
3625ca9edc
Merge pull request #330 from tapframe/plugin
multi plugin support
2025-12-31 20:02:28 +05:30
tapframe
3293b57537 multi plugin support 2025-12-31 19:50:08 +05:30
AdityasahuX07
867458b52f
Change controls hide delay from 3s to 2s
Reduce the delay for hiding controls from 3 seconds to 2 seconds.
2025-12-31 18:59:16 +05:30
AdityasahuX07
8daca53be3
Implement auto-hide for video player controls
Added auto-hide functionality for video player controls after 3 seconds of inactivity, with cleanup on unmount.
2025-12-31 18:56:32 +05:30
AdityasahuX07
4174fd2add
Adjust padding and gap in playerStyles 2025-12-31 18:55:44 +05:30
AdityasahuX07
d3041f99cc
Refactor SpeedActivatedOverlay component props and styles 2025-12-31 18:48:10 +05:30
chrisk325
6acfa2971b
fallback to metadata banner if tmdb enrichment banner is disabled by the user 2025-12-31 17:29:23 +05:30
chrisk325
7271ed39a0
fix for trakt this week metadata 2025-12-31 17:14:02 +05:30
chrisk325
639e84bb88
push addonId for trakt up next 2025-12-31 16:58:24 +05:30
chrisk325
36ad45cfbc
push addonId 2025-12-31 16:52:55 +05:30
chrisk325
c0540db282
preserving stream providers's id 2025-12-31 16:47:15 +05:30
chrisk325
7d6008b0a9
adding addonId to player's saved progress 2025-12-31 16:44:07 +05:30
tapframe
af96d30122 ui changes 2025-12-31 03:26:25 +05:30
tapframe
bf75cca438 refactored settingscreen 2025-12-31 03:15:37 +05:30
tapframe
3285ecbe04 Updated Subtitle Sync Modal 2025-12-31 02:41:13 +05:30
tapframe
6906ad99b7 updated to gorhom bottom sheet 2025-12-31 01:15:04 +05:30
tapframe
f3c5289013 icons update 2025-12-31 01:06:40 +05:30
tapframe
be9473adf7 added subtitle/audio track selection menu 2025-12-31 01:05:09 +05:30
Nayif
ec28f73df9
Merge pull request #324 from chrisk325/patch-1
small fix
2025-12-31 00:37:25 +05:30
chrisk325
d19f4713a2
syntax 2025-12-30 20:38:55 +05:30
chrisk325
2e79c34068
small fix 2025-12-30 19:49:19 +05:30
tapframe
c7e5696974 included limpv aar 2025-12-30 19:45:36 +05:30
tapframe
154d034e8f fixed type errors and syntax errors from merged PR. 2025-12-30 18:55:03 +05:30
tapframe
916eeaef4c Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-12-30 17:56:19 +05:30
Nayif
ad18e30de7
Merge pull request #321 from chrisk325/main 2025-12-30 17:46:50 +05:30
chrisk325
d4917fefc9
fetch addon provided logo first if it errors then fallback to tmdb 2025-12-30 17:20:33 +05:30
chrisk325
67b16c27f3
preserve addonId when creating obj thisweekepisode 2025-12-30 16:05:18 +05:30
chrisk325
f15fe80d3a
addon provided metadata for trakt this week 2025-12-30 15:52:30 +05:30
chrisk325
fbb44b14dd
addon provided metadata for appletv style carousel 2025-12-30 15:49:21 +05:30
chrisk325
103bcdd4cc
save addonId in watch progress 2025-12-30 15:34:11 +05:30
chrisk325
5e04ebca18
preserving addonId 2025-12-30 15:22:31 +05:30
chrisk325
b00812333a
added addonId to continue watching 2025-12-30 15:18:16 +05:30
chrisk325
9012bfdea9
addonId for hero section type carousel 2025-12-30 15:07:55 +05:30
chrisk325
9e5877173e
adding addonId for hero and continue watching 2025-12-30 15:02:01 +05:30
tapframe
b165c3223d fixed the implicit any type errors AppNavigator.tsx 2025-12-30 13:18:13 +05:30
tapframe
79213ad573 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-12-30 13:11:50 +05:30
Nayif
7df42903c6
Merge pull request #319 from chrisk325/main 2025-12-30 11:17:48 +05:30
chrisk325
42d4290acd
modify onpress handler to pass addonId 2025-12-30 04:19:19 +05:30
chrisk325
8c449215a6
attached addonId to search and discover 2025-12-30 04:12:32 +05:30
tapframe
183d30c720 removed config cache 2025-12-30 03:59:24 +05:30
tapframe
53a572ecac update env example 2025-12-30 03:10:17 +05:30
tapframe
4173786b12 more sdui control over settinsgcreen. 2025-12-30 02:49:10 +05:30
tapframe
44abb9f635 added video support to sdui server 2025-12-30 02:15:43 +05:30
tapframe
fd6e29a8ec Added granular control for TMDB Enrichment 2025-12-29 19:48:26 +05:30
tapframe
832e5368be settingscreen refactor 2025-12-29 15:05:50 +05:30
tapframe
e543d72879 ota server change 2025-12-29 13:44:44 +05:30
tapframe
b4b8648e25 embed stream fetch critical bug fix 2025-12-29 01:03:06 +05:30
tapframe
ff2bca18a5 discover screen optimization 2025-12-28 23:57:31 +05:30
tapframe
cf5cc2d8f9 discover screen init 2025-12-28 22:22:18 +05:30
tapframe
a30fa604d7 discover screen init 2025-12-28 22:10:40 +05:30
tapframe
18e90397d9 black spot fix during playback ksplayer 2025-12-28 19:35:01 +05:30
tapframe
97f558faf4 update discord url 2025-12-28 14:54:45 +05:30
tapframe
69dacb0ede update readme 2025-12-28 14:50:14 +05:30
tapframe
95e7d44035 addes scrolltotop by clicking tab navigation buttons 2025-12-28 13:29:33 +05:30
tapframe
d39a485d24 fixed watchprogress not resuming in exoplayer 2025-12-28 13:10:25 +05:30
tapframe
4f0a673f87 moved submodules to gitignore 2025-12-28 12:54:11 +05:30
tapframe
8618dcda74 rm cached submodules 2025-12-28 12:53:52 +05:30
tapframe
cc8be32cac updated index.html 2025-12-28 12:50:10 +05:30
tapframe
f65eb8fe7e removed submodules 2025-12-28 12:05:46 +05:30
tapframe
7c1a69d136 added ipa, updated nuvio-source.json 2025-12-28 12:02:24 +05:30
tapframe
7fdd4c4383 converted from sectionlist to flatflist (streamscreen) 2025-12-28 03:41:33 +05:30
tapframe
43cd14a025 chore(release): 1.3.2 2025-12-28 03:29:36 +05:30
tapframe
5662ee908d moved introdb base url to env 2025-12-28 03:13:17 +05:30
tapframe
de7fcb4d4d streamsceen scrollview changed to sectionlist 2025-12-28 02:59:26 +05:30
tapframe
f6dea03c05 users can now toggle between - auto/mpv exclusively 2025-12-28 02:21:01 +05:30
tapframe
6e2ddd2dda Added ExoPlayer as primary for better hardwre decoder support and MPV as fallback 2025-12-28 02:14:39 +05:30
tapframe
2d97cad1dc skip intro ui changes 2025-12-27 23:04:10 +05:30
tapframe
1d9a3b645b Added SkipIntro button 2025-12-27 22:53:05 +05:30
tapframe
a89c7f5c5c sub changes 2025-12-27 22:29:27 +05:30
tapframe
91af3a4021 improved stream fetching logic 2025-12-27 21:13:11 +05:30
tapframe
7a5ecd3009 addon first result in streamscreen 2025-12-27 19:15:10 +05:30
tapframe
aed4fed56f refactor streamscreen 2025-12-27 19:12:25 +05:30
tapframe
7885df341e changes 2025-12-27 18:42:41 +05:30
tapframe
2921b3eb1f added internal sub customization - mpv 2025-12-27 18:37:03 +05:30
tapframe
579b0a77b3 added hwdec options to choose from 2025-12-27 17:50:09 +05:30
tapframe
063f8a8c1b macos fullscreen fix 2025-12-26 14:22:13 +05:30
tapframe
985d01d5a9 ksplayer sub rendering fix 2025-12-26 12:32:33 +05:30
tapframe
9f461f7091 ksplayer sub rendering fix 2025-12-26 12:32:19 +05:30
tapframe
0b4db84f30 changed mpv hw to try "mediacode" first 2025-12-25 20:31:14 +05:30
tapframe
7e7804b6d4 improved parental guide UI 2025-12-25 14:22:12 +05:30
tapframe
eee6f81fca parental guide overlay init 2025-12-25 14:09:09 +05:30
tapframe
9375fab06c Changed to TraktService.getInstance().isAuthenticated() 2025-12-25 13:03:04 +05:30
Nayif
d2987ce0cc
Merge pull request #292 from AdityasahuX07/patch-14
Video player Ui changes
2025-12-25 12:46:25 +05:30
tapframe
a61c1e6456 Fix: Player orientation now correctly resets when exiting video player 2025-12-25 12:35:07 +05:30
tapframe
0a1e008d5f update readme 2025-12-24 23:22:37 +05:30
tapframe
7f9e9ff5db orientation fix after exiting player ios 2025-12-24 21:46:46 +05:30
tapframe
39498f78b7 removed dead code 2025-12-24 21:38:02 +05:30
tapframe
8588aca948 removed orphaned modules 2025-12-24 20:05:17 +05:30
Nayif
3f63461d45
Merge pull request #297 from tapframe/mpv
update nuvio-source.json
2025-12-24 20:03:10 +05:30
tapframe
f5e9a3977b update nuvio-source.json 2025-12-24 20:01:50 +05:30
Nayif
aa62cc78f0
Merge pull request #296 from tapframe/mpv
Mpv
2025-12-24 19:55:52 +05:30
tapframe
d6bb2869c5 removed orphaned submodules 2025-12-24 19:54:18 +05:30
AdityasahuX07
74764bbbe0
Merge branch 'main' into patch-14 2025-12-24 19:40:07 +05:30
Nayif
441e8d8656
Merge pull request #295 from tapframe/mpv
Mpv
2025-12-24 19:33:47 +05:30
tapframe
52dd075b6a bumped app version 2025-12-24 19:23:53 +05:30
tapframe
1821bf1230 changes 2025-12-24 19:22:00 +05:30
tapframe
ab720ddae7 responsiveness for sdui modal 2025-12-24 19:21:53 +05:30
tapframe
b4cecee191 .. 2025-12-24 19:05:57 +05:30
tapframe
614597d1bd SDUI fix 2025-12-24 19:05:14 +05:30
tapframe
0165b1f987 SDUI prod url init 2025-12-24 18:56:11 +05:30
tapframe
8b3a1b57bf SDUI modal init 2025-12-24 18:28:39 +05:30
tapframe
c421e46724 changes 2025-12-23 22:32:19 +05:30
tapframe
1f3b9413cd added hw/sw toggle for android 2025-12-23 21:55:46 +05:30
tapframe
6855a89792 fixed header issues 2025-12-23 21:31:10 +05:30
tapframe
811701ebae config added mpv files after prebuild 2025-12-23 17:48:52 +05:30
tapframe
18fa11fd88 added header support 2025-12-23 17:42:45 +05:30
tapframe
767fd2ff87 removed vlc lib 2025-12-23 16:42:41 +05:30
AdityasahuX07
68c5b09e3a
Change primary color to a lighter shade 2025-12-23 16:26:12 +05:30
AdityasahuX07
d2f9b7586a
Refactor SourcesModal component styling and layout
Refactor QualityBadge component for improved styling and readability. Update source selection UI for better user experience.
2025-12-23 15:24:02 +05:30
AdityasahuX07
4753b2a57a
Update EpisodeStreamsModal.tsx 2025-12-23 15:22:01 +05:30
AdityasahuX07
5119822c31
Refactor episode progress fetching and UI adjustments 2025-12-23 15:21:27 +05:30
AdityasahuX07
09d0483ee3
Update print statement from 'Hello' to 'Goodbye' 2025-12-23 15:20:23 +05:30
AdityasahuX07
034fd8a9aa
Refactor AudioTrackModal for better layout and animations
Updated the AudioTrackModal component to improve layout and animations.
2025-12-23 15:18:45 +05:30
AdityasahuX07
b3ec4e0c01
Video player Ui changes 2025-12-23 15:17:18 +05:30
tapframe
f0f71afd67 fixed custom subtitle rendering android 2025-12-23 15:16:26 +05:30
tapframe
3cea291901 fixed subtitle rendering, added aspect ratio support 2025-12-23 14:25:52 +05:30
tapframe
9504d48607 seek fix 2025-12-22 21:40:11 +05:30
tapframe
19438ff1d5 mpv init 2025-12-22 21:26:22 +05:30
tapframe
967b90b98e Error modal simplified for videoplayers 2025-12-22 16:06:52 +05:30
tapframe
0d6d69e0a8 refactor ksplayer 2025-12-22 13:58:16 +05:30
tapframe
a50f8de913 reafactor android videoplayer 2025-12-22 11:35:25 +05:30
tapframe
32df7d79ad Contributors update 2025-12-22 10:42:25 +05:30
tapframe
759215da8c onboarding screen UI update 2025-12-22 01:54:36 +05:30
tapframe
894469ae0e added torrentio configuration to debrid integration page 2025-12-22 01:15:01 +05:30
tapframe
79b0cfc990 consistent theming across player modals 2025-12-20 20:59:19 +05:30
tapframe
a8dfe30546 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-12-20 20:49:24 +05:30
tapframe
dda34b6982 Trakt scrobble big fix 2025-12-20 20:49:20 +05:30
Nayif
599e31c11f
Merge pull request #289 from tapframe/revert-283-patch-9
Revert "Update Ui of Subtitle selection tab made modern popup window"
2025-12-20 20:45:11 +05:30
Nayif
ffc4200b96
Revert "Update Ui of Subtitle selection tab made modern popup window" 2025-12-20 20:44:14 +05:30
Nayif
d23c48cc0c
Merge pull request #283 from AdityasahuX07/patch-9
Update Ui of Subtitle selection tab made modern popup window
2025-12-20 20:42:42 +05:30
Nayif
aaf0b498f8
Merge pull request #284 from AdityasahuX07/patch-10
Ui change of Audio track menu
2025-12-20 20:41:57 +05:30
Nayif
bda3732a83
Merge pull request #285 from AdityasahuX07/patch-11
Episode Modal Ui enhancement
2025-12-20 20:41:20 +05:30
tapframe
b2a9708856 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-12-20 19:37:05 +05:30
tapframe
6e3f79a231 updated contribution page to show special mentions 2025-12-20 19:36:54 +05:30
Nayif
395b01d22b
Merge pull request #268 from AdityasahuX07/patch-5
It makes Titles name hide and show for Library posters via toggle in setting.
2025-12-20 13:14:40 +05:30
tapframe
d9aaa045fd webhook test 2025-12-20 12:41:37 +05:30
AdityasahuX07
d6f2cb7592
Adjust audio track modal maximum height
Increased the maximum height of the audio track modal to better utilize screen space.
2025-12-20 11:02:48 +05:30
tapframe
5804959ddf alert orientation fix 2025-12-19 23:48:26 +05:30
AdityasahuX07
af572f8b29
Refactor renderItem for cleaner syntax 2025-12-19 23:44:17 +05:30
AdityasahuX07
104d0f4516
Merge branch 'main' into patch-5 2025-12-19 23:39:40 +05:30
AdityasahuX07
b061c1f756
Episode Modal Ui enhancement 2025-12-19 23:28:35 +05:30
AdityasahuX07
89f99dba85
Ui change of Audio track menu 2025-12-19 23:27:04 +05:30
AdityasahuX07
ea25526ded
Update Ui of Subtitle selection tab made modern popup window 2025-12-19 19:45:46 +05:30
tapframe
2d5b1263b5 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-12-18 00:15:43 +05:30
Nayif
371aacd734
Merge pull request #279 from AdityasahuX07/patch-6
Modern UI for dynamic volume and brightness overlays and fix brightness control does not work on Android
2025-12-18 00:15:26 +05:30
tapframe
af1b0b03d8 Forces reset of the fetch guard when lastUpdate changes 2025-12-18 00:14:49 +05:30
tapframe
baee619d73 herocarousal improvements 2025-12-18 00:10:06 +05:30
tapframe
b3f5ba4260 continue watching crash fix 2025-12-17 23:27:26 +05:30
tapframe
7ec9c3591e brightness android perm fix 2025-12-17 23:21:50 +05:30
tapframe
407514301b trakt sync now bug fox 2025-12-17 21:53:21 +05:30
AdityasahuX07
35abf985a9
Modern UI for dynamic volume and brightness overlays and fix brightness control not work on Android
Added dynamic volume and brightness icons with overlays for user feedback. Updated gesture handling for improved interaction.
2025-12-17 13:27:07 +05:30
tapframe
374bc8e2d3 TS error fix 2025-12-17 00:12:43 +05:30
tapframe
48300bf767 trakt scrobble improvements 2025-12-16 16:00:23 +05:30
tapframe
78553d8323 toggle for tuning off update alerts 2025-12-16 15:47:56 +05:30
tapframe
8c0b47975c toggle for enalbling/disablingposter label in catalogscreen 2025-12-16 15:38:51 +05:30
tapframe
601a4a0f1d landscape poster support 2025-12-16 15:38:29 +05:30
tapframe
59cb902658 revamped alert UI 2025-12-16 15:24:32 +05:30
tapframe
d876b7618c added episode/season mark as watched feature syncing locally/trakt. 2025-12-16 15:17:56 +05:30
tapframe
60cdf9fe86 added filter for catalogs 2025-12-15 15:37:04 +05:30
tapframe
619333c328 1.2.11 26 2025-12-15 03:11:26 +05:30
tapframe
80d75a528f improved catalogfetching logic 2025-12-15 02:10:23 +05:30
tapframe
4ac45a041a imrpoved metadataloadingscreen UI 2025-12-15 02:05:52 +05:30
tapframe
51064a65b2 metascreen abruption fix 2025-12-15 01:55:32 +05:30
tapframe
2e61617f83 render loop fix usewatchprogress 2025-12-15 01:46:31 +05:30
tapframe
dbbee06a55 bug fixes android and ios 2025-12-15 01:36:10 +05:30
tapframe
181cdaecb5 dependancy update 2025-12-15 00:49:15 +05:30
tapframe
c3fbe31fd4 dependency update 2025-12-15 00:49:00 +05:30
tapframe
f05366ae45 some sentry fixes maximum update limti reached 2025-12-14 23:50:00 +05:30
AdityasahuX07
1c53e65b26
Refactor LibraryScreen to include showTitles prop 2025-12-14 15:31:10 +05:30
tapframe
c01528b309 embedded streams fix 2025-12-14 14:10:15 +05:30
AdityasahuX07
53dd480231
Merge branch 'main' into patch-5 2025-12-14 13:47:20 +05:30
tapframe
3c35b99759 continue watching improvements. testflight link added to readme 2025-12-13 21:09:09 +05:30
tapframe
8a34bf6678 update privacy policy 2025-12-12 14:12:01 +05:30
tapframe
8b5a707daa fixed a continue watching bug where removed content won't reappearing even after watching it again 2025-12-11 18:56:51 +05:30
tapframe
bf22e559c5 header padding fix 2025-12-11 16:10:59 +05:30
tapframe
9e7543df02 header refactor 2025-12-11 15:55:52 +05:30
Nayif
52065a1462
Merge pull request #270 from AdityasahuX07/patch-7
Enhance AppleTVHero component functionality by Adding Play and Save to library Button.
2025-12-11 15:02:49 +05:30
tapframe
01953af578 added external player selection for downloads 2025-12-11 15:00:15 +05:30
tapframe
e160bf6fe0 settingscreen UI changes 2025-12-11 14:50:04 +05:30
AdityasahuX07
ff9d2c52be
Resume now working.
Integrate watch progress for playback management
2025-12-11 14:47:53 +05:30
tapframe
3801e80dd9 streamscreen to player refactor 2025-12-11 14:42:05 +05:30
AdityasahuX07
1307a71b4c
Enhance AppleTVHero component functionality by Adding Play and Save to library Button.
Added play and save button.
On tapping logo of media opens detail page added (for Info button)

Fixes issue #244
2025-12-10 22:47:34 +05:30
AdityasahuX07
2c9072299e
Add Show/Hide Titles for Library.
The Show/Hide Titles for Library because when the name of movie/show is large then it create uneven gap between library which not look good.

And also If anyone want can toggle keep on for show titles in settings.
2025-12-09 23:17:19 +05:30
tapframe
6bdc998496 custom alert orientation bug fix 2025-12-09 14:50:00 +05:30
tapframe
1b990aa6ec metascreen optimization 2025-12-09 14:32:33 +05:30
tapframe
057c709b41 trakt comment fix 2025-12-09 14:24:49 +05:30
tapframe
d457db5053 featured content fix 2025-12-09 12:57:14 +05:30
Nayif
22d8fe311a
Merge pull request #259 from AdityasahuX07/patch-3
Change libraryBadge position to its correct location only in search tab.
2025-12-05 21:38:25 +05:30
Nayif
e9796ee966
Merge pull request #260 from AdityasahuX07/patch-4
Fix for filter tabs in Library UI element cropped off in mobile devices.
2025-12-05 21:38:13 +05:30
AdityasahuX07
6c201e285a
Fix for filter tabs in Library UI element cropped off in mobile devices.
Fixes #135
2025-12-03 15:41:23 +05:30
AdityasahuX07
6c326e1378
Change libraryBadge position to its correct location.
The bug batter explained in #172

Fixes issue #172
2025-12-03 13:47:47 +05:30
tapframe
725c8aa9b7 buffer change ksplayer 2025-12-03 01:22:44 +05:30
Nayif
7a2f340c22
Merge pull request #257 from AdityasahuX07/patch-1
ShowRatingScreen page singular Season logic and heading chopped off fix.
2025-12-01 23:09:01 +05:30
AdityasahuX07
c4af2e8eea
ShowRatingScreen page singular Season logic and heading chopped off fix.
logic for 1 Seasons to 1 Season modified.
Heading for grid chopped off because Episodes is too long word changes to EPs for batter UI experience.

Fixes #159
2025-12-01 20:45:00 +05:30
tapframe
63a7051b86 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-11-26 23:48:24 +05:30
tapframe
9f75bfdeed navbar changes android 2025-11-26 23:48:05 +05:30
Nayif
083da01463
Merge pull request #242 from aayushrautela/android-nav-bar-fix
Fix nav bar being always visible on android
2025-11-26 23:27:44 +05:30
Nayif
14980f2bfd
Merge branch 'main' into android-nav-bar-fix 2025-11-26 23:26:15 +05:30
tapframe
6c08b459bf ui changes 2025-11-26 01:09:30 +05:30
tapframe
6d1ba14ab4 debrid integration. Torbox 2025-11-26 01:01:00 +05:30
tapframe
bbf035ebae changes 2025-11-26 00:15:32 +05:30
tapframe
03aa45a0b0 1.2.10 25 2025-11-25 02:31:48 +05:30
tapframe
8d918cdf5e downloads notif fix 2025-11-25 02:10:29 +05:30
tapframe
2494d45e8f slight Ui changes this week section 2025-11-25 02:05:11 +05:30
tapframe
011f480fc1 simplified thisweeeksection cards 2025-11-25 01:57:50 +05:30
tapframe
771765f32b apple hero drag changes 2025-11-25 01:48:50 +05:30
tapframe
e9a331dbd5 ksplayer pause fix 2025-11-25 01:44:34 +05:30
tapframe
348cbf86d8 android player wordsplitting fix 2025-11-25 01:17:23 +05:30
tapframe
ecaaaa66ed ksplayer word splitting fix 2025-11-25 01:15:41 +05:30
tapframe
0ab85ec870 thisweekimprovements 2025-11-25 00:56:19 +05:30
tapframe
a27ee4ac56 trakt test 2025-11-25 00:50:47 +05:30
tapframe
56234daf82 gradle fix 2025-11-24 23:25:03 +05:30
tapframe
668099b542 hdr issue fix ios 2025-11-21 16:09:54 +05:30
Aayush Rautela
a4725c24bc Add immersive mode support to AndroidVideoPlayer component
(cherry picked from commit b6eaf25e8905bdf66d4396a78bf6485a46f3162a)
2025-11-16 22:22:48 +01:00
tapframe
1a1fdb6fdf 1.2.9 24 2025-11-16 22:04:03 +05:30
tapframe
0bb0df2a60 flashlist to flatlist 2025-11-16 21:06:35 +05:30
tapframe
5163031869 changes 2025-11-16 19:42:27 +05:30
tapframe
13523fbbe4 trakt episode marking bug fix 2025-11-16 17:55:38 +05:30
tapframe
e9b38db8b4 catalog capping fix 2025-11-16 17:26:37 +05:30
tapframe
eeed1c7492 adjust z-index 2025-11-16 17:11:43 +05:30
tapframe
655ddbeb42 changes 2025-11-16 16:53:54 +05:30
tapframe
69ac2d64ad bug fix 2025-11-16 16:07:56 +05:30
tapframe
34f110f16a player UI update 2025-11-16 15:46:46 +05:30
tapframe
09e35d5a0c plugin fix 2025-11-10 23:11:42 +05:30
tapframe
41081118ef fix some type errors 2025-11-10 17:32:13 +05:30
tapframe
1ca4e275de apple hero changes 2025-11-10 15:23:55 +05:30
tapframe
c9c4a80387 1.2.8 23 2025-11-09 21:41:26 +05:30
tapframe
3d0ac0f9f4 1.2.8 23 2025-11-09 21:41:09 +05:30
tapframe
ffaac958c4 fixes 2025-11-09 20:18:35 +05:30
tapframe
f2f503b9ab icon minor change 2025-11-09 19:17:37 +05:30
tapframe
117306bd66 android player fabric detatch fix 2025-11-09 19:02:27 +05:30
tapframe
76b28d2a2c trailer section ui changes 2025-11-09 19:02:13 +05:30
tapframe
41ba4ac12c downloads improvements 2025-11-09 14:09:48 +05:30
tapframe
54f85e9689 trailer section card ui changes 2025-11-09 13:11:40 +05:30
tapframe
aabf3e18ef hero height change 2025-11-09 11:55:14 +05:30
tapframe
daafdeedc2 ui changes 2025-11-08 15:56:22 +05:30
tapframe
426e936740 parallax added 2025-11-08 14:14:33 +05:30
tapframe
aa0c338c05 trailer bug fixes 2025-11-08 13:03:20 +05:30
tapframe
ea7f6bf7d7 hero changes 2025-11-08 11:54:43 +05:30
tapframe
2c524020af changes 2025-11-08 03:05:09 +05:30
tapframe
6331c43f68 updates for trailer 2025-11-08 02:58:01 +05:30
tapframe
a6168a7d64 ui changes 2025-11-08 02:29:04 +05:30
tapframe
1c083f836b changes 2025-11-08 02:07:31 +05:30
tapframe
1756c28ed9 ui changes 2025-11-08 01:27:09 +05:30
tapframe
91a42e6e29 ui fix 2025-11-05 20:08:12 +05:30
tapframe
0e14d257ad carousal now active for tablets 2025-11-05 19:40:48 +05:30
tapframe
ba72d8bca2 player optimization 2025-11-05 18:48:38 +05:30
tapframe
19420e901e revert legacy ui 2025-11-05 14:48:21 +05:30
tapframe
7aa66aff74 improved hero 2025-11-05 14:10:58 +05:30
tapframe
5c3c5717ab changes 2025-11-05 14:00:34 +05:30
tapframe
a5a66a5e8c changes 2025-11-05 13:45:23 +05:30
tapframe
b17b492741 LEGACY hero carousal init 2025-11-05 13:33:12 +05:30
tapframe
5fe1db24c1 sub bg fix 2025-11-04 20:47:03 +05:30
tapframe
2ba7c3c057 catalog parallel fetching and subtitle backgound fix 2025-11-03 22:33:33 +05:30
tapframe
8e34fbb124 crash fix 2025-11-03 15:36:26 +05:30
tapframe
d971d9f71f UI changes 2025-11-02 22:30:15 +05:30
tapframe
e033352752 new tmdb ratings api 2025-11-02 22:11:39 +05:30
tapframe
96f79f7c72 ksplayer optimizations 2025-11-02 18:33:05 +05:30
tapframe
80cdc98902 svg rendering fix 2025-11-02 16:57:21 +05:30
tapframe
d6af98c6d7 orientation lock removed 2025-11-02 16:47:18 +05:30
tapframe
5a3ebe6c01 ui changes 2025-10-30 23:28:24 +05:30
tapframe
84b8cb7817 upnext button UI changes 2025-10-30 23:26:41 +05:30
tapframe
33d13c74d3 playback control optimization 2025-10-30 18:33:57 +05:30
tapframe
6fa53151fb update tmdb metadata handling 2025-10-30 11:44:53 +05:30
tapframe
4261891a35 sub alignment changes 2025-10-28 01:20:06 +05:30
tapframe
a0a138081d users can now choose between what to backup 2025-10-28 01:02:33 +05:30
tapframe
f13266b1fc ui fix 2025-10-28 00:26:40 +05:30
tapframe
1287d7f6a0 loading overlay re renderfix 2025-10-28 00:12:40 +05:30
tapframe
e437a23029 improved hero banner and logo fallback 2025-10-27 20:18:33 +05:30
tapframe
b71314b8f6 subtitle improvements 2025-10-27 19:35:37 +05:30
tapframe
d9fcc085a6 moviecollection fix 2025-10-27 14:05:13 +05:30
tapframe
dd542091e1 ui fix 2025-10-26 21:06:08 +05:30
tapframe
85cb950fa8 episode modal init 2025-10-26 21:02:39 +05:30
tapframe
09e25738a8 bottomnav behaviour fix 2025-10-26 20:25:06 +05:30
tapframe
9452b01e9c improved source modal behaviour 2025-10-26 20:10:17 +05:30
tapframe
f24d889ee7 update source json 2025-10-26 14:44:43 +05:30
tapframe
d8bf8dd2ae 1.2.7 22 2025-10-26 14:12:25 +05:30
tapframe
90233cd299 repositioned hero action button layout 2025-10-26 14:10:16 +05:30
tapframe
fdbfb81d25 added tmdb response caching 2025-10-26 13:57:55 +05:30
tapframe
e1634195be addded playback speed to ksplayer. 2025-10-26 13:45:15 +05:30
tapframe
c317e8562e library critical bug fix 2025-10-26 13:32:40 +05:30
tapframe
49b814a36d complete migration to mmkv 2025-10-26 12:42:34 +05:30
tapframe
e5e77508b8 improved library screen layout 2025-10-26 01:15:33 +05:30
tapframe
fff8e9e8cd value update 2025-10-26 00:26:43 +05:30
tapframe
814ee3eef8 streamscreen ui update andorid 2025-10-26 00:23:59 +05:30
tapframe
be2435db27 metasceen update 2025-10-26 00:20:38 +05:30
tapframe
c54ea1d591 KSPlayer url encoding logic improvements 2025-10-25 18:17:55 +05:30
tapframe
24c0bb5247 useDominant colour update 2025-10-25 02:31:52 +05:30
tapframe
e84a8a58c7 metadacrash fix 2025-10-25 01:19:34 +05:30
tapframe
94e165f0b0 improved player volume/brightness gesture sensitivity 2025-10-24 22:35:42 +05:30
tapframe
ed3aef88ff Added subtitlemodal 2025-10-24 21:54:30 +05:30
tapframe
83df75915e added hold to boost speed android 2025-10-24 21:38:40 +05:30
tapframe
7c4dec9e7a update readme 2025-10-24 21:23:50 +05:30
tapframe
a0eb6ca6dc update readme 2025-10-24 21:22:40 +05:30
tapframe
d6216d95db fixed order of library screen contents 2025-10-24 21:12:36 +05:30
tapframe
a0e5332897 updated collectionscreen to display movies by release order 2025-10-24 21:09:06 +05:30
tapframe
23bdd9a5ca update default subtitesize absed on screen width 2025-10-24 21:07:40 +05:30
tapframe
2b2b838745 update defaut subtitle size 2025-10-24 21:06:18 +05:30
tapframe
a5feeb40a7 added playback speed controls KSPlayer(iOS) 2025-10-24 21:01:19 +05:30
tapframe
1ba0a49778 added vlc playback speed control 2025-10-24 20:47:14 +05:30
tapframe
665ff06ad1 trailer scroll fix 2025-10-24 20:07:26 +05:30
tapframe
b81435be29 update popup for android fix 2025-10-24 19:45:15 +05:30
tapframe
4daab74e27 added contributors page 2025-10-24 02:14:50 +05:30
tapframe
a7fbd567fd Added collections ection 2025-10-23 17:31:49 +05:30
tapframe
f90752bdb7 Streamscreen new changes update 2025-10-23 14:51:41 +05:30
tapframe
c5590639b1 revert 2025-10-23 13:44:08 +05:30
tapframe
098ab73ba1 anim changes ios ksplayer 2025-10-23 13:26:43 +05:30
tapframe
060b0b927b episode poster fix 2025-10-23 13:26:31 +05:30
tapframe
786e06b27f episodes not fetching backdrop fix tablet layout 2025-10-23 01:57:04 +05:30
tapframe
ef1c34a9c0 improved animations 2025-10-23 00:38:45 +05:30
tapframe
b97481f2d9 refactor streamscreen 2025-10-23 00:34:08 +05:30
tapframe
8d74b7e7ce changes 2025-10-22 23:55:45 +05:30
tapframe
635c97b1ad more improvements 2025-10-22 23:46:50 +05:30
tapframe
673c96c917 new streamscreen layout for tabs init 2025-10-22 23:36:37 +05:30
tapframe
15fc49d84d cleanup repo 2025-10-22 22:24:27 +05:30
tapframe
54cfd194f1 added yml for sponsoring 2025-10-22 22:22:18 +05:30
tapframe
be561c6d9f adjusted android bottom tab height 2025-10-22 17:25:12 +05:30
tapframe
dc8c27dfc4 trailer service improvements 2025-10-22 17:17:20 +05:30
tapframe
ce7f92b540 Custom TTL for Stream cache 2025-10-21 23:34:35 +05:30
tapframe
f0271cd395 orientation fix 2025-10-21 23:14:51 +05:30
tapframe
2a4c076854 fixed subtitle not fetching on cahced strream link 2025-10-21 22:17:42 +05:30
tapframe
c852c56231 orientation optimization 2025-10-21 17:49:49 +05:30
tapframe
614ffc12c0 1.2.6 21 2025-10-21 16:55:53 +05:30
tapframe
d9b2545cdd streamscreen UI fix 2025-10-21 16:30:39 +05:30
tapframe
1ae6b4f108 continue watching changes 2025-10-21 16:09:35 +05:30
tapframe
373efa0564 Implemented caching stream links for faster playback. 2025-10-21 14:53:01 +05:30
tapframe
6c464abdd4 cleanup 2025-10-21 14:18:24 +05:30
tapframe
5d5d77ae1b sizing fix for playercontrols. 2025-10-21 14:12:20 +05:30
tapframe
b2cfc19e96
Merge pull request #202 from qarqun/main
Responsive Video Player Controls with animations
2025-10-21 13:58:23 +05:30
tapframe
e40e8bb7c5
Merge branch 'main' into main 2025-10-21 13:58:00 +05:30
tapframe
a3158be2bd icon change, and cinemeta removal fix 2025-10-21 13:29:17 +05:30
Qarqun
e305dee777 feat: Add responsive video player controls with animations
- Implement responsive sizing for all controls based on screen width (phone/tablet support)
- Add smooth crossfade animation for play/pause button transitions
- Add arc sweep and slide animations for seek buttons (+10/-10s)
- Add touch feedback with semi-transparent circle flash on tap
2025-10-20 19:13:46 +08:00
tapframe
415efd4e03 asepct ratio fix 2025-10-20 14:45:48 +05:30
tapframe
f027788266 ksplayer subtitle init 2025-10-20 14:08:23 +05:30
qarqun
23acda3167
Merge branch 'tapframe:main' into main 2025-10-20 15:35:59 +08:00
tapframe
a8b4dc5a01 airplay ios 2025-10-20 02:26:42 +05:30
tapframe
fd4efe6c7f catalogscreen layout fix 2025-10-19 20:42:41 +05:30
tapframe
68340eac9e update morelikethis sizing 2025-10-19 20:34:37 +05:30
tapframe
175d47f71f adaptive sizing for playercontrols,seriescontent,and commentsection 2025-10-19 20:30:24 +05:30
tapframe
0b764412b2 homescreen imrpovements for tablet screens 2025-10-19 20:08:08 +05:30
tapframe
f7c0c670d7 metadatascreen tablet layout overhaul 2025-10-19 20:08:08 +05:30
tapframe
18bd6ff3ca macos fullscreen player issue fix 2025-10-19 20:08:08 +05:30
tapframe
ac5326ba3f hero Ui changes 2025-10-19 20:08:08 +05:30
tapframe
c5af56537b
Merge pull request #197 from aazz180/main 2025-10-19 18:03:59 +05:30
aazz180
17cdd503e9
Fix the live container 2025-10-19 13:26:55 +01:00
tapframe
688950d0c2 changes 2025-10-19 15:41:02 +05:30
tapframe
eb3082cddb ui updates trakt 2025-10-19 15:37:30 +05:30
tapframe
32bec08f30 ui changes 2025-10-19 15:19:08 +05:30
tapframe
a7f850d577 trakt wathclist integration test 2025-10-19 14:20:38 +05:30
tapframe
08f356cfa4 trakt scrobble optimization 2025-10-19 13:59:40 +05:30
qarqun
6e975ffe26
Merge branch 'tapframe:main' into main 2025-10-19 15:42:24 +08:00
tapframe
64981dd110 clean 2025-10-19 12:51:07 +05:30
tapframe
b5156bcc69 cleanup 2025-10-19 12:50:14 +05:30
tapframe
9ab99a1225 ios homescreen layout shift fix 2025-10-19 12:49:10 +05:30
tapframe
d5edec025c Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-10-19 12:20:56 +05:30
tapframe
ef43463b99 calender screen fix 2025-10-19 12:19:28 +05:30
qarqun
ca2e95e6f4
Merge branch 'tapframe:main' into main 2025-10-19 12:04:34 +08:00
tapframe
559c50fa87
Merge pull request #193 from aazz180/main 2025-10-19 08:54:45 +05:30
aazz180
2ca0a05636
Add Infuse Livecontainer player option 2025-10-18 21:37:11 +01:00
aazz180
363de47313
Update StreamsScreen.tsx 2025-10-18 21:36:25 +01:00
aazz180
bdb2803371
Update StreamsScreen.tsx 2025-10-18 21:35:59 +01:00
aazz180
6eae438300
Update useSettings.ts 2025-10-18 21:35:28 +01:00
tapframe
707ceb711a layout anim 2025-10-18 23:34:43 +05:30
tapframe
024646579e animate catalogsec 2025-10-18 23:32:57 +05:30
Qarqun
f895428e3d Merge branch 'main' of https://github.com/qarqun/NuvioStreaming 2025-10-19 01:21:48 +08:00
Qarqun
698456c205 refactor(player): enhance video controls with modern streaming style
- Moved inline styles to playerStyles.ts for better maintainability
- Redesigned player controls for better user experience:
  - Enhanced skip buttons with rotate animations and semi-transparent backgrounds
  - Enlarged center play/pause button with improved visibility
  - Optimized touch targets and spacing for better interaction
  - Standardized button dimensions and layout

Files changed:
- src/components/player/controls/PlayerControls.tsx
- src/components/player/utils/playerStyles.ts
2025-10-19 01:11:08 +08:00
tapframe
43cf907a2e icon update 2025-10-18 20:53:42 +05:30
tapframe
0a04ba5743 cache changes 2025-10-18 14:58:22 +05:30
tapframe
8b1a40d2e2 ui changes 2025-10-18 13:22:34 +05:30
tapframe
51ae0784cf flashlist update 2025-10-18 12:09:22 +05:30
tapframe
efa5d3f629 fastimage api bug fix 2025-10-18 00:41:32 +05:30
tapframe
fd5861026d floating header logo fetch fix 2025-10-17 23:41:27 +05:30
tapframe
1535ef9aac trailer improvements 2025-10-17 23:19:55 +05:30
tapframe
bb6f1f32a0 anim changes 2025-10-17 22:18:17 +05:30
tapframe
3effdee5c0 optimzed perf 2025-10-17 22:09:42 +05:30
tapframe
bf15c5fb45 ui change 2025-10-17 22:04:28 +05:30
tapframe
5c3ba9e0d8 parallax on hero 2025-10-17 21:54:02 +05:30
tapframe
ce0b39d48b hero carousal anim changes 2025-10-17 21:44:24 +05:30
tapframe
71e3498876 ui fix 2025-10-17 21:29:15 +05:30
tapframe
e8ec05bd51 rn video init for trailers 2025-10-17 20:35:48 +05:30
tapframe
2303c32940 ui changes 2025-10-17 20:32:46 +05:30
tapframe
e9d54bf0d6 trailer section init 2025-10-17 20:18:34 +05:30
tapframe
e435a68aea UI changes 2025-10-17 15:00:36 +05:30
tapframe
d55143e6fb changes 2025-10-16 12:21:05 +05:30
tapframe
e2719c373d improved vlc behaviour 2025-10-16 01:53:30 +05:30
tapframe
b1e9f9b3f8 ui fix 2025-10-15 23:43:06 +05:30
tapframe
2d512053a8 1.2.5 20 2025-10-15 23:27:59 +05:30
tapframe
6cfddb68bb ksplayer changes 2025-10-15 23:16:14 +05:30
tapframe
12d04e84d8 icon changes 2025-10-15 22:33:41 +05:30
tapframe
829e569ccd ui changes 2025-10-15 21:54:02 +05:30
tapframe
7e300e8789 changes 2025-10-15 19:56:01 +05:30
tapframe
6a6a93aec4 glassview init 2025-10-15 16:12:55 +05:30
tapframe
13cba764cc updated readme 2025-10-15 13:25:24 +05:30
tapframe
5263005e92 update readme 2025-10-15 13:23:04 +05:30
tapframe
1a12a6c10c update readme 2025-10-15 13:21:34 +05:30
tapframe
0b134f9266 update readme 2025-10-15 13:18:34 +05:30
tapframe
07233ba9ae update expo sdk to 54 2025-10-15 02:24:20 +05:30
tapframe
92aaae40f6 test 2025-10-15 01:51:57 +05:30
tapframe
faeeaf5ecf test 2025-10-14 22:34:20 +05:30
tapframe
edfbc2d937 icon updates 2025-10-14 14:27:00 +05:30
tapframe
ab8f870e73 UI changes 2025-10-14 13:50:22 +05:30
tapframe
2a5798c107 ui fix streamscreen 2025-10-14 12:16:15 +05:30
tapframe
92441110bf ui changes 2025-10-14 02:52:07 +05:30
tapframe
1a9d59e804 UI changes 2025-10-14 02:43:21 +05:30
tapframe
9e7b9c5fe4 improved downloads 2025-10-14 01:15:37 +05:30
tapframe
615172d29c changes 2025-10-14 00:51:03 +05:30
tapframe
5671323bc1 changes 2025-10-14 00:41:43 +05:30
tapframe
c0263eb3c3 changes 2025-10-14 00:20:54 +05:30
tapframe
a5a5358f7b UI changes tmdb logo 2025-10-13 16:04:25 +05:30
tapframe
2599fd85d7 UI fix 2025-10-13 14:51:04 +05:30
tapframe
84a308e5dc UI changes 2025-10-13 14:01:05 +05:30
tapframe
569d50f25b ui changes 2025-10-13 13:52:25 +05:30
tapframe
93221b9760 added backdrop to set as default hero thumbnail 2025-10-13 13:45:40 +05:30
tapframe
81a7f63782 added backdrop gallery 2025-10-13 13:36:50 +05:30
tapframe
1c7fd533c7 added more details for tvshows/movies 2025-10-13 13:23:19 +05:30
tapframe
a0d9420be2 network logic 2025-10-13 13:16:38 +05:30
tapframe
544dc8b639 import update 2025-10-13 12:28:36 +05:30
tapframe
68f02bbc80 import update 2025-10-13 12:28:24 +05:30
tapframe
1660b0a75b clear 2025-10-13 12:15:59 +05:30
tapframe
d691189973 fixed backdrop zoom in laoding overlay. 2025-10-13 12:15:26 +05:30
tapframe
03da6c9a0c push 2025-10-13 01:48:15 +05:30
tapframe
46b0ed44bd sub timing adjust 2025-10-12 12:05:22 +05:30
tapframe
362000d6df sub default changes 2025-10-12 11:21:51 +05:30
tapframe
fb8b65e61b trailerplayer stuck after finishing fix 2025-10-12 10:44:13 +05:30
tapframe
03bded3775 1.2.4 2025-10-12 03:09:30 +05:30
tapframe
f605dd3d49 changes CP 2025-10-12 03:02:27 +05:30
tapframe
303c4c909e update dependencies 2025-10-12 00:32:18 +05:30
tapframe
8178dfc215 removed aggressive cache cleaning 2025-10-12 00:27:30 +05:30
tapframe
714226b6a5 push 2025-10-12 00:09:24 +05:30
tapframe
383ac95e90 migration from expo-image to RN Fast-image 2025-10-12 00:09:07 +05:30
tapframe
67232f5a8e ratingscreen UI fix 2025-10-11 23:34:45 +05:30
tapframe
d399c8f774 dynamic type detection 2025-10-11 01:25:43 +05:30
tapframe
4e3c9c208f type:tv addon detection fix 2025-10-11 01:20:26 +05:30
tapframe
fb316d9f37 added langauge filtering for plugnins 2025-10-11 01:06:37 +05:30
tapframe
0c14d8641d some UI fix 2025-10-11 00:16:07 +05:30
tapframe
7dceb23e3d some addon improvements 2025-10-10 23:42:28 +05:30
tapframe
704c642a8f tablet padding changes 2025-10-09 16:16:26 +05:30
tapframe
230afd7414 update image caching 2025-10-09 12:40:19 +05:30
tapframe
f146f6a312 update aimodel 2025-10-09 11:12:49 +05:30
tapframe
69d9885e30 changes 2025-10-08 17:37:46 +05:30
tapframe
ea3fe35790 fixes 2025-10-08 17:24:14 +05:30
tapframe
a67c34f8f6 fixes 2025-10-08 16:57:31 +05:30
tapframe
b5b61d05f8 ui changes 2025-10-08 16:53:56 +05:30
tapframe
581e912d4c multiple addon seach func 2025-10-08 16:31:07 +05:30
tapframe
f31942efdf UI fix 2025-10-08 13:47:56 +05:30
tapframe
238f08192f some tmdb logo fetching logic changes 2025-10-08 13:39:49 +05:30
tapframe
42c236e235 removed harcorded metahub 2025-10-08 12:50:32 +05:30
tapframe
14163513e3 some changes 2025-10-08 11:53:12 +05:30
tapframe
563208689b some addon id prefix detection improvemets 2025-10-08 11:39:40 +05:30
tapframe
106461b2b2 ui fix 2025-10-06 20:34:59 +05:30
tapframe
0f5fbdf296 trakt improvements 2025-10-06 20:32:18 +05:30
tapframe
cfa6bb8689 dropped globalcache 2025-10-05 23:49:04 +05:30
tapframe
ec23dcc3cb ui changes 2025-10-05 23:45:30 +05:30
tapframe
13d72338a5 trakt scrobble imrpovements 2025-10-05 22:59:40 +05:30
tapframe
25988bdb7b UI changes - removed VIA [provider] from player loading overlay 2025-10-05 22:45:27 +05:30
tapframe
0a840b1cb0 UI changes 2025-10-05 20:33:51 +05:30
tapframe
ce292ce9d3 UI changes 2025-10-05 20:28:04 +05:30
tapframe
90ab5e6577 fixed scrollview comment modal 2025-10-05 20:23:21 +05:30
tapframe
b15b569fce ui changes 2025-10-05 20:00:22 +05:30
tapframe
15ab70b524 UI changes 2025-10-05 19:58:24 +05:30
tapframe
6db159e944 update trakt comment 2025-10-05 19:44:16 +05:30
tapframe
35d3096ce4 streamscreen fetch issue fix 2025-10-05 18:51:13 +05:30
tapframe
cc2e0308d7 trakt comment added 2025-10-05 18:40:06 +05:30
tapframe
ca52a81141 some ui changes 2025-10-05 17:44:31 +05:30
tapframe
4f1b8103d0 1.2.3 18 2025-10-05 00:20:26 +05:30
tapframe
71487fce59 trakt list sorting order fix 2025-10-04 23:58:24 +05:30
tapframe
ff1b406c48 update app v 2025-10-04 22:06:56 +05:30
tapframe
61418186b2 Merge branch 'main' of https://github.com/tapframe/NuvioStreaming 2025-10-04 22:06:28 +05:30
tapframe
9d54ec44e4
Merge pull request #164 from CrissZollo/feature-playback-speed
Feature playback speed
2025-10-04 22:06:19 +05:30
tapframe
60e27da57d local backup improvements 2025-10-04 21:27:52 +05:30
CrissZollo
5668d40bc1 Added current speed indicator 2025-10-04 17:48:05 +02:00
CrissZollo
33720c5079 Added functionality to set playbackspeed in exoPlayer 2025-10-04 17:48:05 +02:00
tapframe
88313e6d06 changes 2025-10-04 21:01:02 +05:30
tapframe
6d4edabb46
Merge pull request #163 from CrissZollo/fix-timeline-time
Timeline corrections
2025-10-04 20:29:29 +05:30
tapframe
bfacc4a1ee local backup restore feature 2025-10-04 20:29:05 +05:30
Christoffer Kronblad
f72404e22a
Merge branch 'tapframe:main' into fix-timeline-time 2025-10-04 16:22:21 +02:00
CrissZollo
340d109e72 Increasing gap for metadata by 50% 2025-10-04 16:21:37 +02:00
tapframe
87aa913f5f update pluginscreen UI 2025-10-04 17:16:16 +05:30
tapframe
5a22ab54fb improved caching behaviour 2025-10-04 17:07:30 +05:30
tapframe
90f99985a0 localscrapers caching 2025-10-04 16:51:51 +05:30
CrissZollo
6c8502d8fe removed comment 2025-10-04 12:57:53 +02:00
CrissZollo
64c2129b1d Fixes some logic to runtime calculations format 2025-10-04 12:52:02 +02:00
tapframe
7a64851256 dedup fix streamscreen 2025-10-03 17:17:17 +05:30
tapframe
c358c794ec dedup fix localscraper 2025-10-03 16:56:58 +05:30
tapframe
028c6d2823 increased streamscreen link fetching timeout 2025-10-01 19:31:59 +05:30
tapframe
96da369f62 improved url encodng logic for ios 2025-10-01 12:09:44 +05:30
tapframe
43d4db022c
Merge pull request #157 from CrissZollo/fix-timeline-time
Small fixes to timeline time
2025-10-01 01:31:10 +05:30
tapframe
221794026e some UI changes 2025-10-01 01:28:13 +05:30
tapframe
16c460cdc2 new toast library 2025-10-01 01:13:27 +05:30
CrissZollo
89416bd714 Small fixes to timeline time 2025-09-30 21:32:00 +02:00
tapframe
56654e1ced
Merge pull request #156 from CrissZollo/fix-action-menu
Action menu fixes and utilisation
2025-10-01 00:57:09 +05:30
tapframe
7de8a86869 UI changes 2025-10-01 00:52:03 +05:30
tapframe
3220e91f1c Added TMDB Multilang Support 2025-10-01 00:41:34 +05:30
CrissZollo
2da663ecd1 Hid the 'Add to playlist' for action menu. 2025-09-30 20:51:59 +02:00
tapframe
2a89695b0b Added option to enable/disable tmdb enriched metadata for addons 2025-09-30 23:55:43 +05:30
CrissZollo
7ca74b3b0d Adding packages and updates 2025-09-30 19:29:42 +02:00
tapframe
b0b309b0f1
Merge pull request #155 from tapframe/revert-153-main
Revert "Fix trakt scrobbling algorithm"
2025-09-30 22:02:42 +05:30
tapframe
5e22f3b0da
Revert "Fix trakt scrobbling algorithm" 2025-09-30 22:01:00 +05:30
tapframe
9d32c483eb
Merge pull request #153 from aayushrautela/main
Fix trakt scrobbling algorithm
2025-09-30 18:42:47 +05:30
tapframe
78130a54aa
Merge pull request #149 from CrissZollo/feature-length-time
Feature: Changed the time to display in H:MIN instead of only MIN.
2025-09-30 18:41:18 +05:30
tapframe
1f49de9b27 TV Show stream fetching fixed 2025-09-30 18:35:15 +05:30
tapframe
1f085604ee 1.2.2 17 2025-09-30 18:00:12 +05:30
tapframe
4f593459b1 1.2.1 2025-09-30 17:17:48 +05:30
tapframe
b8d3d68b65 Added ExoPlayer FFmpeg Extension for better Codec Support 2025-09-30 17:10:59 +05:30
tapframe
004ee178a4 some VLCPLayer fixes 2025-09-30 16:03:39 +05:30
tapframe
07eab50848 addon stream fetching imrpovements 2025-09-30 15:32:29 +05:30
CrissZollo
b3b6bdee4e Added long press on search items. 2025-09-29 23:06:57 +02:00
Aayush Rautela
eea003c170
Delete .github/workflows/ci.yml 2025-09-29 23:03:28 +02:00
Aayush Rautela
1ca8813e58 C/I 2025-09-29 22:59:14 +02:00
Aayush Rautela
64c9919e28 Enhance ContinueWatchingSection to fetch and handle both watched movies and shows from Trakt, improving filtering logic for displayed content. 2025-09-29 22:56:12 +02:00
CrissZollo
04f6a0b6be Fixes for adding/removing watched/library from library/home 2025-09-29 22:35:54 +02:00
CrissZollo
35ace0214a Added the longpress menu for the library menu 2025-09-29 22:10:03 +02:00
tapframe
bbbc22f30f Pluginscreen UI changes 2025-09-30 01:39:00 +05:30
tapframe
9ae0a7010c showbox support 2025-09-30 01:21:10 +05:30
CrissZollo
7fa4d20da0 Fix for mark as watched disappearing on restart 2025-09-29 21:16:05 +02:00
CrissZollo
b49514f52b Update npm packages 2025-09-29 20:36:41 +02:00
tapframe
92973c1c7b changes 2025-09-29 16:53:10 +05:30
tapframe
271126b665 downloading feature initial commit 2025-09-29 16:02:53 +05:30
tapframe
ebb7d4cec6 Stability improvement on catalogsection 2025-09-29 14:55:22 +05:30
tapframe
f86e6256a7 small UI changes 2025-09-29 14:25:51 +05:30
CrissZollo
ebf2ea50ed Feature: Changed the time to display in H:MIN instead of only MIN. Runtimes less than 60 still shows only MIN 2025-09-28 22:38:13 +02:00
tapframe
a877f5ac13 push 2025-09-28 20:56:52 +05:30
tapframe
cbd2283bf8 Audio Lang display fix 2025-09-28 20:53:00 +05:30
tapframe
fca3c46372 perf opt for homesreen 2025-09-28 12:33:58 +05:30
tapframe
b43957e6f9 some UI optimization 2025-09-28 11:44:32 +05:30
tapframe
57036aaffb app opening glitch fix 2025-09-28 10:43:35 +05:30
909 changed files with 140470 additions and 96201 deletions

View file

@ -3,6 +3,12 @@
EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# Remote cache for TMDB (optional)
# Set to true to use local/remote cache server, and provide URL
EXPO_PUBLIC_USE_REMOTE_CACHE=false
EXPO_PUBLIC_CACHE_SERVER_URL=http://localhost:5173
EXPO_PUBLIC_DISABLE_LOCAL_CACHE=false
# MovieBox (MoviesMod) Keys
EXPO_PUBLIC_MOVIEBOX_PRIMARY_KEY=your_moviebox_primary_key
EXPO_PUBLIC_MOVIEBOX_TMDB_API_KEY=your_tmdb_api_key_for_moviebox
@ -11,3 +17,8 @@ EXPO_PUBLIC_MOVIEBOX_TMDB_API_KEY=your_tmdb_api_key_for_moviebox
EXPO_PUBLIC_TRAKT_CLIENT_ID=your_trakt_client_id
EXPO_PUBLIC_TRAKT_CLIENT_SECRET=your_trakt_client_secret
EXPO_PUBLIC_TRAKT_REDIRECT_URI=stremioexpo://auth/trakt
# Skip Intro API (IntroDB)
# Fetches intro timestamps for TV shows to enable skip intro functionality
EXPO_PUBLIC_INTRODB_API_URL=https://api.introdb.app
EXPO_PUBLIC_DISCORD_USER_API=

4
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1,4 @@
# These are supported funding model platforms
github: [tapframe]
ko_fi: tapframe

217
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,217 @@
name: Bug report
description: Report a reproducible bug (one per issue).
title: "[Bug]: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
Thanks for reporting a bug.
If we can reproduce it, we can usually fix it. This form is just to get the basics in one place.
- type: markdown
attributes:
value: |
## Quick checks
- type: checkboxes
id: checks
attributes:
label: Pre-flight checks
options:
- label: I searched existing issues and this is not a duplicate.
required: true
- label: I can reproduce this on the latest release or latest main build.
required: false
- label: This issue is limited to a single bug (not multiple unrelated problems).
required: true
- type: markdown
attributes:
value: |
## Version & device
- type: input
id: app_version
attributes:
label: App version / OTA update ID
description: Release version, commit hash, or OTA update ID. You can find your OTA update ID in Settings > App updates > Current version (hold to copy).
placeholder: "e.g. 1.2.3, main@abc1234, or an OTA ID"
validations:
required: true
- type: dropdown
id: install_method
attributes:
label: Install method
options:
- GitHub Release APK / IPA
- Expo Go
- Built from source
- Other (please describe below)
validations:
required: true
- type: dropdown
id: platform
attributes:
label: Platform
options:
- Android phone/tablet
- iOS (iPhone/iPad)
- Android emulator
- iOS Simulator
- Other (please describe below)
validations:
required: true
- type: input
id: device_model
attributes:
label: Device model
description: "Example: iPhone 15 Pro, Pixel 8, Galaxy S23 Ultra, iPad Pro, etc."
placeholder: "e.g. iPhone 15 Pro"
validations:
required: true
- type: input
id: os_version
attributes:
label: OS version
placeholder: "e.g. Android 14, iOS 17.2"
validations:
required: true
- type: dropdown
id: player_mode
attributes:
label: Player mode
description: If you are using an external player, most playback issues must be reported to that player instead.
options:
- Internal player (iOS: KSPlayer)
- Internal player (Android: ExoPlayer)
- Internal player (Android: MPV)
- External player
- Ask every time
- Not sure
validations:
required: true
- type: markdown
attributes:
value: |
## What happened?
- type: dropdown
id: area
attributes:
label: Area (tag)
description: Pick the closest match. It helps triage.
options:
- Playback (start/stop/buffering)
- Streams / Sources (selection, loading, errors)
- Next Episode / Auto-play
- Watch Progress (resume, watched state, history)
- Subtitles (styling, sync)
- Audio tracks
- UI / Layout / Animations
- Settings
- Sync (Trakt / SIMKL / remote)
- Downloads
- Other
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
description: Exact steps. If it depends on specific content, describe it (movie/series, season/episode, source/addon name) without sharing private links.
placeholder: |
1. Open ...
2. Navigate to ...
3. Press ...
4. Observe ...
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
placeholder: "What you expected to happen."
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
placeholder: "What actually happened (include any on-screen error text/codes)."
validations:
required: true
- type: dropdown
id: frequency
attributes:
label: Frequency
options:
- Always
- Often (more than 50%)
- Sometimes
- Rarely
- Once
validations:
required: true
- type: dropdown
id: regression
attributes:
label: Did this work before?
options:
- Not sure
- Yes, it used to work
- No, it never worked
validations:
required: true
- type: markdown
attributes:
value: |
## Extra context (optional)
- type: textarea
id: media_details
attributes:
label: Media details (optional)
description: Only include what you can safely share.
placeholder: |
- Content type: series/movie
- Season/Episode: S1E2
- Stream/source: (addon name / source label)
- Video format: (if known)
validations:
required: false
- type: textarea
id: logs
attributes:
label: Logs (optional but helpful)
description: |
Not required, but super helpful for playback/crash issues.
If you can, include a short snippet from Metro bundler, Xcode, or `adb logcat`.
render: shell
placeholder: |
adb logcat -d | tail -n 300
validations:
required: false
- type: textarea
id: extra
attributes:
label: Anything else? (optional)
description: Screenshots/recordings, related issues, workarounds, etc.
validations:
required: false

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Downloads / Releases
url: https://github.com/tapframe/NuvioMobile/releases
about: Grab the latest GitHub Release APK/IPA here.
- name: Documentation
url: https://github.com/tapframe/NuvioMobile/blob/main/README.md
about: Read the README for setup and usage details.

View file

@ -0,0 +1,78 @@
name: Feature request
description: Suggest an improvement or new feature.
title: "[Feature]: "
labels:
- enhancement
body:
- type: markdown
attributes:
value: |
One feature request per issue, please. The more real-world your use case is, the easier it is to evaluate.
Feature requests are reviewed as product proposals first.
Please do not open a pull request for a new feature, major UX change, or broad cosmetic update unless a maintainer has explicitly approved it first.
Unapproved feature PRs will usually be closed.
- type: dropdown
id: area
attributes:
label: Area (tag)
options:
- Playback
- Streams / Sources
- Next Episode / Auto-play
- Watch Progress
- Subtitles
- Audio
- UI / Layout / Animations
- Settings
- Sync (Trakt / SIMKL / remote)
- Downloads
- Other
validations:
required: true
- type: textarea
id: problem
attributes:
label: Problem statement
description: What problem are you trying to solve?
placeholder: "I want to be able to..."
validations:
required: true
- type: textarea
id: proposed
attributes:
label: Proposed solution
description: What would you like the app to do?
validations:
required: true
- type: dropdown
id: contribution_plan
attributes:
label: Are you planning to implement this yourself?
description: Major features are usually implemented in-house unless approved first.
options:
- No, this is only a proposal
- Maybe, but only if approved first
- Yes, but I understand implementation still needs maintainer approval
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered (optional)
description: Any workarounds or other approaches you considered.
validations:
required: false
- type: textarea
id: extra
attributes:
label: Additional context (optional)
description: Mockups, examples from other apps, etc.
validations:
required: false

43
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View file

@ -0,0 +1,43 @@
## Summary
<!-- What changed in this PR? -->
## PR type
<!-- Pick one and delete the others -->
- Bug fix
- Small maintenance improvement
- Docs fix
- Approved larger change (link approval below)
## Why
<!-- Why this change is needed. Link bug/issue/context. -->
## Policy check
<!-- Confirm these before requesting review -->
- [ ] This PR is not cosmetic only.
- [ ] This PR does not add a new major feature without prior approval.
- [ ] This PR is small in scope and focused on one problem.
- [ ] If this is a larger or directional change, I linked the issue where it was approved.
<!-- PRs that do not match this policy will usually be closed without merge. -->
## Testing
<!-- What you tested and how (manual + automated). -->
- [ ] iOS tested
- [ ] Android tested
## Screenshots / Video (UI changes only)
<!-- If UI changed, add before/after screenshots or a short clip. -->
## Breaking changes
<!-- Any breaking behavior/config/schema changes? If none, write: None -->
## Linked issues
<!-- Example: Fixes #123 -->

64
.gitignore vendored
View file

@ -2,6 +2,10 @@
# dependencies
node_modules/
# Un-ignore specific react-native-video source files we patch
!node_modules/react-native-video/android/src/main/java/com/brentvatne/common/api/SubtitleStyle.kt
!node_modules/react-native-video/android/src/main/java/com/brentvatne/exoplayer/ExoPlayerView.kt
!node_modules/react-native-video/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java
# Expo
.expo/
@ -30,8 +34,12 @@ yarn-error.*
*.pem
# local env files
.env
.env*.local
.env
# Sentry
ios/sentry.properties
android/sentry.properties
# typescript
*.tsbuildinfo
@ -40,11 +48,15 @@ release_announcement.md
ALPHA_BUILD_2_ANNOUNCEMENT.md
CHANGELOG.md
.env.local
android/
# Android build artifacts (but keep source files)
android/app/build/
android/build/
android/.gradle/
android/app/libs/*.aar
!android/app/libs/lib-decoder-ffmpeg-release.aar
!android/app/libs/libmpv-release.aar
HEATING_OPTIMIZATIONS.md
android
sliderreadme.md
# sliderreadme.md
.cursor/mcp.json
local-scrapers-repo
worki.json
@ -54,4 +66,44 @@ hackintosh-emulator-fix.sh
src/screens/xavio.md
/nuvio-providers
/KSPlayer
/exobase
/exobase
# ffmpegreadme.md
toast.md
ffmpegreadme.md
sliderreadme.md
bottomsheet.md
fastimage.md
## Backup directories
backup_sdk54_upgrade/
SDK54_UPGRADE_SUMMARY.md
SDK54_UPGRADE_SUMMARY.md
build-and-publish-app-releases.sh
bottomnav.md
/TrailerServices
mmkv.md
fix-android-scroll-lag-summary.md
server/cache-server
server/campaign-manager
server/sync-service
carousal.md
node_modules
expofs.md
ios/sentry.properties
android/sentry.properties
Stremio addons refer
trakt-docs
trakt-docss
# Removed submodules (kept locally)
libmpv-android/
mpv-android/
mpvKt/
# Torrent libraries
LibTorrent/
iTorrent/
simkl-docss
downloader.md
server
Deliverables 2

View file

@ -1,2 +1,3 @@
{
"java.compile.nullAnalysis.mode": "automatic"
}

View file

@ -0,0 +1,10 @@
# Nuvio Alpha Build 2
This is the second alpha release of Nuvio!
## What's New
- **Intro Submission:** You can now submit intro timestamps directly to IntroDB!
- **Bug Fixes:** Various improvements and stability fixes.
## Installation
Download the attached APK and install it on your Android device.

256
App.tsx
View file

@ -10,45 +10,83 @@ import {
View,
StyleSheet,
I18nManager,
Platform
Platform,
LogBox,
Linking
} from 'react-native';
import './src/i18n'; // Initialize i18n
import { NavigationContainer } from '@react-navigation/native';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { StatusBar } from 'expo-status-bar';
import { Provider as PaperProvider } from 'react-native-paper';
import { enableScreens } from 'react-native-screens';
import AppNavigator, {
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { enableScreens, enableFreeze } from 'react-native-screens';
import AppNavigator, {
CustomNavigationDarkTheme,
CustomDarkTheme
} from './src/navigation/AppNavigator';
import { BottomSheetModalProvider } from '@gorhom/bottom-sheet';
import 'react-native-reanimated';
import { CatalogProvider } from './src/contexts/CatalogContext';
import { GenreProvider } from './src/contexts/GenreContext';
import { TraktProvider } from './src/contexts/TraktContext';
import { SimklProvider } from './src/contexts/SimklContext';
import { ThemeProvider, useTheme } from './src/contexts/ThemeContext';
import { TrailerProvider } from './src/contexts/TrailerContext';
import { DownloadsProvider } from './src/contexts/DownloadsContext';
import SplashScreen from './src/components/SplashScreen';
import UpdatePopup from './src/components/UpdatePopup';
import MajorUpdateOverlay from './src/components/MajorUpdateOverlay';
import { useGithubMajorUpdate } from './src/hooks/useGithubMajorUpdate';
import { useUpdatePopup } from './src/hooks/useUpdatePopup';
import AsyncStorage from '@react-native-async-storage/async-storage';
import * as Sentry from '@sentry/react-native';
import UpdateService from './src/services/updateService';
import { memoryMonitorService } from './src/services/memoryMonitorService';
import { aiService } from './src/services/aiService';
import { AccountProvider, useAccount } from './src/contexts/AccountContext';
import { ToastProvider } from './src/contexts/ToastContext';
import { mmkvStorage } from './src/services/mmkvStorage';
import { CampaignManager } from './src/components/promotions/CampaignManager';
import { isErrorReportingEnabledSync } from './src/services/telemetryService';
import { supabaseSyncService } from './src/services/supabaseSyncService';
// Initialize Sentry with privacy-first defaults
// Settings are loaded from telemetryService and can be controlled by user
// Note: Full dynamic control requires app restart as Sentry initializes at startup
Sentry.init({
dsn: 'https://1a58bf436454d346e5852b7bfd3c95e8@o4509536317276160.ingest.de.sentry.io/4509536317734992',
// Adds more context data to events (IP address, cookies, user, etc.)
// For more information, visit: https://docs.sentry.io/platforms/react-native/data-management/data-collected/
sendDefaultPii: true,
// Privacy-first: Disable PII by default (IP address, cookies, user data)
// Users can opt-in via Privacy Settings if they choose
sendDefaultPii: false,
// Configure Session Replay conservatively to avoid startup overhead in production
replaysSessionSampleRate: __DEV__ ? 0.1 : 0,
replaysOnErrorSampleRate: __DEV__ ? 1 : 0,
// Session Replay completely disabled by default for privacy
// This prevents screen recording without explicit user consent
replaysSessionSampleRate: 0,
replaysOnErrorSampleRate: 0,
// Only include feedback integration (user-initiated, not automatic)
integrations: [Sentry.feedbackIntegration()],
// beforeSend hook to respect user's telemetry preferences
// Uses synchronous MMKV read to check preference immediately
beforeSend: (event) => {
// Check if error reporting is disabled (synchronous check)
if (!isErrorReportingEnabledSync()) {
// Drop the event - user has opted out
return null;
}
return event;
},
// beforeSendTransaction hook for performance monitoring
beforeSendTransaction: (event) => {
if (!isErrorReportingEnabledSync()) {
return null;
}
return event;
},
// uncomment the line below to enable Spotlight (https://spotlightjs.com)
// spotlight: __DEV__,
});
@ -58,8 +96,16 @@ Sentry.init({
I18nManager.allowRTL(false);
I18nManager.forceRTL(false);
// Suppress duplicate key warnings app-wide
LogBox.ignoreLogs([
'Warning: Encountered two children with the same key',
'Keys should be unique so that components maintain their identity across updates'
]);
// This fixes many navigation layout issues by using native screen containers
enableScreens(true);
// Freeze non-focused screens to stop background re-renders
enableFreeze(true);
// Inner app component that uses the theme context
const ThemedApp = () => {
@ -69,12 +115,12 @@ const ThemedApp = () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const engine = (global as any).HermesInternal ? 'Hermes' : 'JSC';
console.log('JS Engine:', engine);
} catch {}
} catch { }
}, []);
const { currentTheme } = useTheme();
const [isAppReady, setIsAppReady] = useState(false);
const [hasCompletedOnboarding, setHasCompletedOnboarding] = useState<boolean | null>(null);
// Update popup functionality
const {
showUpdatePopup,
@ -84,38 +130,87 @@ const ThemedApp = () => {
handleUpdateLater,
handleDismiss,
} = useUpdatePopup();
// GitHub major/minor release overlay
const githubUpdate = useGithubMajorUpdate();
const [isDownloadingGitHub, setIsDownloadingGitHub] = useState(false);
const [downloadProgress, setDownloadProgress] = useState(0);
const handleGithubUpdateAction = async () => {
console.log('handleGithubUpdateAction triggered. Release data exists:', !!githubUpdate.releaseData);
if (Platform.OS === 'android') {
setIsDownloadingGitHub(true);
setDownloadProgress(0);
try {
const { default: AndroidUpdateService } = await import('./src/services/androidUpdateService');
if (githubUpdate.releaseData) {
console.log('Calling AndroidUpdateService with:', githubUpdate.releaseData.tag_name);
const success = await AndroidUpdateService.downloadAndInstallUpdate(
githubUpdate.releaseData,
(progress) => {
setDownloadProgress(progress);
}
);
console.log('AndroidUpdateService result:', success);
if (!success) {
console.log('Update failed, falling back to browser');
// If download fails or no APK found, fallback to browser
if (githubUpdate.releaseUrl) Linking.openURL(githubUpdate.releaseUrl);
}
} else if (githubUpdate.releaseUrl) {
console.log('No release data, falling back to browser');
Linking.openURL(githubUpdate.releaseUrl);
}
} catch (error) {
console.error('Failed to update via Android service', error);
if (githubUpdate.releaseUrl) Linking.openURL(githubUpdate.releaseUrl);
} finally {
setIsDownloadingGitHub(false);
setDownloadProgress(0);
}
} else {
if (githubUpdate.releaseUrl) Linking.openURL(githubUpdate.releaseUrl);
}
};
// Check onboarding status and initialize services
useEffect(() => {
const initializeApp = async () => {
try {
// Check onboarding status
const onboardingCompleted = await AsyncStorage.getItem('hasCompletedOnboarding');
const onboardingCompleted = await mmkvStorage.getItem('hasCompletedOnboarding');
setHasCompletedOnboarding(onboardingCompleted === 'true');
// Initialize update service (skip on Android to prevent update checks)
if (Platform.OS !== 'android') {
await UpdateService.initialize();
}
// Initialize Supabase auth/session and start background sync.
// This is intentionally non-blocking for app startup UX.
supabaseSyncService
.initialize()
.then(() => supabaseSyncService.startupSync())
.catch((error) => {
console.warn('[App] Supabase sync bootstrap failed:', error);
});
// Initialize update service
await UpdateService.initialize();
// Initialize memory monitoring service to prevent OutOfMemoryError
memoryMonitorService; // Just accessing it starts the monitoring
console.log('Memory monitoring service initialized');
// Initialize AI service
await aiService.initialize();
console.log('AI service initialized');
} catch (error) {
console.error('Error initializing app:', error);
// Default to showing onboarding if we can't check
setHasCompletedOnboarding(false);
}
};
initializeApp();
}, []);
// Create custom themes based on current theme
const customDarkTheme = {
...CustomDarkTheme,
@ -124,7 +219,7 @@ const ThemedApp = () => {
primary: currentTheme.colors.primary,
}
};
const customNavigationTheme = {
...CustomNavigationDarkTheme,
colors: {
@ -139,42 +234,59 @@ const ThemedApp = () => {
const handleSplashComplete = () => {
setIsAppReady(true);
};
// Navigation reference
const navigationRef = React.useRef<any>(null);
// Don't render anything until we know the onboarding status
const shouldShowApp = isAppReady && hasCompletedOnboarding !== null;
const initialRouteName = hasCompletedOnboarding ? 'MainTabs' : 'Onboarding';
const NavigationWithRef = () => {
const { navigationRef } = useAccount() as any;
return (
<NavigationContainer
ref={navigationRef as any}
theme={customNavigationTheme}
linking={undefined}
>
<View style={[styles.container, { backgroundColor: currentTheme.colors.darkBackground }]}>
<StatusBar style="light" />
{!isAppReady && <SplashScreen onFinish={handleSplashComplete} />}
{shouldShowApp && <AppNavigator initialRouteName={initialRouteName} />}
{Platform.OS === 'ios' && (
<UpdatePopup
visible={showUpdatePopup}
updateInfo={updateInfo}
onUpdateNow={handleUpdateNow}
onUpdateLater={handleUpdateLater}
onDismiss={handleDismiss}
isInstalling={isInstalling}
/>
)}
</View>
</NavigationContainer>
);
};
return (
<AccountProvider>
<PaperProvider theme={customDarkTheme}>
<NavigationWithRef />
<NavigationContainer
ref={navigationRef}
theme={customNavigationTheme}
linking={{
prefixes: ['nuvio://'],
config: {
screens: {
ScraperSettings: {
path: 'repo',
},
},
},
}}
>
<DownloadsProvider>
<View style={[styles.container, { backgroundColor: currentTheme.colors.darkBackground }]}>
<StatusBar style="light" />
{!isAppReady && <SplashScreen onFinish={handleSplashComplete} />}
{shouldShowApp && <AppNavigator initialRouteName={initialRouteName} />}
<UpdatePopup
visible={showUpdatePopup}
updateInfo={updateInfo}
onUpdateNow={handleUpdateNow}
onUpdateLater={handleUpdateLater}
onDismiss={handleDismiss}
isInstalling={isInstalling}
/>
<MajorUpdateOverlay
visible={githubUpdate.visible}
latestTag={githubUpdate.latestTag}
releaseNotes={githubUpdate.releaseNotes}
releaseUrl={githubUpdate.releaseUrl}
onDismiss={githubUpdate.onDismiss}
onLater={githubUpdate.onLater}
onUpdateAction={handleGithubUpdateAction}
isDownloading={isDownloadingGitHub}
downloadProgress={downloadProgress}
/>
<CampaignManager />
</View>
</DownloadsProvider>
</NavigationContainer>
</PaperProvider>
</AccountProvider>
);
@ -182,19 +294,27 @@ const ThemedApp = () => {
function App(): React.JSX.Element {
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<GenreProvider>
<CatalogProvider>
<TraktProvider>
<ThemeProvider>
<TrailerProvider>
<ThemedApp />
</TrailerProvider>
</ThemeProvider>
</TraktProvider>
</CatalogProvider>
</GenreProvider>
</GestureHandlerRootView>
<SafeAreaProvider>
<GestureHandlerRootView style={{ flex: 1 }}>
<BottomSheetModalProvider>
<GenreProvider>
<CatalogProvider>
<TraktProvider>
<SimklProvider>
<ThemeProvider>
<TrailerProvider>
<ToastProvider>
<ThemedApp />
</ToastProvider>
</TrailerProvider>
</ThemeProvider>
</SimklProvider>
</TraktProvider>
</CatalogProvider>
</GenreProvider>
</BottomSheetModalProvider>
</GestureHandlerRootView>
</SafeAreaProvider>
);
}
@ -204,4 +324,4 @@ const styles = StyleSheet.create({
},
});
export default Sentry.wrap(App);
export default Sentry.wrap(App);

80
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,80 @@
# Contributing
Thanks for helping improve NuvioMobile.
## PR policy
Pull requests are currently intended for:
- Reproducible bug fixes
- Small stability improvements
- Minor maintenance work
- Small documentation fixes that improve accuracy
Pull requests are generally **not** accepted for:
- New major features
- Product direction changes
- Large UX / UI redesigns
- Cosmetic-only changes
- Refactors without a clear user-facing or maintenance benefit
For feature ideas and bigger changes, please open an issue first. Feature implementation is usually kept in-house unless it has been discussed and explicitly approved beforehand.
## Where to ask questions
- Use **Issues** for bugs, feature requests, setup help, and general support.
## Bug reports (rules)
To keep issues fixable, bug reports should include:
- App version or OTA update ID (Settings > App updates > Current version, hold to copy)
- Platform + device model + OS version (Android/iOS)
- Install method (release APK/IPA / Expo Go / built from source)
- Steps to reproduce (exact steps)
- Expected vs actual behavior
- Frequency (always/sometimes/once)
Logs are **optional**, but they help a lot for playback/crash issues.
### How to capture logs (optional)
If you can, reproduce the issue once, then attach a short log snippet from around the time it happened:
For Android:
```sh
adb logcat -d | tail -n 300
```
For iOS/Metro:
```sh
# Copy from your Metro bundler output or Xcode console
```
If the issue is a crash, also include any stack trace shown by Android Studio, Xcode, or `adb logcat`.
## Feature requests (rules)
Please include:
- The problem you are solving (use case)
- Your proposed solution
- Alternatives considered (if any)
Opening a feature request does **not** mean a pull request will be accepted for it. If the feature affects product scope, UX direction, or adds a significant new surface area, do not start implementation unless a maintainer explicitly approves it first.
## Before opening a PR
Please make sure your PR is all of the following:
- Small in scope
- Focused on one problem
- Clearly aligned with the current direction of the project
- Not cosmetic-only
- Not a new major feature unless it was discussed and approved first
PRs that do not fit this policy will usually be closed without merge so review time can stay focused on bugs, regressions, and small improvements.
## One issue per problem
Please open separate issues for separate bugs/features. It makes tracking, fixing, and closing issues much faster.

119
README.md
View file

@ -1,86 +1,85 @@
# Nuvio Media Hub
<div align="center">
<p align="center">
<img src="assets/titlelogo.png" alt="Nuvio Logo" width="300"/>
</p>
<img src="https://github.com/tapframe/NuvioTV/blob/main/assets/brand/app_logo_wordmark.png" alt="Nuvio" width="300" />
<br />
<br />
<p align="center">
A modern media hub built with React Native and Expo, featuring comprehensive addon integration and content synchronization.
</p>
[![Contributors][contributors-shield]][contributors-url]
[![Forks][forks-shield]][forks-url]
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![License][license-shield]][license-url]
---
<p>
A modern media hub for Android and iOS built with React Native and Expo.
<br />
Stremio Addon ecosystem • Cross-platform
</p>
</div>
## About
Nuvio Media Hub is a cross-platform app for managing and discovering media, with a playback-focused interface that can integrate with the Stremio addon ecosystem through user-installed extensions.
## Installation
### AltStore
<img src="https://upload.wikimedia.org/wikipedia/commons/2/20/AltStore_logo.png" width="32" height="32" align="left"> [![Add to AltStore](https://img.shields.io/badge/Add%20to-AltStore-blue?style=for-the-badge)](https://tinyurl.com/NuvioAltstore)
### Android
### SideStore
<img src="https://github.com/SideStore/assets/blob/main/icon.png?raw=true" width="32" height="32" align="left"> [![Add to SideStore](https://img.shields.io/badge/Add%20to-SideStore-green?style=for-the-badge)](https://tinyurl.com/NuvioSidestore)
Download the latest APK from [GitHub Releases](https://github.com/tapframe/NuvioStreaming/releases/latest).
**Manual URL:** `https://raw.githubusercontent.com/tapframe/NuvioStreaming/main/nuvio-source.json`
### iOS
---
- [TestFlight](https://testflight.apple.com/join/QkKMGRqp)
- [AltStore](https://tinyurl.com/NuvioAltstore)
- [SideStore](https://tinyurl.com/NuvioSidestore)
## Screenshots
| Home | Details |
|:----:|:-------:|
| ![Home](screesnhots/Simulator%20Screenshot%20-%20iPhone%2016%20Pro%20-%202025-08-27%20at%2021.08.32-portrait.png) | ![Details](screesnhots/WhatsApp%20Image%202025-09-02%20at%2000.24.31-portrait.png) |
---
## Tech Stack
<p align="left">
<a href="https://skillicons.dev">
<img src="https://skillicons.dev/icons?i=react,typescript,nodejs,expo,github,githubactions&theme=light&perline=6" />
</a>
</p>
---
**Manual source:** `https://raw.githubusercontent.com/tapframe/NuvioStreaming/main/nuvio-source.json`
## Development
### Setup
```bash
git clone https://github.com/tapframe/NuvioStreaming.git
cd NuvioStreaming
npm install
npx expo start
npm install --legacy-peer-deps
npx expo prebuild
npx expo run:android
# or
npx expo run:ios
```
### Build
```bash
npx expo run:android # Android
npx expo run:ios # iOS
```
## Legal & DMCA
---
Nuvio functions solely as a client-side interface for browsing metadata and playing media provided by user-installed extensions and/or user-provided sources. It is intended for content the user owns or is otherwise authorized to access.
## Contributing
Nuvio is not affiliated with any third-party extensions, catalogs, sources, or content providers. It does not host, store, or distribute any media content.
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Submit a pull request
For comprehensive legal information, including our full disclaimer, third-party extension policy, and DMCA/Copyright information, please visit our **[Legal & Disclaimer Page](https://nuvioapp.space/legal)**.
---
## Built With
## Issues
- React Native
- Expo
- TypeScript
Report bugs and request features via [GitHub Issues](https://github.com/tapframe/NuvioStreaming/issues)
## Star History
---
<a href="https://www.star-history.com/#tapframe/NuvioStreaming&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=tapframe/NuvioStreaming&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=tapframe/NuvioStreaming&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=tapframe/NuvioStreaming&type=date&legend=top-left" />
</picture>
</a>
## License
[![GNU GPLv3](https://www.gnu.org/graphics/gplv3-127x51.png)](http://www.gnu.org/licenses/gpl-3.0.en.html)
This project is licensed under the GNU General Public License v3.0.
---
## Disclaimer
This application functions as a media hub with addon/plugin support. It does not contain any built-in content or host media content. Content access is only available through user-installed plugins and addons. Any legal concerns should be directed to the specific websites providing the content.
<!-- MARKDOWN LINKS & IMAGES -->
[contributors-shield]: https://img.shields.io/github/contributors/tapframe/NuvioStreaming.svg?style=for-the-badge
[contributors-url]: https://github.com/tapframe/NuvioStreaming/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/tapframe/NuvioStreaming.svg?style=for-the-badge
[forks-url]: https://github.com/tapframe/NuvioStreaming/network/members
[stars-shield]: https://img.shields.io/github/stars/tapframe/NuvioStreaming.svg?style=for-the-badge
[stars-url]: https://github.com/tapframe/NuvioStreaming/stargazers
[issues-shield]: https://img.shields.io/github/issues/tapframe/NuvioStreaming.svg?style=for-the-badge
[issues-url]: https://github.com/tapframe/NuvioStreaming/issues
[license-shield]: https://img.shields.io/github/license/tapframe/NuvioStreaming.svg?style=for-the-badge
[license-url]: http://www.gnu.org/licenses/gpl-3.0.en.html

View file

@ -1,6 +1,7 @@
apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
apply plugin: "io.sentry.android.gradle"
def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath()
@ -14,6 +15,7 @@ react {
hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc"
codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile()
enableBundleCompression = (findProperty('android.enableBundleCompression') ?: false).toBoolean()
// Use Expo CLI to bundle the app, this ensures the Metro config
// works correctly with Expo projects.
cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim())
@ -63,9 +65,9 @@ react {
}
/**
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
* Set this to true in release builds to optimize the app using [R8](https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).
*/
def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean()
def enableMinifyInReleaseBuilds = (findProperty('android.enableMinifyInReleaseBuilds') ?: false).toBoolean()
/**
* The preferred build flavor of JavaScriptCore (JSC)
@ -78,7 +80,7 @@ def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInRelea
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+'
apply from: new File(["node", "--print", "require('path').dirname(require.resolve('@sentry/react-native/package.json'))"].execute().text.trim(), "sentry.gradle")
@ -93,16 +95,39 @@ android {
applicationId 'com.nuvio.app'
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 16
versionName "1.2.1"
versionCode 37
versionName "1.4.1"
buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\""
}
// Split APKs by architecture only for smaller downloads
splits {
abi {
reset()
enable true
universalApk false // If true, also generate a universal APK
include "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
reset()
include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}
density {
enable false
}
}
// Generate unique version codes for each split APK
def abiVersionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseVersionCode = 37 // Current versionCode 37 from defaultConfig
def abiName = output.getFilter(com.android.build.OutputFile.ABI)
def versionCode = baseVersionCode * 100 // Base multiplier
if (abiName != null) {
versionCode += abiVersionCodes.get(abiName)
}
output.versionCodeOverride = versionCode
}
}
signingConfigs {
@ -121,15 +146,18 @@ android {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)
minifyEnabled enableProguardInReleaseBuilds
def enableShrinkResources = findProperty('android.enableShrinkResourcesInReleaseBuilds') ?: 'false'
shrinkResources enableShrinkResources.toBoolean()
minifyEnabled enableMinifyInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)
def enablePngCrunchInRelease = findProperty('android.enablePngCrunchInReleaseBuilds') ?: 'true'
crunchPngs enablePngCrunchInRelease.toBoolean()
}
}
packagingOptions {
jniLibs {
useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false)
def enableLegacyPackaging = findProperty('expo.useLegacyPackaging') ?: 'false'
useLegacyPackaging enableLegacyPackaging.toBoolean()
}
}
androidResources {
@ -157,7 +185,38 @@ android {
}
}
sentry {
// Enables or disables the automatic configuration of Native Symbols
// for Sentry. This executes sentry-cli automatically so
// you don't need to do it manually.
// Default is disabled.
uploadNativeSymbols = true
// Enables or disables the automatic upload of the app's native source code to Sentry.
// This executes sentry-cli with the --include-sources param automatically so
// you don't need to do it manually.
// This option has an effect only when [uploadNativeSymbols] is enabled.
// Default is disabled.
includeNativeSources = true
// `@sentry/react-native` ships with compatible `sentry-android`
// This option would install the latest version that ships with the SDK or SAGP (Sentry Android Gradle Plugin)
// which might be incompatible with the React Native SDK
// Enable auto-installation of Sentry components (sentry-android SDK and okhttp, timber and fragment integrations).
// Default is enabled.
autoInstallation {
enabled = false
}
}
configurations.all {
exclude group: 'com.caverock', module: 'androidsvg'
}
dependencies {
// @generated begin react-native-google-cast-dependencies - expo prebuild (DO NOT MODIFY) sync-3822a3c86222e7aca74039b551612aab7e75365d
implementation "com.google.android.gms:play-services-cast-framework:${safeExtGet('castFrameworkVersion', '+')}"
// @generated end react-native-google-cast-dependencies
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
@ -167,15 +226,15 @@ dependencies {
if (isGifEnabled) {
// For animated gif support
implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}")
implementation("com.facebook.fresco:animated-gif:${expoLibs.versions.fresco.get()}")
}
if (isWebpEnabled) {
// For webp support
implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}")
implementation("com.facebook.fresco:webpsupport:${expoLibs.versions.fresco.get()}")
if (isWebpAnimatedEnabled) {
// Animated webp support
implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}")
implementation("com.facebook.fresco:animated-webp:${expoLibs.versions.fresco.get()}")
}
}
@ -184,4 +243,17 @@ dependencies {
} else {
implementation jscFlavor
}
// Include only FFmpeg decoder AAR to avoid duplicates with Maven Media3
implementation files("libs/lib-decoder-ffmpeg-release.aar")
// MPV Player library
implementation files("libs/libmpv-release.aar")
// Google Cast Framework
implementation "com.google.android.gms:play-services-cast-framework:${safeExtGet('castFrameworkVersion', '+')}"
}
def safeExtGet(prop, fallback) {
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}

Binary file not shown.

Binary file not shown.

View file

@ -12,3 +12,17 @@
-keep class com.facebook.react.turbomodule.** { *; }
# Add any project specific keep options here:
# Media3 / ExoPlayer keep (extensions and reflection)
-keep class androidx.media3.** { *; }
-dontwarn androidx.media3.**
# FastImage / Glide ProGuard rules
-keep public class com.dylanvann.fastimage.* {*;}
-keep public class com.dylanvann.fastimage.** {*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}

View file

@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" tools:replace="android:usesCleartextTraffic" />
</manifest>

View file

@ -1,4 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk tools:overrideLibrary="dev.jdtech.mpv"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
@ -6,6 +7,7 @@
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<queries>
<intent>
<action android:name="android.intent.action.VIEW"/>
@ -13,12 +15,14 @@
<data android:scheme="https"/>
</intent>
</queries>
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:supportsRtl="true">
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:supportsRtl="true" android:enableOnBackInvokedCallback="false">
<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="com.reactnative.googlecast.GoogleCastOptionsProvider"/>
<meta-data android:name="com.reactnative.googlecast.RECEIVER_APPLICATION_ID" android:value="CC1AD845"/>
<meta-data android:name="expo.modules.updates.ENABLED" android:value="true"/>
<meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="@string/expo_runtime_version"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ERROR_RECOVERY_ONLY"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="30000"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://grim-reyna-tapframe-69970143.koyeb.app/api/manifest"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="5000"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://ota.nuvioapp.space/api/manifest"/>
<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode|locale|layoutDirection" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:exported="true" android:screenOrientation="unspecified">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
@ -29,9 +33,8 @@
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="nuvio"/>
<data android:scheme="com.nuvio.app"/>
<data android:scheme="exp+nuvio"/>
</intent-filter>
</activity>
</application>
</manifest>
</manifest>

View file

@ -9,6 +9,7 @@ import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnable
import com.facebook.react.defaults.DefaultReactActivityDelegate
import expo.modules.ReactActivityDelegateWrapper
import com.reactnative.googlecast.api.RNGCCastContext
class MainActivity : ReactActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -17,6 +18,12 @@ class MainActivity : ReactActivity() {
// This is required for expo-splash-screen.
setTheme(R.style.AppTheme);
super.onCreate(null)
// @generated begin react-native-google-cast-onCreate - expo prebuild (DO NOT MODIFY) sync-489050f2bf9933a98bbd9d93137016ae14c22faa
RNGCCastContext.getSharedInstance(this)
// @generated end react-native-google-cast-onCreate
// Initialize Google Cast context
RNGCCastContext.getSharedInstance(this)
}
/**

View file

@ -5,35 +5,34 @@ import android.content.res.Configuration
import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative
import com.facebook.react.ReactNativeHost
import com.facebook.react.ReactPackage
import com.facebook.react.ReactHost
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
import com.facebook.react.common.ReleaseLevel
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint
import com.facebook.react.defaults.DefaultReactNativeHost
import com.facebook.react.soloader.OpenSourceMergedSoMapping
import com.facebook.soloader.SoLoader
import expo.modules.ApplicationLifecycleDispatcher
import expo.modules.ReactNativeHostWrapper
import com.nuvio.app.mpv.MpvPackage
class MainApplication : Application(), ReactApplication {
override val reactNativeHost: ReactNativeHost = ReactNativeHostWrapper(
this,
object : DefaultReactNativeHost(this) {
override fun getPackages(): List<ReactPackage> {
val packages = PackageList(this).packages
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
return packages
}
this,
object : DefaultReactNativeHost(this) {
override fun getPackages(): List<ReactPackage> =
PackageList(this).packages.apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
add(com.nuvio.app.mpv.MpvPackage())
}
override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry"
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
}
)
@ -42,11 +41,12 @@ class MainApplication : Application(), ReactApplication {
override fun onCreate() {
super.onCreate()
SoLoader.init(this, OpenSourceMergedSoMapping)
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
// If you opted-in for the New Architecture, we load the native entry point for this app.
load()
DefaultNewArchitectureEntryPoint.releaseLevel = try {
ReleaseLevel.valueOf(BuildConfig.REACT_NATIVE_RELEASE_LEVEL.uppercase())
} catch (e: IllegalArgumentException) {
ReleaseLevel.STABLE
}
loadReactNative(this)
ApplicationLifecycleDispatcher.onApplicationCreate(this)
}

View file

@ -0,0 +1,615 @@
package com.nuvio.app.mpv
import android.content.Context
import android.graphics.SurfaceTexture
import android.util.AttributeSet
import android.util.Log
import android.view.Surface
import android.view.TextureView
import dev.jdtech.mpv.MPVLib
import com.facebook.react.bridge.LifecycleEventListener
import com.facebook.react.bridge.ReactContext
class MPVView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : TextureView(context, attrs, defStyleAttr), TextureView.SurfaceTextureListener, MPVLib.EventObserver {
companion object {
private const val TAG = "MPVView"
}
private var isMpvInitialized = false
private var pendingDataSource: String? = null
private var isPaused: Boolean = true
private var surface: Surface? = null
private var httpHeaders: Map<String, String>? = null
// Decoder mode setting: 'auto', 'sw', 'hw', 'hw+' (default: auto)
var decoderMode: String = "auto"
// GPU mode setting: 'gpu', 'gpu-next' (default: gpu)
var gpuMode: String = "gpu"
// Flag to track if onLoad has been fired (prevents multiple fires for HLS streams)
private var hasLoadEventFired: Boolean = false
// Event listener for React Native
var onLoadCallback: ((duration: Double, width: Int, height: Int) -> Unit)? = null
var onProgressCallback: ((position: Double, duration: Double) -> Unit)? = null
var onEndCallback: (() -> Unit)? = null
var onErrorCallback: ((message: String) -> Unit)? = null
var onTracksChangedCallback: ((audioTracks: List<Map<String, Any>>, subtitleTracks: List<Map<String, Any>>) -> Unit)? = null
private var resumeOnForeground = false
private val lifeCycleListener = object : LifecycleEventListener {
override fun onHostPause() {
resumeOnForeground = !isPaused;
if(resumeOnForeground) {
Log.d(TAG, "App backgrounded — pausing MPV")
setPaused(true)
}
}
override fun onHostResume() {
if(resumeOnForeground) {
setPaused(false)
resumeOnForeground = false
}
}
override fun onHostDestroy() {}
}
init {
surfaceTextureListener = this
isOpaque = false
(context as? ReactContext)?.addLifecycleEventListener(lifeCycleListener)
}
override fun onSurfaceTextureAvailable(surfaceTexture: SurfaceTexture, width: Int, height: Int) {
Log.d(TAG, "Surface texture available: ${width}x${height}")
try {
surface = Surface(surfaceTexture)
MPVLib.create(context.applicationContext)
initOptions()
MPVLib.init()
MPVLib.attachSurface(surface!!)
MPVLib.addObserver(this)
MPVLib.setPropertyString("android-surface-size", "${width}x${height}")
observeProperties()
isMpvInitialized = true
// If a data source was set before surface was ready, load it now
// Headers are already applied in initOptions() before init()
pendingDataSource?.let { url ->
loadFile(url)
pendingDataSource = null
}
} catch (e: Exception) {
Log.e(TAG, "Failed to initialize MPV", e)
onErrorCallback?.invoke("MPV initialization failed: ${e.message}")
}
}
override fun onSurfaceTextureSizeChanged(surfaceTexture: SurfaceTexture, width: Int, height: Int) {
Log.d(TAG, "Surface texture size changed: ${width}x${height}")
if (isMpvInitialized) {
MPVLib.setPropertyString("android-surface-size", "${width}x${height}")
}
}
override fun onSurfaceTextureDestroyed(surfaceTexture: SurfaceTexture): Boolean {
Log.d(TAG, "Surface texture destroyed")
(context as? ReactContext)?.removeLifecycleEventListener(lifeCycleListener)
if (isMpvInitialized) {
MPVLib.removeObserver(this)
MPVLib.detachSurface()
MPVLib.destroy()
isMpvInitialized = false
}
surface?.release()
surface = null
return true
}
override fun onSurfaceTextureUpdated(surfaceTexture: SurfaceTexture) {
// Called when the SurfaceTexture is updated via updateTexImage()
}
private fun initOptions() {
MPVLib.setOptionString("profile", "fast")
// GPU rendering mode (gpu or gpu-next)
MPVLib.setOptionString("vo", gpuMode)
MPVLib.setOptionString("gpu-context", "android")
MPVLib.setOptionString("opengl-es", "yes")
// Decoder mode mapping (same as mpvKt)
val hwdecValue = when (decoderMode) {
"auto" -> "auto-copy" // Best balance: HW decode, copy to CPU for filters
"sw" -> "no" // Software decoding only
"hw" -> "mediacodec-copy" // HW decode with copy (safer)
"hw+" -> "mediacodec" // Full HW decode (fastest, may have issues)
else -> "auto-copy"
}
Log.d(TAG, "Decoder mode: $decoderMode, hwdec value: $hwdecValue, GPU mode: $gpuMode")
MPVLib.setOptionString("hwdec", hwdecValue)
// Note: Not setting hwdec-codecs explicitly - let mpv use defaults
MPVLib.setOptionString("target-colorspace-hint", "yes")
// HDR and Dolby Vision support
// target-prim: Signal target display primaries (auto = passthrough when display supports)
MPVLib.setOptionString("target-prim", "auto")
// target-trc: Signal target transfer characteristics (auto = passthrough when display supports)
MPVLib.setOptionString("target-trc", "auto")
// tone-mapping: How to handle HDR/DV content on SDR displays (auto = best automatic choice)
MPVLib.setOptionString("tone-mapping", "auto")
// hdr-compute-peak: Compute peak brightness for better tone mapping
MPVLib.setOptionString("hdr-compute-peak", "auto")
// Allow DV Profile 5 (HEVC with RPU) to be decoded by hardware decoder
MPVLib.setOptionString("vd-lavc-o", "strict=-2")
// Workaround for https://github.com/mpv-player/mpv/issues/14651
MPVLib.setOptionString("vd-lavc-film-grain", "cpu")
MPVLib.setOptionString("ao", "audiotrack,opensles")
// Limit demuxer cache based on Android version (like mpvKt)
val cacheMegs = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O_MR1) 64 else 32
MPVLib.setOptionString("demuxer-max-bytes", "${cacheMegs * 1024 * 1024}")
MPVLib.setOptionString("demuxer-max-back-bytes", "${cacheMegs * 1024 * 1024}")
MPVLib.setOptionString("cache", "yes")
MPVLib.setOptionString("cache-secs", "30")
MPVLib.setOptionString("network-timeout", "60")
MPVLib.setOptionString("ytdl", "no")
applyHttpHeadersAsOptions()
MPVLib.setOptionString("tls-verify", "no")
MPVLib.setOptionString("http-reconnect", "yes")
MPVLib.setOptionString("stream-reconnect", "yes")
MPVLib.setOptionString("demuxer-lavf-o", "live_start_index=0,prefer_x_start=1,http_persistent=0")
MPVLib.setOptionString("demuxer-seekable-cache", "yes")
MPVLib.setOptionString("force-seekable", "yes")
MPVLib.setOptionString("sub-auto", "fuzzy")
MPVLib.setOptionString("sub-visibility", "yes")
MPVLib.setOptionString("sub-font-size", "48")
MPVLib.setOptionString("sub-pos", "100")
MPVLib.setOptionString("sub-color", "#FFFFFFFF")
MPVLib.setOptionString("sub-border-size", "3")
MPVLib.setOptionString("sub-border-color", "#FF000000")
MPVLib.setOptionString("sub-shadow-offset", "2")
MPVLib.setOptionString("sub-shadow-color", "#80000000")
MPVLib.setOptionString("osd-fonts-dir", "/system/fonts")
MPVLib.setOptionString("sub-fonts-dir", "/system/fonts")
MPVLib.setOptionString("sub-font", "Roboto")
MPVLib.setOptionString("embeddedfonts", "yes")
MPVLib.setOptionString("sub-codepage", "auto")
MPVLib.setOptionString("blend-subtitles", "no")
MPVLib.setOptionString("sub-use-margins", "yes")
MPVLib.setOptionString("sub-ass-override", "force")
MPVLib.setOptionString("sub-scale", "1.0")
MPVLib.setOptionString("sub-fix-timing", "yes")
MPVLib.setOptionString("osc", "no")
MPVLib.setOptionString("osd-level", "1")
MPVLib.setOptionString("sid", "auto")
MPVLib.setOptionString("terminal", "no")
MPVLib.setOptionString("input-default-bindings", "no")
}
private fun observeProperties() {
// MPV format constants (from MPVLib source)
val MPV_FORMAT_NONE = 0
val MPV_FORMAT_FLAG = 3
val MPV_FORMAT_INT64 = 4
val MPV_FORMAT_DOUBLE = 5
MPVLib.observeProperty("time-pos", MPV_FORMAT_DOUBLE)
MPVLib.observeProperty("duration/full", MPV_FORMAT_DOUBLE) // Use /full for complete HLS duration
MPVLib.observeProperty("pause", MPV_FORMAT_FLAG)
MPVLib.observeProperty("paused-for-cache", MPV_FORMAT_FLAG)
MPVLib.observeProperty("eof-reached", MPV_FORMAT_FLAG)
MPVLib.observeProperty("video-params/aspect", MPV_FORMAT_DOUBLE)
MPVLib.observeProperty("width", MPV_FORMAT_INT64)
MPVLib.observeProperty("height", MPV_FORMAT_INT64)
MPVLib.observeProperty("track-list", MPV_FORMAT_NONE)
// Observe subtitle properties for debugging
MPVLib.observeProperty("sid", MPV_FORMAT_INT64)
MPVLib.observeProperty("sub-visibility", MPV_FORMAT_FLAG)
MPVLib.observeProperty("sub-text", MPV_FORMAT_NONE)
}
private fun loadFile(url: String) {
Log.d(TAG, "Loading file: $url")
// Reset load event flag for new file
hasLoadEventFired = false
MPVLib.command(arrayOf("loadfile", url))
}
// Public API
fun setDataSource(url: String) {
if (isMpvInitialized) {
// Headers were already set during initialization in initOptions()
loadFile(url)
} else {
pendingDataSource = url
}
}
fun setHeaders(headers: Map<String, String>?) {
httpHeaders = headers
Log.d(TAG, "Headers set: $headers")
}
private fun applyHttpHeadersAsOptions() {
// Always set user-agent (this works reliably)
val userAgent = httpHeaders?.get("User-Agent")
?: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
Log.d(TAG, "Setting User-Agent: $userAgent")
MPVLib.setOptionString("user-agent", userAgent)
// Additionally, set other headers via http-header-fields if present
// This is needed for streams that require Referer, Origin, Cookie, etc.
httpHeaders?.let { headers ->
val otherHeaders = headers.filterKeys { it != "User-Agent" }
if (otherHeaders.isNotEmpty()) {
// Format as comma-separated "Key: Value" pairs
val headerString = otherHeaders.map { (key, value) -> "$key: $value" }.joinToString(",")
Log.d(TAG, "Setting additional headers: $headerString")
MPVLib.setOptionString("http-header-fields", headerString)
}
}
}
fun setPaused(paused: Boolean) {
isPaused = paused
if (isMpvInitialized) {
MPVLib.setPropertyBoolean("pause", paused)
}
}
fun seekTo(positionSeconds: Double) {
Log.d(TAG, "seekTo called: positionSeconds=$positionSeconds, isMpvInitialized=$isMpvInitialized")
if (isMpvInitialized) {
Log.d(TAG, "Executing MPV seek command: seek $positionSeconds absolute")
MPVLib.command(arrayOf("seek", positionSeconds.toString(), "absolute"))
}
}
fun setSpeed(speed: Double) {
if (isMpvInitialized) {
MPVLib.setPropertyDouble("speed", speed)
}
}
fun setVolume(volume: Double) {
if (isMpvInitialized) {
// MPV volume is 0-100
MPVLib.setPropertyDouble("volume", volume * 100.0)
}
}
fun setAudioTrack(trackId: Int) {
if (isMpvInitialized) {
if (trackId == -1) {
MPVLib.setPropertyString("aid", "no")
} else {
MPVLib.setPropertyInt("aid", trackId)
}
}
}
fun setSubtitleTrack(trackId: Int) {
Log.d(TAG, "setSubtitleTrack called: trackId=$trackId, isMpvInitialized=$isMpvInitialized")
if (isMpvInitialized) {
if (trackId == -1) {
Log.d(TAG, "Disabling subtitles (sid=no)")
MPVLib.setPropertyString("sid", "no")
MPVLib.setPropertyString("sub-visibility", "no")
} else {
Log.d(TAG, "Setting subtitle track to: $trackId")
MPVLib.setPropertyInt("sid", trackId)
// Ensure subtitles are visible
MPVLib.setPropertyString("sub-visibility", "yes")
// Debug: Verify the subtitle was set correctly
val currentSid = MPVLib.getPropertyInt("sid")
val subVisibility = MPVLib.getPropertyString("sub-visibility")
val subDelay = MPVLib.getPropertyDouble("sub-delay")
val subScale = MPVLib.getPropertyDouble("sub-scale")
Log.d(TAG, "After setting - sid=$currentSid, sub-visibility=$subVisibility, sub-delay=$subDelay, sub-scale=$subScale")
}
}
}
fun setResizeMode(mode: String) {
Log.d(TAG, "setResizeMode called: mode=$mode, isMpvInitialized=$isMpvInitialized")
if (isMpvInitialized) {
when (mode) {
"contain" -> {
// Letterbox - show entire video with black bars
MPVLib.setPropertyDouble("panscan", 0.0)
MPVLib.setPropertyString("keepaspect", "yes")
}
"cover" -> {
// Fill/crop - zoom to fill, cropping edges
MPVLib.setPropertyDouble("panscan", 1.0)
MPVLib.setPropertyString("keepaspect", "yes")
}
"stretch" -> {
// Stretch - disable aspect ratio
MPVLib.setPropertyDouble("panscan", 0.0)
MPVLib.setPropertyString("keepaspect", "no")
}
else -> {
// Default to contain
MPVLib.setPropertyDouble("panscan", 0.0)
MPVLib.setPropertyString("keepaspect", "yes")
}
}
}
}
// Subtitle Styling Methods
fun setSubtitleSize(size: Int) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle size: $size")
MPVLib.setPropertyInt("sub-font-size", size)
}
}
fun setSubtitleColor(color: String) {
if (isMpvInitialized) {
// MPV expects color in #AARRGGBB format, but we receive #RRGGBB
// Convert to MPV format with full opacity
val mpvColor = if (color.length == 7) "#FF${color.substring(1)}" else color
Log.d(TAG, "Setting subtitle color: $mpvColor")
MPVLib.setPropertyString("sub-color", mpvColor)
}
}
fun setSubtitleBackgroundColor(color: String, opacity: Float) {
if (isMpvInitialized) {
// Convert opacity (0-1) to hex (00-FF)
val alphaHex = (opacity * 255).toInt().coerceIn(0, 255).let {
String.format("%02X", it)
}
// MPV format: #AARRGGBB
val baseColor = if (color.startsWith("#")) color.substring(1) else color
val mpvColor = "#${alphaHex}${baseColor.takeLast(6)}"
Log.d(TAG, "Setting subtitle background: $mpvColor (opacity: $opacity)")
MPVLib.setPropertyString("sub-back-color", mpvColor)
}
}
fun setSubtitleBorderSize(size: Int) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle border size: $size")
MPVLib.setPropertyInt("sub-border-size", size)
}
}
fun setSubtitleBorderColor(color: String) {
if (isMpvInitialized) {
val mpvColor = if (color.length == 7) "#FF${color.substring(1)}" else color
Log.d(TAG, "Setting subtitle border color: $mpvColor")
MPVLib.setPropertyString("sub-border-color", mpvColor)
}
}
fun setSubtitleShadow(enabled: Boolean, offset: Int) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle shadow: enabled=$enabled, offset=$offset")
if (enabled) {
MPVLib.setPropertyInt("sub-shadow-offset", offset)
MPVLib.setPropertyString("sub-shadow-color", "#80000000")
} else {
MPVLib.setPropertyInt("sub-shadow-offset", 0)
}
}
}
fun setSubtitlePosition(pos: Int) {
if (isMpvInitialized) {
// sub-pos: 0=top, 100=bottom, can go beyond 100 for more offset
// UI sends bottomOffset (0=at bottom, higher=more up from bottom)
// Convert: MPV pos = 100 - (bottomOffset / screenHeightFactor)
// Simplified: just pass pos directly, UI should convert
Log.d(TAG, "Setting subtitle position: $pos")
MPVLib.setPropertyInt("sub-pos", pos)
}
}
fun setSubtitleDelay(delaySec: Double) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle delay: $delaySec seconds")
MPVLib.setPropertyDouble("sub-delay", delaySec)
}
}
fun setSubtitleScale(scale: Double) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle scale: $scale")
MPVLib.setPropertyDouble("sub-scale", scale)
}
}
fun setSubtitleAlignment(align: String) {
if (isMpvInitialized) {
// MPV sub-justify values: left, center, right, auto
val mpvAlign = when (align) {
"left" -> "left"
"right" -> "right"
"center" -> "center"
else -> "center"
}
Log.d(TAG, "Setting subtitle alignment: $mpvAlign")
MPVLib.setPropertyString("sub-justify", mpvAlign)
}
}
fun setSubtitleBold(bold: Boolean) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle bold: $bold")
MPVLib.setPropertyString("sub-bold", if (bold) "yes" else "no")
}
}
fun setSubtitleItalic(italic: Boolean) {
if (isMpvInitialized) {
Log.d(TAG, "Setting subtitle italic: $italic")
MPVLib.setPropertyString("sub-italic", if (italic) "yes" else "no")
}
}
// MPVLib.EventObserver implementation
override fun eventProperty(property: String) {
Log.d(TAG, "Property changed: $property")
when (property) {
"track-list" -> {
// Parse track list and notify React Native
parseAndSendTracks()
}
}
}
private fun parseAndSendTracks() {
try {
val trackCount = MPVLib.getPropertyInt("track-list/count") ?: 0
Log.d(TAG, "Track count: $trackCount")
val audioTracks = mutableListOf<Map<String, Any>>()
val subtitleTracks = mutableListOf<Map<String, Any>>()
for (i in 0 until trackCount) {
val type = MPVLib.getPropertyString("track-list/$i/type") ?: continue
val id = MPVLib.getPropertyInt("track-list/$i/id") ?: continue
val title = MPVLib.getPropertyString("track-list/$i/title") ?: ""
val lang = MPVLib.getPropertyString("track-list/$i/lang") ?: ""
val codec = MPVLib.getPropertyString("track-list/$i/codec") ?: ""
val trackName = when {
title.isNotEmpty() -> title
lang.isNotEmpty() -> lang.uppercase()
else -> "Track $id"
}
val track = mapOf(
"id" to id,
"name" to trackName,
"language" to lang,
"codec" to codec
)
when (type) {
"audio" -> {
Log.d(TAG, "Found audio track: $track")
audioTracks.add(track)
}
"sub" -> {
Log.d(TAG, "Found subtitle track: $track")
subtitleTracks.add(track)
}
}
}
Log.d(TAG, "Sending tracks - Audio: ${audioTracks.size}, Subtitles: ${subtitleTracks.size}")
onTracksChangedCallback?.invoke(audioTracks, subtitleTracks)
} catch (e: Exception) {
Log.e(TAG, "Error parsing tracks", e)
}
}
override fun eventProperty(property: String, value: Long) {
Log.d(TAG, "Property $property = $value (Long)")
}
override fun eventProperty(property: String, value: Double) {
Log.d(TAG, "Property $property = $value (Double)")
when (property) {
"time-pos" -> {
val duration = MPVLib.getPropertyDouble("duration/full") ?: MPVLib.getPropertyDouble("duration") ?: 0.0
onProgressCallback?.invoke(value, duration)
}
"duration/full", "duration" -> {
// Only fire onLoad once when video dimensions are available
// For HLS streams, duration updates incrementally as segments are fetched
if (!hasLoadEventFired) {
val width = MPVLib.getPropertyInt("width") ?: 0
val height = MPVLib.getPropertyInt("height") ?: 0
// Wait until we have valid dimensions before firing onLoad
if (width > 0 && height > 0 && value > 0) {
hasLoadEventFired = true
Log.d(TAG, "Firing onLoad event: duration=$value, width=$width, height=$height")
onLoadCallback?.invoke(value, width, height)
}
}
}
}
}
override fun eventProperty(property: String, value: Boolean) {
Log.d(TAG, "Property $property = $value (Boolean)")
when (property) {
"eof-reached" -> {
if (value) {
onEndCallback?.invoke()
}
}
}
}
override fun eventProperty(property: String, value: String) {
Log.d(TAG, "Property $property = $value (String)")
}
override fun event(eventId: Int) {
Log.d(TAG, "Event: $eventId")
// MPV event constants (from MPVLib source)
val MPV_EVENT_FILE_LOADED = 8
val MPV_EVENT_END_FILE = 7
when (eventId) {
MPV_EVENT_FILE_LOADED -> {
// File is loaded, start playback if not paused
if (!isPaused) {
MPVLib.setPropertyBoolean("pause", false)
}
}
MPV_EVENT_END_FILE -> {
Log.d(TAG, "MPV_EVENT_END_FILE")
// Heuristic: If duration is effectively 0 at end of file, it's a load error
val duration = MPVLib.getPropertyDouble("duration/full") ?: MPVLib.getPropertyDouble("duration") ?: 0.0
val timePos = MPVLib.getPropertyDouble("time-pos") ?: 0.0
val eofReached = MPVLib.getPropertyBoolean("eof-reached") ?: false
Log.d(TAG, "End stats - Duration: $duration, Time: $timePos, EOF: $eofReached")
if (duration < 1.0 && !eofReached) {
val customError = "Unable to play media. Source may be unreachable."
Log.e(TAG, "Playback error detected (heuristic): $customError")
onErrorCallback?.invoke(customError)
} else {
onEndCallback?.invoke()
}
}
}
}
}

View file

@ -0,0 +1,16 @@
package com.nuvio.app.mpv
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ViewManager
class MpvPackage : ReactPackage {
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
return emptyList()
}
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
return listOf(MpvPlayerViewManager(reactContext))
}
}

View file

@ -0,0 +1,241 @@
package com.nuvio.app.mpv
import android.graphics.Color
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReadableArray
import com.facebook.react.common.MapBuilder
import com.facebook.react.uimanager.SimpleViewManager
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.annotations.ReactProp
import com.facebook.react.uimanager.events.RCTEventEmitter
class MpvPlayerViewManager(
private val reactContext: ReactApplicationContext
) : SimpleViewManager<MPVView>() {
companion object {
const val REACT_CLASS = "MpvPlayer"
// Commands
const val COMMAND_SEEK = 1
const val COMMAND_SET_AUDIO_TRACK = 2
const val COMMAND_SET_SUBTITLE_TRACK = 3
}
override fun getName(): String = REACT_CLASS
override fun createViewInstance(context: ThemedReactContext): MPVView {
val view = MPVView(context)
// Note: Do NOT set background color - it will block the SurfaceView content
// Set up event callbacks
view.onLoadCallback = { duration, width, height ->
val event = Arguments.createMap().apply {
putDouble("duration", duration)
putInt("width", width)
putInt("height", height)
}
sendEvent(context, view.id, "onLoad", event)
}
view.onProgressCallback = { position, duration ->
val event = Arguments.createMap().apply {
putDouble("currentTime", position)
putDouble("duration", duration)
}
sendEvent(context, view.id, "onProgress", event)
}
view.onEndCallback = {
sendEvent(context, view.id, "onEnd", Arguments.createMap())
}
view.onErrorCallback = { message ->
val event = Arguments.createMap().apply {
putString("error", message)
}
sendEvent(context, view.id, "onError", event)
}
view.onTracksChangedCallback = { audioTracks, subtitleTracks ->
val event = Arguments.createMap().apply {
val audioArray = Arguments.createArray()
audioTracks.forEach { track ->
val trackMap = Arguments.createMap().apply {
putInt("id", track["id"] as Int)
putString("name", track["name"] as String)
putString("language", track["language"] as String)
putString("codec", track["codec"] as String)
}
audioArray.pushMap(trackMap)
}
putArray("audioTracks", audioArray)
val subtitleArray = Arguments.createArray()
subtitleTracks.forEach { track ->
val trackMap = Arguments.createMap().apply {
putInt("id", track["id"] as Int)
putString("name", track["name"] as String)
putString("language", track["language"] as String)
putString("codec", track["codec"] as String)
}
subtitleArray.pushMap(trackMap)
}
putArray("subtitleTracks", subtitleArray)
}
sendEvent(context, view.id, "onTracksChanged", event)
}
return view
}
private fun sendEvent(context: ThemedReactContext, viewId: Int, eventName: String, params: com.facebook.react.bridge.WritableMap) {
context.getJSModule(RCTEventEmitter::class.java)
.receiveEvent(viewId, eventName, params)
}
override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
return MapBuilder.builder<String, Any>()
.put("onLoad", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onLoad")))
.put("onProgress", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onProgress")))
.put("onEnd", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onEnd")))
.put("onError", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onError")))
.put("onTracksChanged", MapBuilder.of("phasedRegistrationNames", MapBuilder.of("bubbled", "onTracksChanged")))
.build()
}
override fun getCommandsMap(): Map<String, Int> {
return MapBuilder.of(
"seek", COMMAND_SEEK,
"setAudioTrack", COMMAND_SET_AUDIO_TRACK,
"setSubtitleTrack", COMMAND_SET_SUBTITLE_TRACK
)
}
override fun receiveCommand(view: MPVView, commandId: String?, args: ReadableArray?) {
android.util.Log.d("MpvPlayerViewManager", "receiveCommand: $commandId, args: $args")
when (commandId) {
"seek" -> {
val position = args?.getDouble(0)
android.util.Log.d("MpvPlayerViewManager", "Seek command received: position=$position")
position?.let { view.seekTo(it) }
}
"setAudioTrack" -> {
args?.getInt(0)?.let { view.setAudioTrack(it) }
}
"setSubtitleTrack" -> {
args?.getInt(0)?.let { view.setSubtitleTrack(it) }
}
}
}
// React Props
@ReactProp(name = "source")
fun setSource(view: MPVView, source: String?) {
source?.let { view.setDataSource(it) }
}
@ReactProp(name = "paused")
fun setPaused(view: MPVView, paused: Boolean) {
view.setPaused(paused)
}
@ReactProp(name = "volume", defaultFloat = 1.0f)
fun setVolume(view: MPVView, volume: Float) {
view.setVolume(volume.toDouble())
}
@ReactProp(name = "rate", defaultFloat = 1.0f)
fun setRate(view: MPVView, rate: Float) {
view.setSpeed(rate.toDouble())
}
// Handle backgroundColor prop to prevent crash from React Native style system
@ReactProp(name = "backgroundColor", customType = "Color")
fun setBackgroundColor(view: MPVView, color: Int?) {
// Intentionally ignoring - background color would block the TextureView content
// Leave the view transparent
}
@ReactProp(name = "resizeMode")
fun setResizeMode(view: MPVView, resizeMode: String?) {
view.setResizeMode(resizeMode ?: "contain")
}
@ReactProp(name = "headers")
fun setHeaders(view: MPVView, headers: com.facebook.react.bridge.ReadableMap?) {
if (headers != null) {
val headerMap = mutableMapOf<String, String>()
val iterator = headers.keySetIterator()
while (iterator.hasNextKey()) {
val key = iterator.nextKey()
headers.getString(key)?.let { value ->
headerMap[key] = value
}
}
view.setHeaders(headerMap)
} else {
view.setHeaders(null)
}
}
@ReactProp(name = "decoderMode")
fun setDecoderMode(view: MPVView, decoderMode: String?) {
view.decoderMode = decoderMode ?: "auto"
}
@ReactProp(name = "gpuMode")
fun setGpuMode(view: MPVView, gpuMode: String?) {
view.gpuMode = gpuMode ?: "gpu"
}
// Subtitle Styling Props
@ReactProp(name = "subtitleSize", defaultInt = 48)
fun setSubtitleSize(view: MPVView, size: Int) {
view.setSubtitleSize(size)
}
@ReactProp(name = "subtitleColor")
fun setSubtitleColor(view: MPVView, color: String?) {
view.setSubtitleColor(color ?: "#FFFFFF")
}
@ReactProp(name = "subtitleBackgroundOpacity", defaultFloat = 0.0f)
fun setSubtitleBackgroundOpacity(view: MPVView, opacity: Float) {
// Black background with user-specified opacity
view.setSubtitleBackgroundColor("#000000", opacity)
}
@ReactProp(name = "subtitleBorderSize", defaultInt = 3)
fun setSubtitleBorderSize(view: MPVView, size: Int) {
view.setSubtitleBorderSize(size)
}
@ReactProp(name = "subtitleBorderColor")
fun setSubtitleBorderColor(view: MPVView, color: String?) {
view.setSubtitleBorderColor(color ?: "#000000")
}
@ReactProp(name = "subtitleShadowEnabled", defaultBoolean = true)
fun setSubtitleShadowEnabled(view: MPVView, enabled: Boolean) {
view.setSubtitleShadow(enabled, if (enabled) 2 else 0)
}
@ReactProp(name = "subtitlePosition", defaultInt = 100)
fun setSubtitlePosition(view: MPVView, pos: Int) {
view.setSubtitlePosition(pos)
}
@ReactProp(name = "subtitleDelay", defaultFloat = 0.0f)
fun setSubtitleDelay(view: MPVView, delay: Float) {
view.setSubtitleDelay(delay.toDouble())
}
@ReactProp(name = "subtitleAlignment")
fun setSubtitleAlignment(view: MPVView, align: String?) {
view.setSubtitleAlignment(align ?: "center")
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -3,5 +3,5 @@
<string name="expo_splash_screen_resize_mode" translatable="false">contain</string>
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
<string name="expo_system_ui_user_interface_style" translatable="false">dark</string>
<string name="expo_runtime_version">1.2.1</string>
<string name="expo_runtime_version">1.4.1</string>
</resources>

View file

@ -1,17 +1,11 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColor">@android:color/black</item>
<item name="android:editTextStyle">@style/ResetEditText</item>
<style name="AppTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:enforceNavigationBarContrast" tools:targetApi="29">true</item>
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="android:statusBarColor">#020404</item>
<item name="android:windowBackground">@color/activityBackground</item>
</style>
<style name="ResetEditText" parent="@android:style/Widget.EditText">
<item name="android:padding">0dp</item>
<item name="android:textColorHint">#c8c8c8</item>
<item name="android:textColor">@android:color/black</item>
</style>
<style name="Theme.App.SplashScreen" parent="AppTheme">
<item name="android:windowBackground">@drawable/ic_launcher_background</item>
</style>

View file

@ -1,41 +1,33 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0'
minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24')
compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35')
targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34')
kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25'
ndkVersion = "26.1.10909125"
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath('com.android.tools.build:gradle')
classpath('com.facebook.react:react-native-gradle-plugin')
classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')
}
ext {
buildToolsVersion = "35.0.0"
minSdkVersion = 24
compileSdkVersion = 35
targetSdkVersion = 35
castFrameworkVersion = "22.1.0"
ndkVersion = "29.0.14206865" // Required for libmpv AAR built with NDK r29
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath('com.android.tools.build:gradle')
classpath('com.facebook.react:react-native-gradle-plugin')
classpath('org.jetbrains.kotlin:kotlin-gradle-plugin')
classpath("io.sentry:sentry-android-gradle-plugin:5.12.2")
}
}
apply plugin: "com.facebook.react.rootproject"
allprojects {
repositories {
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android'))
}
maven {
// Android JSC is installed from npm
url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist'))
}
google()
mavenCentral()
maven { url 'https://www.jitpack.io' }
}
repositories {
google()
mavenCentral()
maven { url 'https://www.jitpack.io' }
}
}
apply plugin: "expo-root-project"
apply plugin: "com.facebook.react.rootproject"

View file

@ -10,12 +10,12 @@
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
@ -41,6 +41,11 @@ newArchEnabled=true
# If set to false, you will be using JSC instead.
hermesEnabled=true
# Use this property to enable edge-to-edge display support.
# This allows your app to draw behind system bars for an immersive UI.
# Note: Only works with ReactActivity and should not be used with custom Activity.
edgeToEdgeEnabled=true
# Enable GIF support in React Native images (~200 B increase)
expo.gif.enabled=true
# Enable webp support in React Native images (~85 KB increase)
@ -54,7 +59,7 @@ EX_DEV_CLIENT_NETWORK_INSPECTOR=true
# Use legacy packaging to compress native libraries in the resulting APK.
expo.useLegacyPackaging=false
android.minSdkVersion=26
# Whether the app is configured to use edge-to-edge via the app config or `react-native-edge-to-edge` plugin
expo.edgeToEdgeEnabled=false
# Specifies whether the app is configured to use edge-to-edge via the app config or plugin
# WARNING: This property has been deprecated and will be removed in Expo SDK 55. Use `edgeToEdgeEnabled` or `react.edgeToEdgeEnabled` to determine whether the project is using edge-to-edge.
expo.edgeToEdgeEnabled=true

Binary file not shown.

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

7
android/gradlew vendored
View file

@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -115,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.

4
android/gradlew.bat vendored
View file

@ -70,11 +70,11 @@ goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell

View file

@ -1,4 +1,4 @@
defaults.url=https://sentry.io/
defaults.org=tapframe
defaults.project=react-native
# Using SENTRY_AUTH_TOKEN environment variable
auth.token=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

View file

@ -1,38 +1,39 @@
pluginManagement {
includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().toString())
def reactNativeGradlePlugin = new File(
providers.exec {
workingDir(rootDir)
commandLine("node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })")
}.standardOutput.asText.get().trim()
).getParentFile().absolutePath
includeBuild(reactNativeGradlePlugin)
def expoPluginsPath = new File(
providers.exec {
workingDir(rootDir)
commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })")
}.standardOutput.asText.get().trim(),
"../android/expo-gradle-plugin"
).absolutePath
includeBuild(expoPluginsPath)
}
plugins {
id("com.facebook.react.settings")
id("expo-autolinking-settings")
}
plugins { id("com.facebook.react.settings") }
extensions.configure(com.facebook.react.ReactSettingsExtension) { ex ->
if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') {
ex.autolinkLibrariesFromCommand()
} else {
def command = [
'node',
'--no-warnings',
'--eval',
'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
'react-native-config',
'--json',
'--platform',
'android'
].toList()
ex.autolinkLibrariesFromCommand(command)
ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand)
}
}
expoAutolinking.useExpoModules()
rootProject.name = 'Nuvio'
dependencyResolutionManagement {
versionCatalogs {
reactAndroidLibs {
from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml")))
}
}
}
apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");
useExpoModules()
expoAutolinking.useExpoVersionCatalog()
include ':app'
includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile())
includeBuild(expoAutolinking.reactNativeGradlePlugin)

View file

@ -2,7 +2,7 @@
"expo": {
"name": "Nuvio",
"slug": "nuvio",
"version": "1.2.1",
"version": "1.4.1",
"orientation": "default",
"backgroundColor": "#020404",
"icon": "./assets/ios/AppIcon.appiconset/Icon-App-60x60@3x.png",
@ -10,22 +10,24 @@
"scheme": "nuvio",
"newArchEnabled": true,
"splash": {
"image": "./assets/splash-icon.png",
"image": "./src/assets/splash-icon-new.png",
"resizeMode": "contain",
"backgroundColor": "#020404"
},
"ios": {
"supportsTablet": true,
"icon": "./assets/ios/AppIcon.appiconset/Icon-App-60x60@3x.png",
"buildNumber": "16",
"buildNumber": "37",
"infoPlist": {
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true
},
"NSBonjourServices": [
"_http._tcp"
"_http._tcp",
"_googlecast._tcp",
"_CC1AD845._googlecast._tcp"
],
"NSLocalNetworkUsageDescription": "App uses the local network to discover and connect to devices.",
"NSLocalNetworkUsageDescription": "Nuvio uses the local network to discover Cast-enabled devices on your WiFi network and to connect to local media servers.",
"NSMicrophoneUsageDescription": "This app does not require microphone access.",
"UIBackgroundModes": [
"audio"
@ -33,9 +35,10 @@
"LSSupportsOpeningDocumentsInPlace": true,
"UIFileSharingEnabled": true
},
"bundleIdentifier": "com.nuvio.app",
"bundleIdentifier": "com.nuvio.hub",
"associatedDomains": [],
"jsEngine": "hermes"
"jsEngine": "hermes",
"appleTeamId": "8QBDZ766S3"
},
"android": {
"adaptiveIcon": {
@ -45,10 +48,11 @@
"icon": "./assets/android/mipmap-xxxhdpi/ic_launcher.png",
"permissions": [
"INTERNET",
"WAKE_LOCK"
"WAKE_LOCK",
"android.permission.WRITE_SETTINGS"
],
"package": "com.nuvio.app",
"versionCode": 16,
"versionCode": 37,
"architectures": [
"arm64-v8a",
"armeabi-v7a",
@ -57,7 +61,6 @@
],
"jsEngine": "hermes"
},
"extra": {
"eas": {
"projectId": "909107b8-fe61-45ce-b02f-b02510d306a6"
@ -65,6 +68,7 @@
},
"owner": "nayifleo",
"plugins": [
"expo-live-activity",
[
"@sentry/react-native/expo",
{
@ -73,6 +77,12 @@
"organization": "tapframe"
}
],
[
"@kesha-antonov/react-native-background-downloader",
{
"skipMmkvDependency": true
}
],
"expo-localization",
[
"expo-updates",
@ -80,11 +90,12 @@
"username": "nayifleo"
}
],
"react-native-bottom-tabs",
[
"expo-libvlc-player",
"react-native-google-cast",
{
"localNetworkPermission": "Allow $(PRODUCT_NAME) to access your local network",
"supportsBackgroundPlayback": true
"receiverAppId": "CC1AD845",
"iosStartDiscoveryAfterFirstTapOnCastButton": true
}
]
],
@ -92,8 +103,8 @@
"enabled": true,
"checkAutomatically": "ON_ERROR_RECOVERY",
"fallbackToCacheTimeout": 30000,
"url": "https://grim-reyna-tapframe-69970143.koyeb.app/api/manifest"
"url": "https://ota.nuvioapp.space/api/manifest"
},
"runtimeVersion": "1.2.1"
"runtimeVersion": "1.4.1"
}
}

1
app/Streams.tsx Normal file
View file

@ -0,0 +1 @@

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View file

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#151515</color>
<color name="ic_launcher_background">#000000</color>
</resources>

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 111 KiB

View file

@ -1,128 +1,128 @@
{
"images":[
"images": [
{
"idiom":"iphone",
"size":"20x20",
"scale":"2x",
"filename":"Icon-App-20x20@2x.png"
"idiom": "iphone",
"size": "20x20",
"scale": "2x",
"filename": "Icon-App-20x20@2x.png"
},
{
"idiom":"iphone",
"size":"20x20",
"scale":"3x",
"filename":"Icon-App-20x20@3x.png"
"idiom": "iphone",
"size": "20x20",
"scale": "3x",
"filename": "Icon-App-20x20@3x.png"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"1x",
"filename":"Icon-App-29x29@1x.png"
"idiom": "iphone",
"size": "29x29",
"scale": "1x",
"filename": "Icon-App-29x29@1x.png"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"2x",
"filename":"Icon-App-29x29@2x.png"
"idiom": "iphone",
"size": "29x29",
"scale": "2x",
"filename": "Icon-App-29x29@2x.png"
},
{
"idiom":"iphone",
"size":"29x29",
"scale":"3x",
"filename":"Icon-App-29x29@3x.png"
"idiom": "iphone",
"size": "29x29",
"scale": "3x",
"filename": "Icon-App-29x29@3x.png"
},
{
"idiom":"iphone",
"size":"40x40",
"scale":"2x",
"filename":"Icon-App-40x40@2x.png"
"idiom": "iphone",
"size": "40x40",
"scale": "2x",
"filename": "Icon-App-40x40@2x.png"
},
{
"idiom":"iphone",
"size":"40x40",
"scale":"3x",
"filename":"Icon-App-40x40@3x.png"
"idiom": "iphone",
"size": "40x40",
"scale": "3x",
"filename": "Icon-App-40x40@3x.png"
},
{
"idiom":"iphone",
"size":"60x60",
"scale":"2x",
"filename":"Icon-App-60x60@2x.png"
"idiom": "iphone",
"size": "60x60",
"scale": "2x",
"filename": "Icon-App-60x60@2x.png"
},
{
"idiom":"iphone",
"size":"60x60",
"scale":"3x",
"filename":"Icon-App-60x60@3x.png"
"idiom": "iphone",
"size": "60x60",
"scale": "3x",
"filename": "Icon-App-60x60@3x.png"
},
{
"idiom":"iphone",
"size":"76x76",
"scale":"2x",
"filename":"Icon-App-76x76@2x.png"
"idiom": "iphone",
"size": "76x76",
"scale": "2x",
"filename": "Icon-App-76x76@2x.png"
},
{
"idiom":"ipad",
"size":"20x20",
"scale":"1x",
"filename":"Icon-App-20x20@1x.png"
"idiom": "ipad",
"size": "20x20",
"scale": "1x",
"filename": "Icon-App-20x20@1x.png"
},
{
"idiom":"ipad",
"size":"20x20",
"scale":"2x",
"filename":"Icon-App-20x20@2x.png"
"idiom": "ipad",
"size": "20x20",
"scale": "2x",
"filename": "Icon-App-20x20@2x.png"
},
{
"idiom":"ipad",
"size":"29x29",
"scale":"1x",
"filename":"Icon-App-29x29@1x.png"
"idiom": "ipad",
"size": "29x29",
"scale": "1x",
"filename": "Icon-App-29x29@1x.png"
},
{
"idiom":"ipad",
"size":"29x29",
"scale":"2x",
"filename":"Icon-App-29x29@2x.png"
"idiom": "ipad",
"size": "29x29",
"scale": "2x",
"filename": "Icon-App-29x29@2x.png"
},
{
"idiom":"ipad",
"size":"40x40",
"scale":"1x",
"filename":"Icon-App-40x40@1x.png"
"idiom": "ipad",
"size": "40x40",
"scale": "1x",
"filename": "Icon-App-40x40@1x.png"
},
{
"idiom":"ipad",
"size":"40x40",
"scale":"2x",
"filename":"Icon-App-40x40@2x.png"
"idiom": "ipad",
"size": "40x40",
"scale": "2x",
"filename": "Icon-App-40x40@2x.png"
},
{
"idiom":"ipad",
"size":"76x76",
"scale":"1x",
"filename":"Icon-App-76x76@1x.png"
"idiom": "ipad",
"size": "76x76",
"scale": "1x",
"filename": "Icon-App-76x76@1x.png"
},
{
"idiom":"ipad",
"size":"76x76",
"scale":"2x",
"filename":"Icon-App-76x76@2x.png"
"idiom": "ipad",
"size": "76x76",
"scale": "2x",
"filename": "Icon-App-76x76@2x.png"
},
{
"idiom":"ipad",
"size":"83.5x83.5",
"scale":"2x",
"filename":"Icon-App-83.5x83.5@2x.png"
"idiom": "ipad",
"size": "83.5x83.5",
"scale": "2x",
"filename": "Icon-App-83.5x83.5@2x.png"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"scale" : "1x",
"filename" : "ItunesArtwork@2x.png"
"size": "1024x1024",
"idiom": "ios-marketing",
"scale": "1x",
"filename": "ItunesArtwork@2x.png"
}
],
"info":{
"version":1,
"author":"easyappicon"
"info": {
"version": 1,
"author": "easyappicon"
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 718 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show more