Created
August 16, 2025 07:56
-
-
Save toriato/6f71a68716e0110884036aa14e8901b2 to your computer and use it in GitHub Desktop.
TikTok TTS speakers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # use mitmproxy and rooted avd + cert-fixer to crack device_id and access_token | |
| import asyncio | |
| import json | |
| import aiohttp | |
| from pathlib import Path | |
| from base64 import b64decode | |
| from http.cookies import SimpleCookie | |
| from urllib.parse import urlencode | |
| script_dir = Path(__file__).parent | |
| response_dir = script_dir / 'text_speech_responses' | |
| semaphore = asyncio.Semaphore(4) | |
| default_queries = { | |
| 'panel': 'speaking-voice', | |
| 'aid': '1180', | |
| 'access_key': '...', | |
| 'channel': 'googleplay', | |
| 'device_id': '...', | |
| 'device_type': 'sdk_gphone64_x86_64', | |
| 'device_platform': 'android', | |
| 'app_version': '41.2.3', | |
| 'sdk_version': '19.5.0' | |
| } | |
| # https://yashsdoshi.github.io/TikTok_Text_To_Speech | |
| old_speakers = [ | |
| 'en_us_001', | |
| 'en_us_006', | |
| 'en_us_007', | |
| 'en_us_009', | |
| 'en_us_010', | |
| 'en_uk_001', | |
| 'en_uk_003', | |
| 'en_au_001', | |
| 'en_au_002', | |
| 'fr_001', | |
| 'fr_002', | |
| 'de_001', | |
| 'de_002', | |
| 'es_002', | |
| 'es_mx_002', | |
| 'es_male_m3', | |
| 'es_female_f6', | |
| 'es_female_fp1', | |
| 'es_mx_female_supermom', | |
| 'es_mx_male_transformer', | |
| 'br_001', | |
| 'br_003', | |
| 'br_004', | |
| 'br_005', | |
| 'id_001', | |
| 'jp_001', | |
| 'jp_003', | |
| 'jp_005', | |
| 'jp_006', | |
| 'kr_002', | |
| 'kr_004', | |
| 'kr_003', | |
| 'en_us_ghostface', | |
| 'en_us_chewbacca', | |
| 'en_us_c3po', | |
| 'en_us_stitch', | |
| 'en_us_stormtrooper', | |
| 'en_us_rocket', | |
| 'en_female_f08_salut_damour', | |
| 'en_male_m03_lobby', | |
| 'en_male_m03_sunshine_soon', | |
| 'en_female_f08_warmy_breeze', | |
| 'en_female_ht_f08_glorious', | |
| 'en_male_sing_funny_it_goes_up', | |
| 'en_male_m2_xhxs_m03_silly', | |
| 'en_female_ht_f08_wonderful_world' | |
| ] | |
| async def get_categories(session: aiohttp.ClientSession): | |
| params = urlencode(default_queries) | |
| path = f'/effect/api/panel/info/v2?{params}' | |
| async with semaphore: | |
| async with session.get(path) as response: | |
| result = await response.json() | |
| return [ | |
| x['key'] | |
| for x in result['data']['category_list'] | |
| ] | |
| async def get_category(session: aiohttp.ClientSession, category: str): | |
| params = urlencode({ | |
| **default_queries, | |
| 'category': category | |
| }) | |
| path = f'/effect/api/category/effects/v2?{params}' | |
| async with semaphore: | |
| async with session.get(path) as response: | |
| result = await response.json() | |
| def parse_extra(raw: str): | |
| return json.loads(raw)['speakerID'] | |
| speakers = [ | |
| parse_extra(x['extra']) | |
| for x in result['data']['category_effects']['effects'] | |
| ] | |
| print(f'{len(speakers)} speakers in {category}') | |
| return speakers | |
| async def invoke(session: aiohttp.ClientSession, speaker: str, text: str): | |
| wav_path = (response_dir / speaker).with_suffix('.wav') | |
| if wav_path.exists(): | |
| print(f'skipping: {speaker}') | |
| return | |
| params = urlencode({ | |
| 'aid': default_queries['aid'], | |
| 'text_speaker': speaker, | |
| 'req_text': text | |
| }) | |
| path = f'/media/api/text/speech/invoke/?{params}' | |
| async with semaphore: | |
| async with session.post(path) as response: | |
| result = await response.json() | |
| print(f'invoked: {speaker}') | |
| wav_path.write_bytes( | |
| b64decode(result['data']['v_str']) | |
| ) | |
| async def main(): | |
| async with aiohttp.ClientSession( | |
| base_url='https://api22-normal-c-alisg.tiktokv.com' | |
| ) as session: | |
| cookies = SimpleCookie() | |
| cookies['sessionid'] = '...' | |
| cookies['sessionid']['domain'] = '.tiktokv.com' | |
| session.cookie_jar.update_cookies(cookies) | |
| categories = await get_categories(session) | |
| chunks = await asyncio.gather(*[ | |
| get_category(session, category) | |
| for category in categories | |
| ]) | |
| chunks.append(old_speakers) | |
| await asyncio.gather(*[ | |
| invoke(session, speaker, f'Hello! My name is {speaker}!') | |
| for speakers in chunks | |
| for speaker in speakers | |
| ]) | |
| if __name__ == '__main__': | |
| asyncio.run(main()) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Generated on 2025-08-16 | |
| # Samples: https://drive.google.com/drive/folders/1ugJMEYcagGMOVOjkFt1QYC0KKuevyDNu?usp=drive_link | |
| br_001 | |
| br_003 | |
| br_004 | |
| br_005 | |
| de_001 | |
| de_002 | |
| en_au_001 | |
| en_au_002 | |
| en_female_amelia_mars_bigtts | |
| en_female_amie_mars_bigtts | |
| en_female_amie | |
| en_female_asmr_leah | |
| en_female_betty | |
| en_female_british_queen | |
| en_female_doll | |
| en_female_elsa_amanda_crystal | |
| en_female_emotional | |
| en_female_erika | |
| en_female_f08_salut_damour | |
| en_female_f08_warmy_breeze | |
| en_female_food_amy | |
| en_female_ghost | |
| en_female_gloria | |
| en_female_grandma | |
| en_female_gypsy | |
| en_female_happy_femalevoice | |
| en_female_ht_f08_glorious | |
| en_female_ht_f08_wonderful_world | |
| en_female_joanne_mars_bigtts | |
| en_female_kid_eddie | |
| en_female_lauren_moon_bigtts | |
| en_female_leah_mars_bigtts | |
| en_female_lois_familyguy | |
| en_female_makeup | |
| en_female_meangirl | |
| en_female_nadia_mars_bigtts | |
| en_female_nara_moon_bigtts | |
| en_female_pansino | |
| en_female_pet_mariacp_pawtalk | |
| en_female_product_darcie | |
| en_female_product_elise | |
| en_female_product_leah | |
| en_female_richgirl | |
| en_female_samc | |
| en_female_shenna | |
| en_female_sinong_conversation_wvae_bigtts | |
| en_female_skye_mars_bigtts | |
| en_female_soothing_mars_bigtts | |
| en_female_werewolf | |
| en_female_witch | |
| en_female_zombie | |
| en_male_adam_elf | |
| en_male_adrian | |
| en_male_artistic_layne | |
| en_male_ashmagic | |
| en_male_benjie_mars_bigtts | |
| en_male_bill_mars_bigtts | |
| en_male_bumbling_idiot | |
| en_male_charlie_en_moon_bigtts | |
| en_male_chris | |
| en_male_cody | |
| en_male_cooking_tim_savor | |
| en_male_cowboy_mars_bigtts | |
| en_male_cupid | |
| en_male_david_gingerman | |
| en_male_deadpool | |
| en_male_drag_voice | |
| en_male_dramaqueen_zachk | |
| en_male_excited_mars_bigtts | |
| en_male_funny | |
| en_male_golden_monkey | |
| en_male_grinch | |
| en_male_irritable_police_officer | |
| en_male_jarvis | |
| en_male_jason_en_moon_bigtts | |
| en_male_jason | |
| en_male_jomboy | |
| en_male_josh_mars_bigtts | |
| en_male_m03_lobby | |
| en_male_m03_sunshine_soon | |
| en_male_m2_xhxs_m03_silly | |
| en_male_M392_conversation_wvae_bigtts | |
| en_male_maxwell | |
| en_male_miki | |
| en_male_narration | |
| en_male_olaf_david_flurry | |
| en_male_olantekkers | |
| en_male_positive_british | |
| en_male_santa_effect | |
| en_male_santa_mars_bigtts | |
| en_male_santa_narration | |
| en_male_sing_funny_it_goes_up | |
| en_male_tim_mars_bigtts | |
| en_male_trevor | |
| en_male_ukbutler | |
| en_male_ukneighbor | |
| en_male_valentino_mars_bigtts | |
| en_male_venom | |
| en_male_whispering_voice | |
| en_male_whitney | |
| en_male_will_clone2 | |
| en_male_wizard | |
| en_uk_001 | |
| en_uk_003 | |
| en_us_001 | |
| en_us_002 | |
| en_us_006 | |
| en_us_007 | |
| en_us_009 | |
| en_us_010 | |
| en_us_c3po | |
| en_us_chewbacca | |
| en_us_ghostface | |
| en_us_rocket | |
| en_us_stitch | |
| en_us_stormtrooper | |
| es_002 | |
| es_female_f6 | |
| es_female_fp1 | |
| es_male_m3 | |
| es_mx_002 | |
| es_mx_female_supermom | |
| es_mx_male_asmr | |
| es_mx_male_transformer | |
| fr_001 | |
| fr_002 | |
| ICL_en_female_301F_AmberM | |
| ICL_en_female_304F_AmyP | |
| ICL_en_female_306F_PheC | |
| ICL_en_female_308F_AbigailT | |
| ICL_en_female_309F_DaceyE | |
| ICL_en_female_309F_KatieJ | |
| ICL_en_female_312F_StokieK | |
| ICL_en_female_313F_Haikaa | |
| ICL_en_female_314F_PheC | |
| ICL_en_female_324F_AllegraD1 | |
| ICL_en_female_325F_AllegraD1 | |
| ICL_en_female_325F_AmyP | |
| ICL_en_female_BillieE | |
| ICL_en_female_confidentyoung | |
| ICL_en_female_DaceyE03 | |
| ICL_en_female_GentleStoryteller | |
| ICL_en_female_girlpower | |
| ICL_en_female_ha_m3gan | |
| ICL_en_male_303M_BrianM | |
| ICL_en_male_305M_JamieTr | |
| ICL_en_male_307M_MaxG | |
| ICL_en_male_310M_CoreyK | |
| ICL_en_male_311M_CoreyK | |
| ICL_en_male_311M_ScottG | |
| ICL_en_male_316M_KrisD | |
| ICL_en_male_317M_BrianJW | |
| ICL_en_male_318M_GlenL | |
| ICL_en_male_319M_BrianM | |
| ICL_en_male_320M_CoreyK | |
| ICL_en_male_321M_GlenL | |
| ICL_en_male_322M_CoreyK | |
| ICL_en_male_323M_JonnyL | |
| ICL_en_male_Britishtv | |
| ICL_en_male_ChillDescriptive | |
| ICL_en_male_conductor1 | |
| ICL_en_male_frosty1 | |
| ICL_en_male_grinch1 | |
| ICL_en_male_ha_chucky | |
| ICL_en_male_ha_dracula | |
| ICL_en_male_ha_ghostface2 | |
| ICL_en_male_ha_jigsaw | |
| ICL_en_male_ha_penny | |
| ICL_en_male_InspirationalSpeech | |
| ICL_en_male_JSBrianM | |
| ICL_en_male_kevin1 | |
| ICL_en_male_MaleFashionTutorial | |
| ICL_en_male_MCPhilosopher | |
| ICL_en_male_oogie1 | |
| ICL_en_male_rapvoice_AdamB | |
| Butler | |
| ICL_es_female_tt_AzulB | |
| ICL_es_female_tt_MarianaF | |
| ICL_es_female_tt_RosaW | |
| ICL_es_female_tt_Vivi | |
| ICL_es_male_tt_DiegoAT | |
| ICL_es_male_tt_EdgarRu | |
| ICL_es_male_tt_EmanuelA | |
| ICL_es_male_tt_GerardoFCP | |
| ICL_es_male_tt_GerardoQ | |
| ICL_es_male_tt_JonnieVv | |
| ICL_es_male_tt_JuanJ | |
| ICL_es_male_tt_JuanZ | |
| id_001 | |
| jp_001 | |
| jp_003 | |
| jp_005 | |
| jp_006 | |
| kr_002 | |
| kr_003 | |
| kr_004 | |
| zh_male_sunwukong_clone2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment