├── LICENSE ├── README.md ├── creator.py ├── data ├── avatars │ ├── images-75.jpg │ ├── images-76.jpg │ ├── images-77.jpg │ ├── images-78.jpg │ ├── images-79.jpg │ ├── images-80.jpg │ ├── images-81.jpg │ ├── images-82.jpg │ ├── images-83.jpg │ ├── images-84.jpg │ ├── images-85.jpg │ ├── images-86.jpg │ ├── images-87.jpg │ ├── images-88.jpg │ ├── images-89.jpg │ ├── images-90.jpg │ └── images-91.jpg ├── config.json ├── proxies.txt └── usernames.txt ├── install.bat ├── modules ├── console.py ├── faker.py └── username_creator.py ├── requirements.txt ├── run.bat └── saved ├── accounts.txt ├── database.db └── tokens.txt /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 aout12y 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spotify Account Creator + Follower 2 | Spotify Account Creator + Follow account or playlist with fully httpx request based. 3 | 4 | ## 💻 Preview 5 | 6 | https://user-images.githubusercontent.com/82868382/210181254-28da72a7-52c9-4bb1-9614-734174d78262.mp4 7 | 8 | ## 👾 Features 9 | - Fully request based creator 10 | - Auto Playlist or Profile or Artist follow 11 | - Auto change avatars (pfps) 12 | - Save accounts SQLite database or text file 13 | - HTTP&HTTPS proxy support 14 | - Multi-Threading support 15 | 16 | ## 🌟 Stars to Unlock 17 | 18 | - ✅ 25 Stars | Follow artist account 19 | 20 | - ✅ 50 Stars | Add more optional choices 21 | 22 | - ❌ 150 Stars | Verify mail 23 | 24 | ## ✍️ Usage 25 | 1. Run `install.bat` 26 | 27 | 2. Edit the `config.json` file 28 | 29 | 3. (Optional) Add proxy in `proxies.txt` file in ip:port or username:password@hostname:port format 30 | 31 | 4. Run `run.bat` 32 | 33 | ## ⚠️ DISCLAIMER 34 | This github repo is for EDUCATIONAL PURPOSES ONLY. I am NOT under any responsibility if a problem occurs. 35 | -------------------------------------------------------------------------------- /creator.py: -------------------------------------------------------------------------------- 1 | try: 2 | import httpx 3 | import json 4 | import sqlite3 5 | import threading 6 | from random import choice, randint 7 | from string import ascii_lowercase 8 | from time import sleep 9 | from subprocess import call 10 | from uuid import uuid4 11 | from cursor import hide 12 | from modules.console import Console,Tools 13 | from modules.faker import Faker 14 | except ModuleNotFoundError: 15 | print('Modules not found! Please run `install.bat` and restart the tool.') 16 | input() 17 | exit() 18 | 19 | hide() 20 | call('cls', shell=True) 21 | call('mode 200, 40', shell=True) 22 | 23 | lock = threading.Lock() 24 | 25 | 26 | class Gen: 27 | def __init__(self): 28 | self.tools = Tools() 29 | self.tools.printLogo() 30 | self.faker = Faker() 31 | self.console = Console() 32 | 33 | self.config_file = json.load(open('data/config.json', 'r', encoding='utf-8')) 34 | self.settings = self.config_file['settings'] 35 | self.target_settings = self.config_file['target_settings'] 36 | self.follow_ids = self.config_file['follow_ids'] 37 | self.follow_types = self.config_file['follow_types'] 38 | self.save_methods = self.config_file['save_methods'] 39 | 40 | self.client_version = '1.2.6.158.g62f997a7' # you can change value to new version 41 | 42 | self.proxies = open('data/proxies.txt', 'r', encoding='utf-8').read().splitlines() 43 | if len(self.proxies) == 0 and self.settings['Use_Proxy'] == 'y': 44 | self.settings['Use_Proxy'] = 'n' 45 | self.console.printe('Continuing without using proxy because there is no proxy in data/proxies.txt folder.') 46 | sleep(1) 47 | 48 | if self.settings['Threads'] < 1: 49 | self.settings['Threads'] = 1 50 | self.console.printe('It continues as thread 1 because the number of threads cannot be less than 1!') 51 | sleep(1) 52 | 53 | self.connection = sqlite3.connect('saved/database.db', check_same_thread=False) 54 | self.cursor = self.connection.cursor() 55 | self.cursor.execute('CREATE TABLE IF NOT EXISTS accounts (Account_ID TEXT, Account_Name TEXT, Account_Mail TEXT, Account_Password TEXT, Login_Token TEXT, Bearer_Token TEXT)') 56 | 57 | 58 | @staticmethod 59 | def debugMode(*args): 60 | lock.acquire() 61 | print('----------DEBUG------------') 62 | for _ in args: print(_) 63 | print('----------DEBUG------------') 64 | lock.release() 65 | 66 | def getClientToken(self, session: httpx.Client) -> str: 67 | while True: 68 | payload = { 69 | "client_data": { 70 | "client_id": "d8a5ed958d274c2e8ee717e6a4b0971d", 71 | "client_version": self.client_version, 72 | "js_sdk_data": { 73 | "device_brand": "unknown", 74 | "device_model": "desktop", 75 | "os": "Windows", 76 | "os_version": "NT 10.0" 77 | } 78 | } 79 | } 80 | 81 | headers = { 82 | "Host": "clienttoken.spotify.com", 83 | "Accept": "application/json", 84 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 85 | "Accept-Encoding": "gzip, deflate, br", 86 | "Content-Type": "application/json", 87 | "Content-Length": str(len(json.dumps(payload))), 88 | "Origin": "https://open.spotify.com", 89 | "Sec-Fetch-Dest": "empty", 90 | "Sec-Fetch-Mode": "cors", 91 | "Sec-Fetch-Site": "same-site", 92 | "Referer": "https://open.spotify.com/", 93 | "Connection": "keep-alive", 94 | "TE": "trailers" 95 | } 96 | 97 | 98 | r = session.post(url='https://clienttoken.spotify.com/v1/clienttoken', headers=headers, json=payload) 99 | if r.status_code == 200: 100 | return r.json()['granted_token']['token'] 101 | else: 102 | self.console.printe('Failed to get Client Token. Retrying...') 103 | if self.settings['Debug_Mode'] == 'y': 104 | self.debugMode(r.text, r.status_code) 105 | 106 | 107 | def getCsrfToken(self, session: httpx.Client) -> str: 108 | while True: 109 | headers = { 110 | "Host": "www.spotify.com", 111 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0", 112 | "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", 113 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 114 | "Accept-Encoding": "gzip, deflate, br", 115 | "Connection": "keep-alive", 116 | "Upgrade-Insecure-Requests": "1", 117 | "Sec-Fetch-Dest": "document", 118 | "Sec-Fetch-Mode": "navigate", 119 | "Sec-Fetch-Site": "none", 120 | "Sec-Fetch-User": "?1", 121 | "TE": "trailers" 122 | } 123 | 124 | r = session.get(url='https://www.spotify.com/us/signup', headers=headers) 125 | 126 | if r.status_code == 200: 127 | return r.text.split('csrfToken')[1].split('"')[2] 128 | else: 129 | self.console.printe('Failed to get CSRF-Token. Retrying...') 130 | if self.settings['Debug_Mode'] == 'y': 131 | self.debugMode(r.text, r.status_code) 132 | 133 | def getToken(self, session: httpx.Client, login_token: str) -> str: 134 | while True: 135 | headers = { 136 | "Host": "www.spotify.com", 137 | "Accept": "*/*", 138 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 139 | "Accept-Encoding": "gzip, deflate, br", 140 | "Referer": "https://www.spotify.com/us/signup?forward_url=https%3A%2F%2Fopen.spotify.com%2F", 141 | "Content-Type": "application/x-www-form-urlencoded", 142 | "X-CSRF-Token": self.getCsrfToken(session), 143 | "X-KL-Ajax-Request": "Ajax_Request", 144 | "Content-Length": "28", 145 | "Origin": "https://www.spotify.com", 146 | "Connection": "keep-alive", 147 | "Sec-Fetch-Dest": "empty", 148 | "Sec-Fetch-Mode": "cors", 149 | "Sec-Fetch-Site": "same-origin", 150 | "TE": "trailers" 151 | } 152 | 153 | r1 = session.post(url='https://www.spotify.com/api/signup/authenticate', headers=headers, data=f'splot={login_token}') 154 | 155 | if r1.status_code == 200: 156 | headers = { 157 | "Accept": "application/json", 158 | "Accept-Encoding": "gzip, deflate, br", 159 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 160 | "Connection": "keep-alive", 161 | "Upgrade-Insecure-Requests": "1", 162 | "spotify-app-version": self.client_version, 163 | "app-platform": "WebPlayer", 164 | "Host": "open.spotify.com", 165 | "Referer": "https://open.spotify.com/", 166 | "Sec-Fetch-Dest": "document", 167 | "Sec-Fetch-Mode": "navigate", 168 | "Sec-Fetch-Site": "none", 169 | "Sec-Fetch-User": "?1", 170 | "TE": "trailers" 171 | } 172 | 173 | r2 = session.get(url='https://open.spotify.com/get_access_token?reason=transport&productType=web_player', headers=headers) 174 | if r2.status_code == 200: 175 | return r2.json()['accessToken'] 176 | else: 177 | self.console.printe('Failed to get Access Token. Retrying...') 178 | if self.settings['Debug_Mode'] == 'y': 179 | self.debugMode(r2.text, r2.status_code) 180 | else: 181 | self.console.printe('Failed to authenticating account. Retrying...') 182 | if self.settings['Debug_Mode'] == 'y': 183 | self.debugMode(r1.text, r1.status_code) 184 | 185 | def followAccount(self, session: httpx.Client, client_token: str, token: str): 186 | while True: 187 | for account_id in self.follow_ids["Account_IDs"]: 188 | try: 189 | headers = { 190 | "Host": "api.spotify.com", 191 | "Accept": "application/json", 192 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 193 | "Accept-Encoding": "gzip, deflate, br", 194 | "app-platform": "WebPlayer", 195 | "spotify-app-version": self.client_version, 196 | "client-token": client_token, 197 | "Origin": "https://open.spotify.com", 198 | "Sec-Fetch-Dest": "empty", 199 | "Sec-Fetch-Mode": "cors", 200 | "Sec-Fetch-Site": "same-site", 201 | "authorization": f"Bearer {token}", 202 | "Referer": "https://open.spotify.com/", 203 | "Connection": "keep-alive", 204 | "Content-Length": "0", 205 | "TE": "trailers" 206 | } 207 | 208 | r = session.put(url=f'https://api.spotify.com/v1/me/following?type=user&ids={account_id}', headers=headers) 209 | 210 | if r.status_code == 204: 211 | self.console.printi(f'Successfully followed to account: [{account_id}]') 212 | else: 213 | self.console.printe('Error following account. Retrying...') 214 | if self.settings['Debug_Mode'] == 'y': 215 | self.debugMode(r.text, r.status_code) 216 | except Exception: 217 | self.console.printe('Error following account. Retrying...') 218 | continue 219 | break 220 | 221 | def changeAvatar(self, session: httpx.Client, client_token: str, token: str, account_id: str): 222 | while True: 223 | try: 224 | avatar = self.faker.getAvatar(self.settings['Create_Avatar']) 225 | 226 | headers = { 227 | "Host": "image-upload.spotify.com", 228 | "Accept": "application/json", 229 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 230 | "Accept-Encoding": "gzip, deflate, br", 231 | "Content-Type": "image/jpeg", 232 | "client-token": client_token, 233 | "Origin": "https://open.spotify.com", 234 | "Sec-Fetch-Dest": "empty", 235 | "Sec-Fetch-Mode": "cors", 236 | "Sec-Fetch-Site": "same-site", 237 | "authorization": f"Bearer {token}", 238 | "Referer": "https://open.spotify.com/", 239 | "Connection": "keep-alive", 240 | "TE": "trailers" 241 | } 242 | 243 | r1 = session.post(url='https://image-upload.spotify.com/v4/user-profile', headers=headers, data=avatar) 244 | 245 | if r1.status_code == 200: 246 | upload_token = r1.json()['uploadToken'] 247 | 248 | headers = { 249 | 'Accept': 'application/json', 250 | 'Accept-Language': 'tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3', 251 | 'Accept-Encoding': 'gzip, deflate, br', 252 | 'app-platform': 'WebPlayer', 253 | 'spotify-app-version': self.client_version, 254 | 'client-token': client_token, 255 | 'Origin': 'https://open.spotify.com', 256 | 'Sec-Fetch-Dest': 'empty', 257 | 'Sec-Fetch-Mode': 'cors', 258 | 'Sec-Fetch-Site': 'same-site', 259 | 'authorization': f'Bearer {token}', 260 | 'Referer': 'https://open.spotify.com/', 261 | 'Connection': 'keep-alive', 262 | 'Content-Length': '0', 263 | 'TE': 'trailers', 264 | } 265 | 266 | r2 = session.post(url=f'https://spclient.wg.spotify.com/identity/v3/profile-image/{account_id}/{upload_token}', headers=headers) 267 | if r2.status_code == 200: 268 | self.console.printhc('Successfully pfp changed.') 269 | break 270 | else: 271 | self.console.printe('Error changing pfp. Retrying...') 272 | if self.settings['Debug_Mode'] == 'y': 273 | self.debugMode(r2.text, r2.status_code) 274 | else: 275 | self.console.printe('Error uploading pfp. Retrying...') 276 | if self.settings['Debug_Mode'] == 'y': 277 | self.debugMode(r1.text, r1.status_code) 278 | except Exception: 279 | self.console.printe('Error changing pfp. Retrying...') 280 | 281 | def followPlaylist(self, session: httpx.Client, client_token: str, token: str): 282 | while True: 283 | try: 284 | for playlist_id in self.follow_ids["Playlist_IDs"]: 285 | headers = { 286 | 'Accept': 'application/json', 287 | 'Accept-Language': 'tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3', 288 | 'Accept-Encoding': 'gzip, deflate, br', 289 | 'Content-Type': 'application/json;charset=UTF-8', 290 | 'app-platform': 'WebPlayer', 291 | 'spotify-app-version': self.client_version, 292 | 'client-token': client_token, 293 | 'Origin': 'https://open.spotify.com', 294 | 'Sec-Fetch-Dest': 'empty', 295 | 'Sec-Fetch-Mode': 'cors', 296 | 'Sec-Fetch-Site': 'same-site', 297 | 'authorization': f'Bearer {token}', 298 | 'Referer': 'https://open.spotify.com/', 299 | 'Connection': 'keep-alive', 300 | 'TE': 'trailers' 301 | } 302 | 303 | r = session.put(url=f'https://api.spotify.com/v1/playlists/{playlist_id}/followers', headers=headers) 304 | if r.status_code == 200: 305 | self.console.printi(f'Successfully followed to playlist: [{playlist_id}]') 306 | else: 307 | self.console.printe('Error following, retrying...') 308 | if self.settings['Debug_Mode'] == 'y': 309 | self.debugMode(r.text, r.status_code) 310 | except Exception: 311 | self.console.printe('Error following, Retrying...') 312 | continue 313 | break 314 | def followArtist(self, session: httpx.Client, client_token: str, token: str): 315 | while True: 316 | try: 317 | for artist_id in self.follow_ids["Artist_IDs"]: 318 | headers = { 319 | "Host": "api.spotify.com", 320 | "Accept": "application/json", 321 | "Accept-Language": "tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3", 322 | "Accept-Encoding": "gzip, deflate, br", 323 | "app-platform": "WebPlayer", 324 | "spotify-app-version": self.client_version, 325 | "client-token": client_token, 326 | "Origin": "https://open.spotify.com", 327 | "Sec-Fetch-Dest": "empty", 328 | "Sec-Fetch-Mode": "cors", 329 | "Sec-Fetch-Site": "same-site", 330 | "authorization": f"Bearer {token}", 331 | "Referer": "https://open.spotify.com/", 332 | "Connection": "keep-alive", 333 | "Content-Length": "0", 334 | "TE": "trailers" 335 | } 336 | 337 | r = session.put(url=f'https://api.spotify.com/v1/me/following?type=artist&ids={artist_id}', headers=headers) 338 | 339 | if r.status_code == 204: 340 | self.console.printi(f'Successfully followed to artist account: [{artist_id}]') 341 | else: 342 | self.console.printe('Error following artist account. Retrying...') 343 | if self.settings['Debug_Mode'] == 'y': 344 | self.debugMode(r.text, r.status_code) 345 | except Exception: 346 | self.console.printe('Error following artist account. Retrying...') 347 | continue 348 | 349 | break 350 | 351 | def createAccount(self): 352 | while (self.target_settings['Use_Target'] == 'y' and Console.created < self.target_settings['Target_To']) or (self.target_settings['Use_Target'] != 'y'): 353 | try: 354 | if self.settings['Use_Proxy'] == 'y': 355 | proxy = choice(self.proxies) 356 | session = httpx.Client(headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"}, proxies={"http://": f"http://{proxy}","https://": f"http://{proxy}"}) 357 | else: 358 | session = httpx.Client(headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"}) 359 | username = self.faker.getUsername(self.settings['Create_Username']) 360 | mail = self.faker.getMail(16) 361 | password = self.faker.getPassword(12) 362 | birthday = self.faker.getBirthday() 363 | 364 | client_token = self.getClientToken(session) 365 | 366 | payload = { 367 | "account_details": { 368 | "birthdate": birthday, 369 | "consent_flags": { 370 | "eula_agreed": True, 371 | "send_email": True, 372 | "third_party_email": True 373 | }, 374 | "display_name": username, 375 | "email_and_password_identifier": { 376 | "email": mail, 377 | "password": password 378 | }, 379 | "gender": randint(1, 2) 380 | }, 381 | "callback_uri": "https://auth-callback.spotify.com/r/android/music/signup", 382 | "client_info": { 383 | "api_key": "142b583129b2df829de3656f9eb484e6", 384 | "app_version": "v2", 385 | "capabilities": [1], 386 | "installation_id": str(uuid4()), 387 | "platform": "Android-ARM" 388 | }, 389 | "tracking": { 390 | "creation_flow": "", 391 | "creation_point": "client_mobile", 392 | "referrer": "" 393 | } 394 | } 395 | 396 | headers = { 397 | 'accept': '*/*', 398 | 'accept-encoding': 'gzip', 399 | 'accept-language': 'tr-TR;q=1, en-US;q=0.5', 400 | "app-platform": "Android", 401 | 'client-token': client_token, 402 | 'connection': 'Keep-Alive', 403 | 'Origin': 'https://www.spotify.com', 404 | 'content-length': str(len(json.dumps(payload))), 405 | 'host': 'spclient.wg.spotify.com', 406 | 'spotify-app-version': '8.8.0.347', 407 | 'user-agent': 'Spotify/8.8.0.347 Android/25 (SM-G988N)', 408 | 'x-client-id': "".join(choice(ascii_lowercase) for _ in range(32)), 409 | } 410 | 411 | r = session.post(url='https://spclient.wg.spotify.com/signup/public/v2/account/create', headers=headers, json=payload, timeout=15) 412 | 413 | if r.status_code == 200 and 'success' in r.text: 414 | self.console.printsc(f'Account has been created with the name {username}.') 415 | Console.created += 1 416 | 417 | account_id = r.json()['success']['username'] 418 | login_token = r.json()['success']['login_token'] 419 | 420 | token = self.getToken(session, login_token) 421 | 422 | if self.settings['Change_Avatar'] == 'y': 423 | self.changeAvatar(session, client_token, token, account_id) 424 | 425 | 426 | if self.follow_types['Profile'] == 'y': 427 | self.followAccount(session, client_token, token) 428 | 429 | if self.follow_types['Playlist'] == 'y': 430 | self.followPlaylist(session, client_token, token) 431 | 432 | if self.follow_types['Artist'] == 'y': 433 | self.followArtist(session, client_token, token) 434 | 435 | if self.save_methods['Text_File'] == 'y': 436 | with open('saved/accounts.txt', 'a', encoding='utf-8') as f: 437 | f.write(f"{username}:{mail}:{password}\n") 438 | with open('saved/tokens.txt', 'a', encoding='utf-8') as f: 439 | f.write(f"{token}\n") 440 | 441 | if self.save_methods['SQLite'] == 'y': 442 | self.cursor.execute('Insert into accounts Values(?,?,?,?,?,?)', (account_id, username, mail, password, login_token, token)) 443 | self.connection.commit() 444 | 445 | elif 'VPN' in r.text: 446 | self.console.printe(f'Account not created. Bad proxies: {proxy}') 447 | # self.proxies.remove(proxy) 448 | else: 449 | self.console.printe('Account not created.') 450 | if self.settings['Debug_Mode'] == 'y': 451 | self.debugMode(r.text, r.status_code) 452 | except Exception as e: 453 | self.console.printe(f'{str(e).capitalize()}. Retrying...') 454 | continue 455 | self.console.printtc(threading.current_thread().name.rstrip(' (createAccount)').replace('-', ' ') + ' is closed.') 456 | 457 | def start(self): 458 | threading.Thread(target=self.tools.titleChanger, args=[self.target_settings['Use_Target'], self.target_settings['Target_To']], name='Title Changer').start() 459 | while threading.active_count() < self.settings['Threads'] + 2: 460 | threading.Thread(target=self.createAccount).start() 461 | 462 | 463 | if __name__ == '__main__': 464 | gen = Gen() 465 | gen.start() 466 | -------------------------------------------------------------------------------- /data/avatars/images-75.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-75.jpg -------------------------------------------------------------------------------- /data/avatars/images-76.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-76.jpg -------------------------------------------------------------------------------- /data/avatars/images-77.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-77.jpg -------------------------------------------------------------------------------- /data/avatars/images-78.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-78.jpg -------------------------------------------------------------------------------- /data/avatars/images-79.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-79.jpg -------------------------------------------------------------------------------- /data/avatars/images-80.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-80.jpg -------------------------------------------------------------------------------- /data/avatars/images-81.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-81.jpg -------------------------------------------------------------------------------- /data/avatars/images-82.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-82.jpg -------------------------------------------------------------------------------- /data/avatars/images-83.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-83.jpg -------------------------------------------------------------------------------- /data/avatars/images-84.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-84.jpg -------------------------------------------------------------------------------- /data/avatars/images-85.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-85.jpg -------------------------------------------------------------------------------- /data/avatars/images-86.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-86.jpg -------------------------------------------------------------------------------- /data/avatars/images-87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-87.jpg -------------------------------------------------------------------------------- /data/avatars/images-88.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-88.jpg -------------------------------------------------------------------------------- /data/avatars/images-89.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-89.jpg -------------------------------------------------------------------------------- /data/avatars/images-90.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-90.jpg -------------------------------------------------------------------------------- /data/avatars/images-91.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/avatars/images-91.jpg -------------------------------------------------------------------------------- /data/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "Threads": 3, 4 | "Create_Username": "y or n", 5 | "Create_Avatar": "y or n", 6 | "Use_Proxy": "y or n", 7 | "Change_Avatar": "y or n", 8 | "Debug_Mode": "if you are not a developer, do not touch this value!! (if you're going to change you can just do 'y')" 9 | }, 10 | 11 | "target_settings": { 12 | "Use_Target": "y or n", 13 | "Target_To": 10 14 | }, 15 | 16 | "follow_ids": { 17 | "Account_IDs": ["account id1", "account id2", "account id 3 (u can put as many as you want)"], 18 | "Playlist_IDs": ["playlist id1", "playlist id2 (u can put as many as you want)"], 19 | "Artist_IDs": ["artist id1", "artist id (u can put as many as you want)"] 20 | }, 21 | 22 | "follow_types": { 23 | "Profile": "y or n", 24 | "Playlist": "y or n", 25 | "Artist": "y or n" 26 | }, 27 | 28 | "save_methods": { 29 | "SQLite": "y or n", 30 | "Text_File": "y or n" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /data/proxies.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/data/proxies.txt -------------------------------------------------------------------------------- /data/usernames.txt: -------------------------------------------------------------------------------- 1 | github.com/seadhy 2 | discord.gg/6hP3mHKSqf 3 | -------------------------------------------------------------------------------- /install.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | title Installing Modules... 3 | python -m pip install -r requirements.txt 4 | color b 5 | cls 6 | echo Downloaded All Modules! 7 | PAUSE -------------------------------------------------------------------------------- /modules/console.py: -------------------------------------------------------------------------------- 1 | import threading 2 | from colorama import Fore 3 | from threading import Lock, active_count 4 | from time import sleep, perf_counter 5 | from datetime import datetime 6 | from ctypes import windll 7 | from pystyle import Center, Colors, Colorate 8 | 9 | lock = Lock() 10 | 11 | 12 | class Console: 13 | created = 0 14 | 15 | @staticmethod 16 | def printsc(content: str): 17 | lock.acquire() 18 | print( 19 | f"{Fore.LIGHTBLACK_EX}[{Fore.LIGHTWHITE_EX}{datetime.strftime(datetime.now(), '%X').replace(':', f'{Fore.LIGHTBLACK_EX}:{Fore.LIGHTWHITE_EX}')}{Fore.LIGHTBLACK_EX}] {Fore.LIGHTBLACK_EX}[{Fore.LIGHTGREEN_EX}Account Created{Fore.LIGHTBLACK_EX}]{Fore.LIGHTWHITE_EX} > {content}") 20 | lock.release() 21 | 22 | @staticmethod 23 | def printe(content: str): 24 | lock.acquire() 25 | print( 26 | f"{Fore.LIGHTBLACK_EX}[{Fore.LIGHTWHITE_EX}{datetime.strftime(datetime.now(), '%X').replace(':', f'{Fore.LIGHTBLACK_EX}:{Fore.LIGHTWHITE_EX}')}{Fore.LIGHTBLACK_EX}] {Fore.LIGHTBLACK_EX}[{Fore.LIGHTRED_EX}Error Occurred{Fore.LIGHTBLACK_EX}]{Fore.LIGHTWHITE_EX} > {content}") 27 | lock.release() 28 | 29 | @staticmethod 30 | def printi(content: str): 31 | lock.acquire() 32 | print( 33 | f"{Fore.LIGHTBLACK_EX}[{Fore.LIGHTWHITE_EX}{datetime.strftime(datetime.now(), '%X').replace(':', f'{Fore.LIGHTBLACK_EX}:{Fore.LIGHTWHITE_EX}')}{Fore.LIGHTBLACK_EX}] {Fore.LIGHTBLACK_EX}[{Fore.LIGHTYELLOW_EX}Info{Fore.LIGHTBLACK_EX}]{Fore.LIGHTWHITE_EX} > {content}") 34 | lock.release() 35 | 36 | @staticmethod 37 | def printm(content: str): 38 | lock.acquire() 39 | print( 40 | f"{Fore.LIGHTBLACK_EX}[{Fore.LIGHTWHITE_EX}{datetime.strftime(datetime.now(), '%X').replace(':', f'{Fore.LIGHTBLACK_EX}:{Fore.LIGHTWHITE_EX}')}{Fore.LIGHTBLACK_EX}] {Fore.LIGHTBLACK_EX}[{Fore.LIGHTBLUE_EX}Mail Verified{Fore.LIGHTBLACK_EX}]{Fore.LIGHTWHITE_EX} > {content}") 41 | lock.release() 42 | 43 | @staticmethod 44 | def printhc(content: str): 45 | lock.acquire() 46 | print( 47 | f"{Fore.LIGHTBLACK_EX}[{Fore.LIGHTWHITE_EX}{datetime.strftime(datetime.now(), '%X').replace(':', f'{Fore.LIGHTBLACK_EX}:{Fore.LIGHTWHITE_EX}')}{Fore.LIGHTBLACK_EX}] {Fore.LIGHTBLACK_EX}[{Fore.LIGHTMAGENTA_EX}Humanization Completed{Fore.LIGHTBLACK_EX}]{Fore.LIGHTWHITE_EX} > {content}") 48 | lock.release() 49 | 50 | @staticmethod 51 | def printtc(content: str): 52 | lock.acquire() 53 | print( 54 | f"{Fore.LIGHTBLACK_EX}[{Fore.LIGHTWHITE_EX}{datetime.strftime(datetime.now(), '%X').replace(':', f'{Fore.LIGHTBLACK_EX}:{Fore.LIGHTWHITE_EX}')}{Fore.LIGHTBLACK_EX}] {Fore.LIGHTBLACK_EX}[{Fore.LIGHTCYAN_EX}Thread Closed{Fore.LIGHTBLACK_EX}]{Fore.LIGHTWHITE_EX} > {content}") 55 | lock.release() 56 | 57 | 58 | class Tools: 59 | 60 | @staticmethod 61 | def titleChanger(use_target: str, target_to: int): 62 | windll.kernel32.SetConsoleTitleW('Initializing...') 63 | 64 | starting_time = perf_counter() 65 | while True: 66 | sleep(0.1) 67 | created_min = round(Console.created / ((perf_counter() - starting_time) / 60), 1) 68 | if use_target == 'y': 69 | remaining = target_to - Console.created 70 | if remaining > 0: 71 | windll.kernel32.SetConsoleTitleW(f"Seasmash Spotify Creator | Threads: {active_count() - 2} | Created: {Console.created} | Speed: {created_min}/m | Remaining: {remaining} | Elapsed: {round(perf_counter() - starting_time, 1)}s | Made by github.com/seadhy") 72 | else: 73 | windll.kernel32.SetConsoleTitleW(f"Seasmash Spotify Creator | Threads: {active_count() - 2} | Created: {Console.created} | Speed: {created_min}/m | Remaining: {remaining} | Elapsed: {round(perf_counter() - starting_time, 1)}s | Made by github.com/seadhy") 74 | sleep(5) 75 | Console.printtc(threading.current_thread().name + " is closed. The program will close itself in 3 seconds...") 76 | sleep(3) 77 | exit() 78 | else: 79 | windll.kernel32.SetConsoleTitleW(f"Seasmash Spotify Creator | Threads: {active_count() - 2} | Created: {Console.created} | Speed: {created_min}/m | Elapsed: {round(perf_counter() - starting_time, 1)}s | Made by github.com/seadhy") 80 | 81 | @staticmethod 82 | def printLogo(): 83 | print(Colorate.Vertical(Colors.purple_to_blue, Center.XCenter(""" 84 | ▄████████ ▄████████ ▄████████ ▄████████ ▄▄▄▄███▄▄▄▄ ▄████████ ▄████████ ▄█ █▄ 85 | ███ ███ ███ ███ ███ ███ ███ ███ ▄██▀▀▀███▀▀▀██▄ ███ ███ ███ ███ ███ ███ 86 | ███ █▀ ███ █▀ ███ ███ ███ █▀ ███ ███ ███ ███ ███ ███ █▀ ███ ███ 87 | ███ ▄███▄▄▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▄███▄▄▄▄███▄▄ 88 | ▀███████████ ▀▀███▀▀▀ ▀███████████ ▀███████████ ███ ███ ███ ▀███████████ ▀███████████ ▀▀███▀▀▀▀███▀ 89 | ███ ███ █▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ 90 | ▄█ ███ ███ ███ ███ ███ ▄█ ███ ███ ███ ███ ███ ███ ▄█ ███ ███ ███ 91 | ▄████████▀ ██████████ ███ █▀ ▄████████▀ ▀█ ███ █▀ ███ █▀ ▄████████▀ ███ █▀ 92 | ⌜――――――――――――――――――――――――――――――――――――――――――――――――――――⌝ 93 | ┇ [Discord] https://discord.gg/6hP3mHKSqf ┇ 94 | ┇ [Github] https://github.com/seadhy ┇ 95 | ⌞――――――――――――――――――――――――――――――――――――――――――――――――――――⌟ 96 | 97 | """))) 98 | -------------------------------------------------------------------------------- /modules/faker.py: -------------------------------------------------------------------------------- 1 | import httpx 2 | from string import ascii_letters, digits, ascii_lowercase 3 | from random import choices, choice, randint 4 | from os import listdir 5 | from modules.username_creator import getUsername 6 | 7 | 8 | class Faker: 9 | def __init__(self) -> None: 10 | self.usernames = open('data/usernames.txt', 'r', encoding='utf-8').read().splitlines() 11 | self.avatars = listdir('data/avatars') 12 | 13 | def getPassword(self, len_pass: int) -> str: 14 | return "".join(choices(ascii_letters + digits, k=len_pass)) 15 | 16 | def getMail(self, len_email: int) -> str: 17 | return "".join(choices(ascii_lowercase + digits, k=len_email)) + choice(['@gmail.com', '@yahoo.com', '@outlook.com', '@hotmail.com', '@protonmail.com']) 18 | 19 | def getUsername(self, create_ai: str) -> str: 20 | if create_ai == 'n': return choice(self.usernames) 21 | return getUsername() 22 | 23 | def getAvatar(self, with_ai: str) -> bytes: 24 | if with_ai.lower() == 'y': 25 | api = 'https://picsum.photos/512/512' 26 | r = httpx.get(url=api) 27 | img_url = (r.headers['location']) 28 | 29 | response = httpx.get(url=img_url) 30 | 31 | if response.status_code == 200: 32 | with open('data/avatars/temp_image.png', 'wb') as f: 33 | f.write(response.content) 34 | with open('data/avatars/temp_image.png', 'rb') as f: 35 | return f.read() 36 | image = open('data/avatars/' + choice(self.avatars), 'rb').read() 37 | return image 38 | 39 | def getBirthday(self) -> str: 40 | day = str(randint(1, 28)) 41 | month = str(randint(1, 12)) 42 | 43 | if int(month) < 10: month = "0" + month 44 | if int(day) < 10: day = "0" + day 45 | 46 | birthday = "-".join([str(randint(1910, 2004)), month, day]) 47 | return birthday 48 | -------------------------------------------------------------------------------- /modules/username_creator.py: -------------------------------------------------------------------------------- 1 | # thank you github.com/6accOnThe6locc 2 | 3 | from random import randint, choice, choices 4 | 5 | 6 | def getUsername() -> str: 7 | nick = list() 8 | prefix = str() 9 | under_score = str() 10 | under_score2 = str() 11 | rnd_number = str() 12 | rnd_vowels = choices(('a', 'e', 'i', 'o', 'u', 'y'), k=randint(3, 5)) 13 | rnd_consonant = choices(('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'), k=randint(4, 6)) 14 | 15 | nick = [f"{x}{y}" for x, y in list(zip(rnd_vowels, rnd_consonant))] 16 | if choice((True, False)): 17 | if choice((True, False)): 18 | under_score = "_" 19 | 20 | prefix = choice(('Mr', 'Ms', 'Sir', 'Doctor', 'Lord', 'Lady', 'Rabbi', 'General', 'Captain', 'Glide', 'Deedee', 21 | 'Dazzle', 'Daydream', 'Micro', 'Lion', 'Punch', 'Hawk', 'Sandy', 'Hound', 'Rusty', 'Tigress', 22 | 'Commando', 'Abbot', 'Invincible', 'SepuLtura', 'Detective', 'Vanguard', 'Storm', 'Soulfly', 23 | 'Marine', 'Saber', 'Parachute', '4Justice', 'StrongHold', 'Thunder', 'Discoverer', 'Explorer', 24 | 'Cardinal', 'Winner', 'Bee', 'Coach', 'Munchkin', 'Teddy', 'Scout', ' Smarty', 'Dolly', 25 | 'Princess', 'Pumpkin', 'Sunshine', 'Tinkerbell', 'Bestie', 'Sugar', 'Juliet', 'Magician', 26 | 'Mule', 'Stretch', 'Missile', 'Alpha', 'Grace', 'Buck', 'King', 'Chief', 'Oldie', 'Poker', 27 | 'Bustier', 'Adonis', 'Squirt', 'Ace', 'Mortal', 'Speedy', 'Bug', 'Senior', 'Bear', 'Rifle', 28 | 'Insomnia', 'JustWatch', 'Thanatos', 'Creature', 'Miracle', 'SuperHero', 'WhoAmI', 'Handyman', 29 | 'TheTalent', 'Boss', 'Meow', 'Ms.Congeniality', 'Rapunzel', 'Dolly', 'Sunshine', 'Eirene', 30 | 'Drum')) 31 | 32 | if choice((True, False)): 33 | if choice((True, False)): 34 | under_score2 = "_" 35 | rnd_number = f'{under_score2}{randint(1, 99)}' 36 | 37 | nick = prefix + under_score + "".join(nick).capitalize() + rnd_number 38 | return nick 39 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | httpx==0.23.0 2 | colorama==0.4.6 3 | pystyle==2.9 4 | cursor==1.3.5 -------------------------------------------------------------------------------- /run.bat: -------------------------------------------------------------------------------- 1 | echo @off 2 | python creator.py 3 | PAUSE -------------------------------------------------------------------------------- /saved/accounts.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/saved/accounts.txt -------------------------------------------------------------------------------- /saved/database.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/saved/database.db -------------------------------------------------------------------------------- /saved/tokens.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aout12y/Spotify-Account-Creator/256574485ffafc98552a0d67505bd48246022ce5/saved/tokens.txt --------------------------------------------------------------------------------