looks like your account may be trying to send to phone for a login -- can u remove 2fa maybe?
It already says 2fa is not enabled....

what about login and security at the top- is there a setting to use cell# for signing in (like One time password stuff?)... i see it on mine - looks like I could add support to do that - its been very successful in the other TVE providers.
I just did a manual login....no options, just says it sent a passcode to both my phone and email (I did receive the email). I agree it's strange...seems like 2fa is being forced regardless of the setting.
I just wanted to say thank you KineticMan!! Fast Channels is truly awesome. I do have a question when displaying Movies in the Fast Channels guide each Movie doesn't have the year it was released after its name? Is there a way to add that? I really appreciate all you hard work on this project.
ok i'll add support for phone setup and caught a little bug that might fix yours too.
thanks!
built-in guide data is pretty sparse (only what i can get from upstream). i could add it for some sources, but it'll never be as rich as real Gracenote coverage. will add best attempt in next version
This is working beautifully and fully with all downstream recipients (Channels, PLM, ADBTuner). No notes except it literally cut my feeds in half because I was keeping separate EPG (using Native) and Gracenote ones for FAST. Also now don't need to worry if something in TVE is missing it's Gracenote ID as I can fix it further down the pike and still have the same FC playlist!
Yay! I left you a note elsewhere that TCM Pacific needs the tvg-shift="+3", otherwise it won't have the correct guide data. Also, any reason it is force to a phone login?
Okay, so here was the fun with NBC.
This time, I did the login and it managed to get itself in fine without intervention. I don't know what changed in 5.6.0, but it happily did what it was supposed to. But just like last time, after a day, it was no longer logged in and this happened in the logs (note the coding error) when I attempted to play a station:
2026-10-17 13:08:49,460 INFO app.routes.tasks: Enqueued Spectrum sign-in
2026-10-17 13:08:49,471 INFO app.scrapers.spectrum: [spectrum] refresh_token has 2.8h left before its ceiling — triggered unattended re-login
2026-10-17 13:08:52,621 INFO app.tve.browser_login.spectrum: [spectrum-signin][debug] starting run: username_set=True password_set=True force_fresh=False foreign_cookies_scrubbed=True
2026-10-17 13:08:52,632 INFO app.tve.browser_login.spectrum: [spectrum-signin][debug] profile_dir=/data/browser_profiles/spectrum just_migrated=False
2026-10-17 13:09:41,498 INFO app.tve.browser_login.spectrum: [spectrum-signin][debug] candidate token found (source=localStorage, len=13590) — validating
2026-10-17 13:09:42,609 INFO app.tve.browser_login.spectrum: [spectrum-signin][debug] validateSession result: False
2026-10-17 13:09:42,610 INFO app.tve.browser_login.spectrum: [spectrum-signin] captured token failed validateSession — discarding, still waiting
2026-10-17 13:09:42,612 INFO app.tve.browser_login.spectrum: [spectrum-signin] SSO-carried-over token failed verification — clearing Spectrum/Cox cookies only to force a fresh login
2026-10-17 13:09:42,698 WARNING app.tve.browser_login.spectrum: [spectrum-signin] page JS error: can't access property "get", angular.element(...).injector() is undefined
2026-10-17 13:09:42,830 WARNING app.tve.browser_login.spectrum: [spectrum-signin] page CLOSE event fired
2026-10-17 13:09:44,602 ERROR app.tve.browser_login.spectrum: [spectrum-signin] browser session failed
Traceback (most recent call last):
File "/app/app/tve/browser_login/spectrum.py", line 750, in run_spectrum_signin
page.goto(_START_URL, wait_until='domcontentloaded', timeout=30000)
File "/usr/local/lib/python3.12/site-packages/playwright/sync_api/_generated.py", line 9875, in goto
self._sync(
File "/usr/local/lib/python3.12/site-packages/playwright/_impl/_sync_base.py", line 115, in _sync
return task.result()
^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/playwright/_impl/_page.py", line 560, in goto
return await self._main_frame.goto(**locals_to_params(locals()))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/playwright/_impl/_frame.py", line 156, in goto
await self._channel.send(
File "/usr/local/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 76, in send
return await self._connection.wrap_api_call(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/playwright/_impl/_connection.py", line 632, in wrap_api_call
raise rewrite_error(error, f"{parsed_st['apiName']}: {error}") from None
playwright._impl._errors.Error: Page.goto: NS_BINDING_ABORTED; maybe frame was detached?
Call log:
- navigating to "https://watch.spectrum.net/guide", waiting until "domcontentloaded"
2026-10-17 13:13:54,210 INFO app.tve.signin_notice: [tve] nbc needs signing in again: Cox / Cox Spectrum sign-in needs you. Click "Sign in" for this network in Settings > TV Everywhere to sign in again.
2026-10-17 13:13:54,673 WARNING app.routes.play: [nbc-tve-dash] resolve failed for nbc: NBC TVE: Adobe Pass auth failed: Cox / Cox Spectrum sign-in needs you. Click "Sign in" for this network in Settings > TV Everywhere to sign in again.
2026-10-17 13:13:57,275 WARNING app.routes.play: [nbc-tve-dash] resolve failed for nbc: NBC TVE: Adobe Pass auth failed: Cox / Cox Spectrum sign-in needs you. Click "Sign in" for this network in Settings > TV Everywhere to sign in again.
I then attempted to change to the phone sign-in (once I realized where I was supposed to), but the login part never came up and I saw in the logs it was still trying to connect the old way and was stuck:
2026-10-17 13:14:48,974 INFO app.routes.tasks: Enqueued NBC MVPD browser login for mso_id=Cox
2026-10-17 13:14:50,535 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] starting attempt=1 mso_id=Cox; cleared prior modal state
2026-10-17 13:14:51,092 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] Adobe session ready requestor_id=nbcentertainment HTTP 200 cached_client=False authenticate=https://sp.auth.adobe.com/api/v2/authenticate/nbcentertainment/STKCZ5B
2026-10-17 13:15:06,775 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] navigation response HTTP 200 https://sp.auth.adobe.com/api/v2/authenticate/nbcentertainment/STKCZ5B
2026-10-17 13:15:19,299 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] navigation response HTTP 200 https://tve.spectrum.net/openam/SSOPOST/metaAlias/charter/idp
2026-10-17 13:15:20,068 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] navigation response HTTP 200 https://id.spectrum.net/openam/SSOPOST/metaAlias/charter/idp
2026-10-17 13:15:21,930 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] provider redirect settle result=settled landing=https://id.spectrum.net/openam/SSOPOST/metaAlias/charter/idp
2026-10-17 13:15:25,456 INFO app.tve.browser_login.common: [nbc-mvpd-login] autofill: cancelled while waiting for a password field
2026-10-17 13:15:25,870 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] authorization still pending (profile_http=200 landing=https://id.spectrum.net/openam/SSOPOST/metaAlias/charter/idp next_poll=3.0s)
2026-10-17 13:15:26,461 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] navigation response HTTP 200 https://www.recaptcha.net/recaptcha/enterprise/anchor
2026-10-17 13:15:34,477 INFO app.routes.api_tve: [tve] nbc_tve now signs in with its own TV provider login
2026-10-17 13:16:48,512 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] authorization still pending (profile_http=200 landing=https://id.spectrum.net/login next_poll=20.0s)
2026-10-17 13:17:51,444 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] authorization still pending (profile_http=200 landing=https://id.spectrum.net/login next_poll=20.0s)
2026-10-17 13:18:54,286 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] authorization still pending (profile_http=200 landing=https://id.spectrum.net/login next_poll=20.0s)
2026-10-17 13:19:57,266 INFO app.tve.browser_login.nbc: [nbc-mvpd-login] authorization still pending (profile_http=200 landing=https://id.spectrum.net/login next_poll=20.0s)
The only way I could stop it was by manually restarting the Container. After it was back up, I was able to do the phone login and everything worked fine:
2026-10-17 13:33:10,626 INFO app.tve.link_login: [link-login] NBC: waiting for the Cox sign-in
2026-10-17 13:33:30,971 INFO app.tve.link_login: [link-login] NBC: signed in via Cox (authorized)
2026-10-17 13:33:30,991 INFO app.tve.link_login: [link-login] nbc: re-enabled 2 channel(s) that had been switched off as not authorized
2026-10-17 13:33:30,999 INFO app.routes.tasks: Enqueued XML artifact refresh
2026-10-17 13:33:57,677 INFO app.routes.tasks: Enqueued scrape for nbc_tve (force full)
2026-10-17 13:33:58,513 INFO app.worker: [nbc_tve] Scrape job started
2026-10-17 13:34:02,613 INFO app.worker: [nbc_tve] Scrape complete — 12 channels, 334 programs (4.1s)
2026-10-17 13:34:02,671 INFO app.routes.images: [images] pre-warm starting: 10 URLs — 10 already fresh, 0 to fetch (4 workers)
2026-10-17 13:34:02,671 INFO app.routes.images: [images] pre-warm done: 0 cached, 10 already fresh, 0 failed (of 10 total)
2026-10-17 13:34:02,680 INFO app.worker: [xml-cache] refresh already running
2026-10-17 13:34:04,612 INFO app.routes.tasks: Enqueued scrape for nbc_tve (force full)
2026-10-17 13:34:05,501 INFO app.worker: [nbc_tve] Scrape job started
2026-10-17 13:34:10,120 INFO app.worker: [nbc_tve] Scrape complete — 12 channels, 334 programs (4.6s)
2026-10-17 13:34:10,140 INFO app.routes.images: [images] pre-warm starting: 10 URLs — 10 already fresh, 0 to fetch (4 workers)
2026-10-17 13:34:10,141 INFO app.routes.images: [images] pre-warm done: 0 cached, 10 already fresh, 0 failed (of 10 total)
2026-10-17 13:34:10,147 INFO app.worker: [xml-cache] refresh already running
2026-10-17 13:34:14,860 INFO app.routes.tasks: Enqueued stream audit for nbc_tve
2026-10-17 13:34:15,780 INFO app.worker: [audit] nbc_tve: checking 12 channels (scope=linear, events skipped=0)…
2026-10-17 13:34:31,053 INFO app.worker: [audit] not authorized: NBC Universo (East) (NBC TVE: Cox account is not entitled to mun2.)
2026-10-17 13:34:31,832 INFO app.worker: [audit] not authorized: NBC Universo (West) (NBC TVE: Cox account is not entitled to mun2.)
2026-10-17 13:34:32,169 INFO app.worker: [audit] nbc_tve: done — total=12 checked=10 flagged=0 bridged=0 dead=0 vod=0 not_authorized=2 errors=0 skipped_403=0
I'll check in again in a couple of days and see how it does at maintaining a login and if there are other issues.
Everyone,
In an effort to drive KineticMan completely insane with massive amounts of requests to more easily keep track of various sources we'd like to see integrated into FastChannels, I've put together this fairly comprehensive spreadsheet of the many, many places we might get stations from, with a particular emphasis towards TVE/Premium options:
If you have something else that you'd like to see added, please PM me with the details and I'll add them in here. Also, do note that there is no viewpoint and/or source bias in this list; it's simply trying to capture everything that's available. As always, it's up to the individual user to decide what stations they would like to keep in their personal setup.
Thanks, and enjoy!
great! looks like I didn't account for changing from web sign-in to new phone style. so far, the phone-style sign-on has been working great for me. wish it didnt take user intervention, but small price to pay instead of trying to automate 5000000 provider sites.
@babsonnexus In looking at the spreadsheet, is there anyway you can make the Header row (Status, Category, etc.) static?
Unfortunately, it's an issue with how Google presents sheets. The only way to get row/column freezing is to use a share method that exposes PII, and I don't want to do that.
EDIT:
Okay, looks like you can at least get it to export offline in Excel format by changing the end of the link from pubhtml to pub?output=xlsx (you can also do csv instead, but you'd loose all the formatting).
It comes already with the true column/row freeze and the filters!
@babsonnexus Got it... thanks...
Using LibreOffice so most if not all of the formatting came thru...
Plus, I'm able to resize the columns so I can see the whole table on one screen...
thanks again....
Saved in Excel but had to fiddle with the cell sizes to make everything visible. Could you explain the color coding?
I've been getting a weird problem in every version of fastchannels since installing where when I watch Pluto tv and it goes to commercial the audio glitches and goes out of sync with the video. The only fix is changing channels. This happens on Google tv, Android, and iOS. It doesn't happen with any other source.
I have also seen this, but I don't think it is restricted to FastChannels. I think it is an interaction between Pluto and ChannelsDVR.
Thanks for sharing that! When I see "add custom channel" it means nothing to me.. when I see "you can add any youtube channel"... I go... "Ah!" Made a U2 50 channel for my Music menu in Channels. https://www.youtube.com/watch?v=wIeQDAyIYbo
Have not seen that in a while. Though, i do not use any Google/Android clients.
Normally, Pluto has that repeating issue, where it jumps back either 10 secs or 10 min.
You could trying setting in the Channels DVR m3u source settings the Stream Format, change it from HLS to MPEG-TS. This, has helped address some users stability issues with Pluto in the past.
I don't get this glitch very often, just the usual jump back after a commercial and some channels seem worse than others. However, I get these same issues when using the native Pluto app, so I don't think it's anything to do with FastChannels. I've been starting to turn up other FAST sources to replace Pluto channels whenever possible. Pluto has been my least reliable source.
Just a follow-up that NBC did log itself out with the phone method and then I had to manually do it again.
I'm wondering if it is possible for FC to do the phone login itself? It already has the link, the login for TVE, and Playwright, so I'm thinking it just opens that login method in the backend and does the few steps necessary automatically. Then, it wouldn't need any user intervention at all (hopefully)!