Repository: yt-dlp/yt-dlp

Issue:
[TikTok] Unable to extract sigi state
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I have **updated yt-dlp to nightly or master** ([update instructions](https://github.com/yt-dlp/yt-dlp#update-channels))
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [x] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

Caribbean

### Provide a description that is worded well enough to be understood

I have encountered a problem where some TikToks (linked below) return an "unable to find video in feed" warning and "unable to extract sigi state" error in the stable version of yt-dlp.

The videos play in the browser and on mobile without issue, both with and without an account logged in. 

A captcha only comes up when opening the links without an account. I also attempted using cookies from a logged in browser but the same warning and error appears.

Affected URLs:
https://vm.tiktok.com/ZMjTDCQjE/
https://vm.tiktok.com/ZMjTXWVfy/
https://vm.tiktok.com/ZMjTYt732/

These are all the TikToks I have encountered this problem with, most others seem unaffected. 

Any assistance would be appreciated. If I am missing any information, let me know and I will provide as soon as possible.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [ ] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU', 'https://vm.tiktok.com/ZMjTDCQjE/']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8 
[debug] yt-dlp version nightly@2023.11.16.232727 from yt-dlp/yt-dlp-nightly-builds [66a0127d4] (pip) 
[debug] Python 3.11.2 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1s  1 Nov 2022) 
[debug] exe versions: ffmpeg 4.4-full_build-www.gyan.dev (setts), ffprobe 4.4-full_build-www.gyan.dev 
[debug] Optional libraries: Cryptodome-3.19.0, brotli-1.1.0, certifi-2023.07.22, mutagen-1.47.0, requests-2.31.0, sqlite3-3.39.4, urllib3-2.1.0, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Loaded 1907 extractors 
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest 
Latest version: nightly@2023.11.16.232727 from yt-dlp/yt-dlp-nightly-builds 
yt-dlp is up to date (nightly@2023.11.16.232727 from yt-dlp/yt-dlp-nightly-builds)
[vm.tiktok] Extracting URL: https://vm.tiktok.com/ZMjTDCQjE/ 
[vm.tiktok] ZMjTDCQjE: Downloading webpage 
xtractor\common.py", line 715, in extract
    ie_result = self._real_extract(url)
                ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\tiktok.py", line 700, in _real_extract
    sigi_data = self._get_sigi_state(webpage, video_id)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\tiktok.py", line 52, in _get_sigi_state
    return self._search_json(
           ^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 1277, in _search_json
    json_string = self._search_regex(
                  ^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 1263, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
```



Discussion:
> I have encountered a problem where some TikToks (linked below) return an "unable to find video in feed" warning

This is a known issue being tracked in #6483 and #4992. It seems to happen because the videos have had their audio taken down or the videos have been otherwise de-listed/shadowbanned for some reason. The extractor will then fallback to trying to get the video info from the webpage instead of API.

> and "unable to extract sigi state" error in the stable version of yt-dlp.

This happens when Tiktok serves you a webpage, but it is not the actual video webpage. Usually because it is a captcha challenge page instead; or it could be a "video not found" page except they didn't return an HTTP 404 error. Your examples all exist, though, so you're likely getting the captcha.

> A captcha only comes up when opening the links without an account. I also attempted using cookies from a logged in browser but the same warning and error appears.

I don't think logged-in cookies will help. Maybe try logging out of Tiktok, solving the captcha challenge, and then passing those cookies (this is how we were able to bypass the Douyin captchas)

BTW did you modify your log? It seems to be missing a few lines after `[vm.tiktok] ZMjTDCQjE: Downloading webpage`

Please do not doctor your logs. It just makes troubleshooting/debugging more difficult for the developers, and essentially wastes our time.

Since I can't tell what's actually going wrong via your log, one other thing you could try is passing the *actual* TikTok video URLs instead of the tracking links that you're attempting with:

```
https://www.tiktok.com/@moxabateman/video/7301251635676957985
https://www.tiktok.com/@ted.i0/video/7301123513786617094
https://www.tiktok.com/@anthonypert/video/7300265150420880686
```

Finally, I can't reproduce the error with any of the links (even the tracking link versions), so your IP may be flagged for captchas or something
```
[debug] Command-line config: ['-vF', 'https://vm.tiktok.com/ZMjTDCQjE/']
[debug] User config "/home/user/.config/yt-dlp/config": ['--alias', 'container', '--cookies-from-browser firefox::{}', '--alias', 'x', '--config-location ~/.config/yt-dlp/x_{}.conf']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.11.16 from yt-dlp/yt-dlp [24f827875]
[debug] Lazy loading extractors is disabled
[debug] Python 3.11.5 (CPython x86_64 64bit) - Linux-6.6.1-arch1-1-x86_64-with-glibc2.38 (OpenSSL 3.1.4 24 Oct 2023, glibc 2.38)
[debug] exe versions: ffmpeg 6.0 (setts), ffprobe 6.0
[debug] Optional libraries: Cryptodome-3.12.0, brotlicffi-1.1.0.0, certifi-2023.07.22, mutagen-1.47.0, requests-2.31.0, sqlite3-3.44.0, urllib3-2.1.0, websockets-10.4
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Extractor Plugins: AllstarIE, AllstarProfileIE, NSigDeno (YoutubeIE), TTUser (TikTokUserIE)
[debug] Plugin directories: ['/home/user/yt-dlp-plugins/yt-dlp-YTNSigDeno/yt_dlp_plugins', '/home/user/yt-dlp-plugins/pr_extractors/yt_dlp_plugins', '/home/user/yt-dlp-plugins/yt-dlp-TTUser/yt_dlp_plugins']
[debug] Loaded 1912 extractors
[vm.tiktok] Extracting URL: https://vm.tiktok.com/ZMjTDCQjE/
[vm.tiktok] ZMjTDCQjE: Downloading webpage
[TikTok] Extracting URL: https://www.tiktok.com/@moxabateman/video/7301251635676957985?_t=8hMwQn8eKKz&_r=1
[TikTok] 7301251635676957985: Downloading video feed
WARNING: [TikTok] 7301251635676957985: Unable to find video in feed; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U; trying with webpage
[TikTok] 7301251635676957985: Downloading webpage
[debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
[info] Available formats for 7301251635676957985:
ID       EXT RESOLUTION │ PROTO │ VCODEC  ACODEC  MORE INFO
───────────────────────────────────────────────────────────
0        mp4 576x1024   │ https │ unknown unknown
download mp4 576x1024   │ https │ unknown unknown
```
> This is a known issue being tracked in #6483 and #4992. It seems to happen because the videos have had their audio taken down or the videos have been otherwise de-listed/shadowbanned for some reason. The extractor will then fallback to trying to get the video info from the webpage instead of API.

> This happens when Tiktok serves you a webpage, but it is not the actual video webpage. Usually because it is a captcha challenge page instead; or it could be a "video not found" page except they didn't return an HTTP 404 error. Your examples all exist, though, so you're likely getting the captcha.

Okay, I see. I was not aware it was related to those particular issues. I understand the problem a little better now. So it seems the captchas on my side of things are the main cause of my problem. 

> I don't think logged-in cookies will help. Maybe try logging out of Tiktok, solving the captcha challenge, and then passing those cookies (this is how we were able to bypass the Douyin captchas)

I will have try this solution again and report back. After logging out in the browser, the captchas stopped appearing so there is nothing to solve. I tried downloading normally and then with cookies from the browser where I am logged out but the issue persists.

> BTW did you modify your log? It seems to be missing a few lines after `[vm.tiktok] ZMjTDCQjE: Downloading webpage`

> Please do not doctor your logs. It just makes troubleshooting/debugging more difficult for the developers, and essentially wastes our time.

I apologize for this, the missing logs were not intentional. Perhaps I copied it incorrectly and did not notice the missing information. This is the most recent log I received if it is still needed.

```
[debug] Command-line config: ['-vU', 'https://vm.tiktok.com/ZMjTDCQjE/']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8 
[debug] yt-dlp version nightly@2023.11.18.232705 from yt-dlp/yt-dlp-nightly-builds [585d0ed9a] (pip) 
[debug] Python 3.11.2 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1s  1 Nov 2022) 
[debug] exe versions: ffmpeg 4.4-full_build-www.gyan.dev (setts), ffprobe 4.4-full_build-www.gyan.dev 
[debug] Optional libraries: Cryptodome-3.19.0, brotli-1.1.0, certifi-2023.07.22, mutagen-1.47.0, requests-2.31.0, sqlite3-3.39.4, urllib3-2.1.0, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Loaded 1910 extractors 
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest 
Latest version: nightly@2023.11.18.232705 from yt-dlp/yt-dlp-nightly-builds 
yt-dlp is up to date (nightly@2023.11.18.232705 from yt-dlp/yt-dlp-nightly-builds)
[vm.tiktok] Extracting URL: https://vm.tiktok.com/ZMjTDCQjE/ 
[vm.tiktok] ZMjTDCQjE: Downloading webpage 
[TikTok] Extracting URL: https://www.tiktok.com/@moxabateman/video/7301251635676957985?_t=8hMwQn8eKKz&_r=1 
[TikTok] 7301251635676957985: Downloading video feed 
WARNING: [TikTok] 7301251635676957985: Unable to find video in feed; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= 
, filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U; trying with webpage
[TikTok] 7301251635676957985: Downloading webpage 
ERROR: [TikTok] 7301251635676957985: Unable to extract sigi state; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , 
filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 715, in extract 
    ie_result = self._real_extract(url)
                ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\tiktok.py", line 700, in _real_extract
    sigi_data = self._get_sigi_state(webpage, video_id)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\tiktok.py", line 52, in _get_sigi_state
    return self._search_json(
           ^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 1277, in _search_json
    json_string = self._search_regex(
                  ^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 1263, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
```

> Since I can't tell what's actually going wrong via your log, one other thing you could try is passing the _actual_ TikTok video URLs instead of the tracking links that you're attempting with:
> 
> ```
> https://www.tiktok.com/@moxabateman/video/7301251635676957985
> https://www.tiktok.com/@ted.i0/video/7301123513786617094
> https://www.tiktok.com/@anthonypert/video/7300265150420880686
> ```

The actual URLs return the same error for me. So it does appear to be the captcha holding me back here.

```
[debug] Command-line config: ['-vU', 'https://www.tiktok.com/@moxabateman/video/7301251635676957985']
[debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8 
[debug] yt-dlp version nightly@2023.11.18.232705 from yt-dlp/yt-dlp-nightly-builds [585d0ed9a] (pip) 
[debug] Python 3.11.2 (CPython AMD64 64bit) - Windows-10-10.0.19045-SP0 (OpenSSL 1.1.1s  1 Nov 2022) 
[debug] exe versions: ffmpeg 4.4-full_build-www.gyan.dev (setts), ffprobe 4.4-full_build-www.gyan.dev 
[debug] Optional libraries: Cryptodome-3.19.0, brotli-1.1.0, certifi-2023.07.22, mutagen-1.47.0, requests-2.31.0, sqlite3-3.39.4, urllib3-2.1.0, websockets-12.0
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Loaded 1910 extractors 
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest 
Latest version: nightly@2023.11.18.232705 from yt-dlp/yt-dlp-nightly-builds 
yt-dlp is up to date (nightly@2023.11.18.232705 from yt-dlp/yt-dlp-nightly-builds)
[TikTok] Extracting URL: https://www.tiktok.com/@moxabateman/video/7301251635676957985 
[TikTok] 7301251635676957985: Downloading video feed 
WARNING: [TikTok] 7301251635676957985: Unable to find video in feed; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= 
, filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U; trying with webpage
[TikTok] 7301251635676957985: Downloading webpage 
ERROR: [TikTok] 7301251635676957985: Unable to extract sigi state; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , 
filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 715, in extract 
    ie_result = self._real_extract(url)
                ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\tiktok.py", line 700, in _real_extract
    sigi_data = self._get_sigi_state(webpage, video_id)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\tiktok.py", line 52, in _get_sigi_state
    return self._search_json(
           ^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 1277, in _search_json
    json_string = self._search_regex(
                  ^^^^^^^^^^^^^^^^^^^
  File "C:\KamiBot\.venv\Lib\site-packages\yt_dlp\extractor\common.py", line 1263, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
```

> Finally, I can't reproduce the error with any of the links (even the tracking link versions), so your IP may be flagged for captchas or something
> 
> ```
> [debug] Command-line config: ['-vF', 'https://vm.tiktok.com/ZMjTDCQjE/']
> [debug] User config "/home/user/.config/yt-dlp/config": ['--alias', 'container', '--cookies-from-browser firefox::{}', '--alias', 'x', '--config-location ~/.config/yt-dlp/x_{}.conf']
> [debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
> [debug] yt-dlp version stable@2023.11.16 from yt-dlp/yt-dlp [24f827875]
> [debug] Lazy loading extractors is disabled
> [debug] Python 3.11.5 (CPython x86_64 64bit) - Linux-6.6.1-arch1-1-x86_64-with-glibc2.38 (OpenSSL 3.1.4 24 Oct 2023, glibc 2.38)
> [debug] exe versions: ffmpeg 6.0 (setts), ffprobe 6.0
> [debug] Optional libraries: Cryptodome-3.12.0, brotlicffi-1.1.0.0, certifi-2023.07.22, mutagen-1.47.0, requests-2.31.0, sqlite3-3.44.0, urllib3-2.1.0, websockets-10.4
> [debug] Proxy map: {}
> [debug] Request Handlers: urllib, requests
> [debug] Extractor Plugins: AllstarIE, AllstarProfileIE, NSigDeno (YoutubeIE), TTUser (TikTokUserIE)
> [debug] Plugin directories: ['/home/user/yt-dlp-plugins/yt-dlp-YTNSigDeno/yt_dlp_plugins', '/home/user/yt-dlp-plugins/pr_extractors/yt_dlp_plugins', '/home/user/yt-dlp-plugins/yt-dlp-TTUser/yt_dlp_plugins']
> [debug] Loaded 1912 extractors
> [vm.tiktok] Extracting URL: https://vm.tiktok.com/ZMjTDCQjE/
> [vm.tiktok] ZMjTDCQjE: Downloading webpage
> [TikTok] Extracting URL: https://www.tiktok.com/@moxabateman/video/7301251635676957985?_t=8hMwQn8eKKz&_r=1
> [TikTok] 7301251635676957985: Downloading video feed
> WARNING: [TikTok] 7301251635676957985: Unable to find video in feed; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U; trying with webpage
> [TikTok] 7301251635676957985: Downloading webpage
> [debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, size, br, asr, proto, vext, aext, hasaud, source, id
> [info] Available formats for 7301251635676957985:
> ID       EXT RESOLUTION │ PROTO │ VCODEC  ACODEC  MORE INFO
> ───────────────────────────────────────────────────────────
> 0        mp4 576x1024   │ https │ unknown unknown
> download mp4 576x1024   │ https │ unknown unknown
> ```

I understand. I will try your suggestion above again.

Thank you for your assistance.

> I apologize for this, the missing logs were not intentional. Perhaps I copied it incorrectly and did not notice the missing information. This is the most recent log I received if it is still needed.

Ah, no worries, sorry if I was harsh. Full log is appreciated, thanks

> I will have try this solution again and report back. After logging out in the browser, the captchas stopped appearing so there is nothing to solve. I tried downloading normally and then with cookies from the browser where I am logged out but the issue persists.

It may be fingerprinting-related then. If that's the case, then there's probably nothing we can do until #7595 is finished/merged
I started having this same issue today (wasn't happening last time I downloaded videos yesterday). In my experience so far, it only ever happens on videos from private accounts, even though I follow them from my account and am using cookies from the browser in which I'm logged in on. As I mentioned, this method of using cookies was working fine up until today when all private videos have started throwing this error.  

When I try and run with `verbose: True` from the API I get this python error:

```
Extracting cookies from firefox
[debug] Extracting cookies from: "/Users/z/Library/Application Support/Firefox/Profiles/ghy7tyk.default-release/cookies.sqlite"
Extracted 233 cookies from firefox
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.11.16 from yt-dlp/yt-dlp [24f827875] (pip) API
[debug] params: {'no_warnings': True, 'outtmpl': {'default': '/%(upload_date>%Y-%m-%d)s_%(uploader)s_%(id)s.%(ext)s', 'chapter': '%(title)s - %(section_number)03d %(section_title)s [%(id)s].%(ext)s'}, 'compat_opts': set(), 'http_headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.50 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-us,en;q=0.5', 'Sec-Fetch-Mode': 'navigate'}, 'forceprint': {}, 'print_to_file': {}, 'cookiesfrombrowser': ('firefox',), 'verbose': True}
[debug] Python 3.9.0 (CPython x86_64 64bit) - macOS-10.15.7-x86_64-i386-64bit (OpenSSL 1.1.1g  21 Apr 2020)
[debug] exe versions: ffmpeg N-106844-g0a58fdfd3e-tessus (setts), ffprobe N-106844-g0a58fdfd3e-tessus
[debug] Optional libraries: Cryptodome-3.12.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.45.1, requests-2.31.0, sqlite3-3.32.3, urllib3-2.1.0, websockets-9.1, xattr-0.9.9
[debug] Proxy map: {}
[debug] Request Handlers: urllib, requests
[debug] Loaded 1901 extractors
[TikTok] Extracting URL: https://www.tiktok.com/@ebanderson/video/7310763158019329322
[TikTok] 7310763158019329322: Downloading video feed
[TikTok] 7310763158019329322: Downloading webpage
ERROR: [TikTok] 7310763158019329322: Unable to extract sigi state; please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/yt_dlp/extractor/common.py", line 715, in extract
    ie_result = self._real_extract(url)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/yt_dlp/extractor/tiktok.py", line 700, in _real_extract
    sigi_data = self._get_sigi_state(webpage, video_id)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/yt_dlp/extractor/tiktok.py", line 52, in _get_sigi_state
    return self._search_json(
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/yt_dlp/extractor/common.py", line 1277, in _search_json
    json_string = self._search_regex(
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/yt_dlp/extractor/common.py", line 1263, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
```
Can reproduce this now with any video that requires webpage extraction
I think this is a similar issue...but maybe I should open a new issue (?...please advise..?)

The URL: https://vm.tiktok.com/ZM623SP9a/ fails with "unsupported URL"
**_HOWEVER.._**. when you put the above URL into a browser, you are automagically forwarded to:
https://www.tiktok.com/@alittlebitlovey/video/7310356969217461547?_r=1&_t=8i7xvjpP0pZ

yt-dlp IS able to download the video from this URL.





@RingoTheDog I can't reproduce your issue (the 1st URL works for me), which is likely unrelated (but I can't know without seeing a verbose log)
yes sorry... I think it is may be a proxy authentication error as it works on another machine that is not behind the proxy server..

SORRY...please ignore
Here is an example of url that sound was removed and yt--dlp is unable to download it [https://www.tiktok.com/@walkmantheband/video/6979152473575427333?lang=en](url)
Hello, here is another example of a video that triggers the error: https://www.tiktok.com/@timisag33k/video/7336944404583730465 

Resolving patch:
diff --git a/yt_dlp/extractor/tiktok.py b/yt_dlp/extractor/tiktok.py
--- a/yt_dlp/extractor/tiktok.py
+++ b/yt_dlp/extractor/tiktok.py
@@ -50,7 +50,13 @@ def _create_url(user_id, video_id):
     def _get_sigi_state(self, webpage, display_id):
         return self._search_json(
             r'<script[^>]+\bid="(?:SIGI_STATE|sigi-persisted-data)"[^>]*>', webpage,
-            'sigi state', display_id, end_pattern=r'</script>')
+            'sigi state', display_id, end_pattern=r'</script>', default={})
+
+    def _get_universal_data(self, webpage, display_id):
+        return traverse_obj(self._search_json(
+            r'<script[^>]+\bid="__UNIVERSAL_DATA_FOR_REHYDRATION__"[^>]*>', webpage,
+            'universal data', display_id, end_pattern=r'</script>', default={}),
+            ('__DEFAULT_SCOPE__', {dict})) or {}
 
     def _call_api_impl(self, ep, query, manifest_app_version, video_id, fatal=True,
                        note='Downloading API JSON', errnote='Unable to download API page'):
@@ -609,11 +615,12 @@ class TikTokIE(TikTokBaseIE):
             'title': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
             'description': 'md5:1d95c0b96560ca0e8a231af4172b2c0a',
             'creator': 'MoxyPatch',
+            'creators': ['MoxyPatch'],
             'uploader': 'moxypatch',
             'uploader_id': '7039142049363379205',
             'uploader_url': 'https://www.tiktok.com/@MS4wLjABAAAAFhqKnngMHJSsifL0w1vFOP5kn3Ndo1ODp0XuIBkNMBCkALTvwILdpu12g3pTtL4V',
             'channel_id': 'MS4wLjABAAAAFhqKnngMHJSsifL0w1vFOP5kn3Ndo1ODp0XuIBkNMBCkALTvwILdpu12g3pTtL4V',
-            'artist': 'your worst nightmare',
+            'artists': ['your worst nightmare'],
             'track': 'original sound',
             'upload_date': '20230303',
             'timestamp': 1677866781,
@@ -651,7 +658,7 @@ class TikTokIE(TikTokBaseIE):
             'comment_count': int,
             'thumbnail': r're:^https://.+\.webp',
         },
-        'params': {'format': 'bytevc1_1080p_808907-0'},
+        'skip': 'Unavailable via feed API, no formats available via web',
     }, {
         # Slideshow, audio-only m4a format
         'url': 'https://www.tiktok.com/@hara_yoimiya/video/7253412088251534594',
@@ -688,24 +695,35 @@ def _real_extract(self, url):
         try:
             return self._extract_aweme_app(video_id)
         except ExtractorError as e:
+            e.expected = True
             self.report_warning(f'{e}; trying with webpage')
 
         url = self._create_url(user_id, video_id)
         webpage = self._download_webpage(url, video_id, headers={'User-Agent': 'Mozilla/5.0'})
-        next_data = self._search_nextjs_data(webpage, video_id, default='{}')
-        if next_data:
-            status = traverse_obj(next_data, ('props', 'pageProps', 'statusCode'), expected_type=int) or 0
-            video_data = traverse_obj(next_data, ('props', 'pageProps', 'itemInfo', 'itemStruct'), expected_type=dict)
+
+        if universal_data := self._get_universal_data(webpage, video_id):
+            self.write_debug('Found universal data for rehydration')
+            status = traverse_obj(universal_data, ('webapp.video-detail', 'statusCode', {int})) or 0
+            video_data = traverse_obj(universal_data, ('webapp.video-detail', 'itemInfo', 'itemStruct', {dict}))
+
+        elif sigi_data := self._get_sigi_state(webpage, video_id):
+            self.write_debug('Found sigi state data')
+            status = traverse_obj(sigi_data, ('VideoPage', 'statusCode', {int})) or 0
+            video_data = traverse_obj(sigi_data, ('ItemModule', video_id, {dict}))
+
+        elif next_data := self._search_nextjs_data(webpage, video_id, default='{}'):
+            self.write_debug('Found next.js data')
+            status = traverse_obj(next_data, ('props', 'pageProps', 'statusCode', {int})) or 0
+            video_data = traverse_obj(next_data, ('props', 'pageProps', 'itemInfo', 'itemStruct', {dict}))
+
         else:
-            sigi_data = self._get_sigi_state(webpage, video_id)
-            status = traverse_obj(sigi_data, ('VideoPage', 'statusCode'), expected_type=int) or 0
-            video_data = traverse_obj(sigi_data, ('ItemModule', video_id), expected_type=dict)
+            raise ExtractorError('Unable to extract webpage video data')
 
-        if status == 0:
+        if video_data and status == 0:
             return self._parse_aweme_video_web(video_data, url, video_id)
         elif status == 10216:
             raise ExtractorError('This video is private', expected=True)
-        raise ExtractorError('Video not available', video_id=video_id)
+        raise ExtractorError(f'Video not available, status code {status}', video_id=video_id)
 
 
 class TikTokUserIE(TikTokBaseIE):
@@ -1182,7 +1200,7 @@ def _real_extract(self, url):
             url, uploader or room_id, headers={'User-Agent': 'Mozilla/5.0'}, fatal=not room_id)
 
         if webpage:
-            data = try_call(lambda: self._get_sigi_state(webpage, uploader or room_id))
+            data = self._get_sigi_state(webpage, uploader or room_id)
             room_id = (traverse_obj(data, ('UserModule', 'users', ..., 'roomId', {str_or_none}), get_all=False)
                        or self._search_regex(r'snssdk\d*://live\?room_id=(\d+)', webpage, 'room ID', default=None)
                        or room_id)


Test patch: