├── .npmrc ├── .gitattributes ├── .gitignore ├── screenshot.gif ├── .travis.yml ├── .github └── funding.yml ├── index.test-d.ts ├── .editorconfig ├── example.js ├── index.js ├── package.json ├── license ├── test.js ├── example-all.js ├── readme.md ├── index.d.ts └── spinners.json /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | yarn.lock 3 | -------------------------------------------------------------------------------- /screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/cli-spinners/master/screenshot.gif -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '14' 4 | - '12' 5 | - '10' 6 | - '8' 7 | - '6' 8 | -------------------------------------------------------------------------------- /.github/funding.yml: -------------------------------------------------------------------------------- 1 | github: sindresorhus 2 | open_collective: sindresorhus 3 | patreon: sindresorhus 4 | custom: https://sindresorhus.com/donate 5 | -------------------------------------------------------------------------------- /index.test-d.ts: -------------------------------------------------------------------------------- 1 | import {expectType} from 'tsd'; 2 | import cliSpinners = require('.'); 3 | import {Spinner} from '.'; 4 | 5 | expectType(cliSpinners.dots); 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = tab 5 | end_of_line = lf 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.yml] 11 | indent_style = space 12 | indent_size = 2 13 | -------------------------------------------------------------------------------- /example.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const logUpdate = require('log-update'); 3 | const cliSpinners = require('.'); 4 | 5 | const spinner = cliSpinners[process.argv[2] || 'dots']; 6 | let i = 0; 7 | 8 | setInterval(() => { 9 | const {frames} = spinner; 10 | logUpdate(frames[i = ++i % frames.length] + ' Unicorns'); 11 | }, spinner.interval); 12 | 13 | // $ node example.js nameOfSpinner 14 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const spinners = Object.assign({}, require('./spinners.json')); 4 | 5 | const spinnersList = Object.keys(spinners); 6 | 7 | Object.defineProperty(spinners, 'random', { 8 | get() { 9 | const randomIndex = Math.floor(Math.random() * spinnersList.length); 10 | const spinnerName = spinnersList[randomIndex]; 11 | return spinners[spinnerName]; 12 | } 13 | }); 14 | 15 | module.exports = spinners; 16 | // TODO: Remove this for the next major release 17 | module.exports.default = spinners; 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cli-spinners", 3 | "version": "2.4.0", 4 | "description": "Spinners for use in the terminal", 5 | "license": "MIT", 6 | "repository": "sindresorhus/cli-spinners", 7 | "funding": "https://github.com/sponsors/sindresorhus", 8 | "author": { 9 | "name": "Sindre Sorhus", 10 | "email": "sindresorhus@gmail.com", 11 | "url": "https://sindresorhus.com" 12 | }, 13 | "engines": { 14 | "node": ">=6" 15 | }, 16 | "scripts": { 17 | "test": "xo && ava && tsd", 18 | "asciicast": "asciinema rec --command='node example-all.js' --title='cli-spinner' --quiet" 19 | }, 20 | "files": [ 21 | "index.js", 22 | "index.d.ts", 23 | "spinners.json" 24 | ], 25 | "keywords": [ 26 | "cli", 27 | "spinner", 28 | "spinners", 29 | "terminal", 30 | "term", 31 | "console", 32 | "ascii", 33 | "unicode", 34 | "loading", 35 | "indicator", 36 | "progress", 37 | "busy", 38 | "wait", 39 | "idle", 40 | "json" 41 | ], 42 | "devDependencies": { 43 | "ava": "^1.4.1", 44 | "log-update": "^3.2.0", 45 | "tsd": "^0.7.2", 46 | "xo": "^0.24.0" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Sindre Sorhus (https://sindresorhus.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | import test from 'ava'; 2 | import cliSpinners from '.'; 3 | 4 | function mockMathRandom(fixedResult) { 5 | unMockMathRandom(); 6 | const originalImplementation = Math.random; 7 | Math.random = () => fixedResult; 8 | Math.random.originalImplementation = originalImplementation; 9 | } 10 | 11 | function unMockMathRandom() { 12 | if (Math.random.originalImplementation) { 13 | Math.random = Math.random.originalImplementation; 14 | } 15 | } 16 | 17 | console.log('Spinner count:', Object.keys(cliSpinners).length); 18 | 19 | test('main', t => { 20 | t.is(typeof cliSpinners, 'object'); 21 | t.is(cliSpinners.dots.interval, 80); 22 | t.true(Array.isArray(cliSpinners.dots.frames)); 23 | }); 24 | 25 | test('random getter', t => { 26 | const spinnersList = Object.keys(cliSpinners) 27 | // TODO: Remove this filter when "module.exports.default = spinners" is removed from index.js. 28 | .filter(key => key !== 'default') 29 | .map(key => cliSpinners[key]); 30 | 31 | // Should always return an item from the spinners list. 32 | t.true(spinnersList.includes(cliSpinners.random)); 33 | 34 | // Should return the first spinner when `Math.random()` is the minimum value. 35 | mockMathRandom(0); 36 | t.is(cliSpinners.random, spinnersList[0]); 37 | 38 | mockMathRandom(0.99); 39 | // Should return the last spinner when `Math.random()` is the maximum value. 40 | t.is(cliSpinners.random, spinnersList[spinnersList.length - 1]); 41 | 42 | unMockMathRandom(); 43 | }); 44 | -------------------------------------------------------------------------------- /example-all.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const readline = require('readline'); 3 | const logUpdate = require('log-update'); 4 | const cliSpinners = require('.'); 5 | 6 | const spinners = Object.keys(cliSpinners); 7 | let frame = 0; 8 | let spinner = 0; 9 | let next; 10 | let scrutator; 11 | 12 | const showNextFrame = () => { 13 | const {frames} = cliSpinners[spinners[spinner]]; 14 | logUpdate(frames[frame++ % frames.length] + ' ' + spinners[spinner]); 15 | }; 16 | 17 | const showNextSpinner = () => { 18 | if (next) { 19 | clearInterval(next); 20 | spinner++; 21 | } 22 | 23 | if (spinner < spinners.length) { 24 | const s = cliSpinners[spinners[spinner]]; 25 | next = setInterval(showNextFrame, s.interval); 26 | scrutator = setTimeout(showNextSpinner, Math.max(s.interval * s.frames.length, 1000)); 27 | } else { 28 | // eslint-disable-next-line unicorn/no-process-exit 29 | process.exit(0); 30 | } 31 | }; 32 | 33 | readline.emitKeypressEvents(process.stdin); 34 | 35 | process.stdin.setRawMode(true); 36 | 37 | process.stdin.on('keypress', (str, key) => { 38 | if (key.ctrl && key.name === 'c') { 39 | // eslint-disable-next-line unicorn/no-process-exit 40 | process.exit(130); 41 | } 42 | 43 | if (key.name === 'return') { 44 | if (scrutator) { 45 | clearTimeout(scrutator); 46 | showNextSpinner(); 47 | } 48 | } 49 | }); 50 | 51 | console.log(spinners.length + ' spinners\n'); 52 | showNextSpinner(); 53 | 54 | // $ node example-all.js 55 | // Press `Enter` to skip to the next spinner 56 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # cli-spinners [![Build Status](https://travis-ci.com/sindresorhus/cli-spinners.svg?branch=master)](https://travis-ci.com/github/sindresorhus/cli-spinners) 2 | 3 | > 70+ spinners for use in the terminal 4 | 5 |

6 |
7 | 8 |
9 |
10 |

11 | 12 | The list of spinners is just a [JSON file](spinners.json) and can be used wherever. 13 | 14 | You probably want to use one of these spinners through the [`ora`](https://github.com/sindresorhus/ora) module. 15 | 16 | ## Install 17 | 18 | ``` 19 | $ npm install cli-spinners 20 | ``` 21 | 22 | ## Usage 23 | 24 | ```js 25 | const cliSpinners = require('cli-spinners'); 26 | 27 | console.log(cliSpinners.dots); 28 | /* 29 | { 30 | interval: 80, 31 | frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] 32 | } 33 | */ 34 | ``` 35 | 36 | ## Preview 37 | 38 | The header GIF is outdated. See all the [spinner at once](https://jsfiddle.net/sindresorhus/2eLtsbey/embedded/result/) or [one at the time](https://asciinema.org/a/95348?size=big). 39 | 40 | ## API 41 | 42 | Each spinner comes with a recommended `interval` and an array of `frames`. 43 | 44 | [See the spinners.](spinners.json) 45 | 46 | The `random` spinner will return a random spinner each time it's called. 47 | 48 | ## Related 49 | 50 | - [ora](https://github.com/sindresorhus/ora) - Elegant terminal spinner 51 | - [CLISpinner](https://github.com/kiliankoe/CLISpinner) - Terminal spinners for Swift 52 | - [py-spinners](https://github.com/ManrajGrover/py-spinners) - Python port 53 | - [spinners](https://github.com/FGRibreau/spinners) - Terminal spinners for Rust 54 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace cliSpinners { 2 | type SpinnerName = 3 | | 'dots' 4 | | 'dots2' 5 | | 'dots3' 6 | | 'dots4' 7 | | 'dots5' 8 | | 'dots6' 9 | | 'dots7' 10 | | 'dots8' 11 | | 'dots9' 12 | | 'dots10' 13 | | 'dots11' 14 | | 'dots12' 15 | | 'dots8Bit' 16 | | 'line' 17 | | 'line2' 18 | | 'pipe' 19 | | 'simpleDots' 20 | | 'simpleDotsScrolling' 21 | | 'star' 22 | | 'star2' 23 | | 'flip' 24 | | 'hamburger' 25 | | 'growVertical' 26 | | 'growHorizontal' 27 | | 'balloon' 28 | | 'balloon2' 29 | | 'noise' 30 | | 'bounce' 31 | | 'boxBounce' 32 | | 'boxBounce2' 33 | | 'triangle' 34 | | 'arc' 35 | | 'circle' 36 | | 'squareCorners' 37 | | 'circleQuarters' 38 | | 'circleHalves' 39 | | 'squish' 40 | | 'toggle' 41 | | 'toggle2' 42 | | 'toggle3' 43 | | 'toggle4' 44 | | 'toggle5' 45 | | 'toggle6' 46 | | 'toggle7' 47 | | 'toggle8' 48 | | 'toggle9' 49 | | 'toggle10' 50 | | 'toggle11' 51 | | 'toggle12' 52 | | 'toggle13' 53 | | 'arrow' 54 | | 'arrow2' 55 | | 'arrow3' 56 | | 'bouncingBar' 57 | | 'bouncingBall' 58 | | 'smiley' 59 | | 'monkey' 60 | | 'hearts' 61 | | 'clock' 62 | | 'earth' 63 | | 'material' 64 | | 'moon' 65 | | 'runner' 66 | | 'pong' 67 | | 'shark' 68 | | 'dqpb' 69 | | 'weather' 70 | | 'christmas' 71 | | 'grenade' 72 | | 'point' 73 | | 'layer' 74 | | 'betaWave'; 75 | 76 | interface Spinner { 77 | /** 78 | Recommended interval. 79 | */ 80 | readonly interval: number; 81 | 82 | /** 83 | A list of frames to show for the spinner. 84 | */ 85 | readonly frames: string[]; 86 | } 87 | } 88 | 89 | /** 90 | 70+ spinners for use in the terminal. 91 | 92 | @example 93 | ``` 94 | import cliSpinners = require('cli-spinners'); 95 | 96 | console.log(cliSpinners.dots); 97 | // { 98 | // interval: 80, 99 | // frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] 100 | // } 101 | ``` 102 | */ 103 | declare const cliSpinners: { 104 | readonly [spinnerName in cliSpinners.SpinnerName]: cliSpinners.Spinner; 105 | } & { 106 | /** 107 | Returns a random spinner each time it's called. 108 | */ 109 | readonly random: cliSpinners.Spinner; 110 | 111 | // TODO: Remove this for the next major release 112 | default: typeof cliSpinners; 113 | }; 114 | 115 | export = cliSpinners; 116 | -------------------------------------------------------------------------------- /spinners.json: -------------------------------------------------------------------------------- 1 | { 2 | "dots": { 3 | "interval": 80, 4 | "frames": [ 5 | "⠋", 6 | "⠙", 7 | "⠹", 8 | "⠸", 9 | "⠼", 10 | "⠴", 11 | "⠦", 12 | "⠧", 13 | "⠇", 14 | "⠏" 15 | ] 16 | }, 17 | "dots2": { 18 | "interval": 80, 19 | "frames": [ 20 | "⣾", 21 | "⣽", 22 | "⣻", 23 | "⢿", 24 | "⡿", 25 | "⣟", 26 | "⣯", 27 | "⣷" 28 | ] 29 | }, 30 | "dots3": { 31 | "interval": 80, 32 | "frames": [ 33 | "⠋", 34 | "⠙", 35 | "⠚", 36 | "⠞", 37 | "⠖", 38 | "⠦", 39 | "⠴", 40 | "⠲", 41 | "⠳", 42 | "⠓" 43 | ] 44 | }, 45 | "dots4": { 46 | "interval": 80, 47 | "frames": [ 48 | "⠄", 49 | "⠆", 50 | "⠇", 51 | "⠋", 52 | "⠙", 53 | "⠸", 54 | "⠰", 55 | "⠠", 56 | "⠰", 57 | "⠸", 58 | "⠙", 59 | "⠋", 60 | "⠇", 61 | "⠆" 62 | ] 63 | }, 64 | "dots5": { 65 | "interval": 80, 66 | "frames": [ 67 | "⠋", 68 | "⠙", 69 | "⠚", 70 | "⠒", 71 | "⠂", 72 | "⠂", 73 | "⠒", 74 | "⠲", 75 | "⠴", 76 | "⠦", 77 | "⠖", 78 | "⠒", 79 | "⠐", 80 | "⠐", 81 | "⠒", 82 | "⠓", 83 | "⠋" 84 | ] 85 | }, 86 | "dots6": { 87 | "interval": 80, 88 | "frames": [ 89 | "⠁", 90 | "⠉", 91 | "⠙", 92 | "⠚", 93 | "⠒", 94 | "⠂", 95 | "⠂", 96 | "⠒", 97 | "⠲", 98 | "⠴", 99 | "⠤", 100 | "⠄", 101 | "⠄", 102 | "⠤", 103 | "⠴", 104 | "⠲", 105 | "⠒", 106 | "⠂", 107 | "⠂", 108 | "⠒", 109 | "⠚", 110 | "⠙", 111 | "⠉", 112 | "⠁" 113 | ] 114 | }, 115 | "dots7": { 116 | "interval": 80, 117 | "frames": [ 118 | "⠈", 119 | "⠉", 120 | "⠋", 121 | "⠓", 122 | "⠒", 123 | "⠐", 124 | "⠐", 125 | "⠒", 126 | "⠖", 127 | "⠦", 128 | "⠤", 129 | "⠠", 130 | "⠠", 131 | "⠤", 132 | "⠦", 133 | "⠖", 134 | "⠒", 135 | "⠐", 136 | "⠐", 137 | "⠒", 138 | "⠓", 139 | "⠋", 140 | "⠉", 141 | "⠈" 142 | ] 143 | }, 144 | "dots8": { 145 | "interval": 80, 146 | "frames": [ 147 | "⠁", 148 | "⠁", 149 | "⠉", 150 | "⠙", 151 | "⠚", 152 | "⠒", 153 | "⠂", 154 | "⠂", 155 | "⠒", 156 | "⠲", 157 | "⠴", 158 | "⠤", 159 | "⠄", 160 | "⠄", 161 | "⠤", 162 | "⠠", 163 | "⠠", 164 | "⠤", 165 | "⠦", 166 | "⠖", 167 | "⠒", 168 | "⠐", 169 | "⠐", 170 | "⠒", 171 | "⠓", 172 | "⠋", 173 | "⠉", 174 | "⠈", 175 | "⠈" 176 | ] 177 | }, 178 | "dots9": { 179 | "interval": 80, 180 | "frames": [ 181 | "⢹", 182 | "⢺", 183 | "⢼", 184 | "⣸", 185 | "⣇", 186 | "⡧", 187 | "⡗", 188 | "⡏" 189 | ] 190 | }, 191 | "dots10": { 192 | "interval": 80, 193 | "frames": [ 194 | "⢄", 195 | "⢂", 196 | "⢁", 197 | "⡁", 198 | "⡈", 199 | "⡐", 200 | "⡠" 201 | ] 202 | }, 203 | "dots11": { 204 | "interval": 100, 205 | "frames": [ 206 | "⠁", 207 | "⠂", 208 | "⠄", 209 | "⡀", 210 | "⢀", 211 | "⠠", 212 | "⠐", 213 | "⠈" 214 | ] 215 | }, 216 | "dots12": { 217 | "interval": 80, 218 | "frames": [ 219 | "⢀⠀", 220 | "⡀⠀", 221 | "⠄⠀", 222 | "⢂⠀", 223 | "⡂⠀", 224 | "⠅⠀", 225 | "⢃⠀", 226 | "⡃⠀", 227 | "⠍⠀", 228 | "⢋⠀", 229 | "⡋⠀", 230 | "⠍⠁", 231 | "⢋⠁", 232 | "⡋⠁", 233 | "⠍⠉", 234 | "⠋⠉", 235 | "⠋⠉", 236 | "⠉⠙", 237 | "⠉⠙", 238 | "⠉⠩", 239 | "⠈⢙", 240 | "⠈⡙", 241 | "⢈⠩", 242 | "⡀⢙", 243 | "⠄⡙", 244 | "⢂⠩", 245 | "⡂⢘", 246 | "⠅⡘", 247 | "⢃⠨", 248 | "⡃⢐", 249 | "⠍⡐", 250 | "⢋⠠", 251 | "⡋⢀", 252 | "⠍⡁", 253 | "⢋⠁", 254 | "⡋⠁", 255 | "⠍⠉", 256 | "⠋⠉", 257 | "⠋⠉", 258 | "⠉⠙", 259 | "⠉⠙", 260 | "⠉⠩", 261 | "⠈⢙", 262 | "⠈⡙", 263 | "⠈⠩", 264 | "⠀⢙", 265 | "⠀⡙", 266 | "⠀⠩", 267 | "⠀⢘", 268 | "⠀⡘", 269 | "⠀⠨", 270 | "⠀⢐", 271 | "⠀⡐", 272 | "⠀⠠", 273 | "⠀⢀", 274 | "⠀⡀" 275 | ] 276 | }, 277 | "dots8Bit": { 278 | "interval": 80, 279 | "frames": [ 280 | "⠀", 281 | "⠁", 282 | "⠂", 283 | "⠃", 284 | "⠄", 285 | "⠅", 286 | "⠆", 287 | "⠇", 288 | "⡀", 289 | "⡁", 290 | "⡂", 291 | "⡃", 292 | "⡄", 293 | "⡅", 294 | "⡆", 295 | "⡇", 296 | "⠈", 297 | "⠉", 298 | "⠊", 299 | "⠋", 300 | "⠌", 301 | "⠍", 302 | "⠎", 303 | "⠏", 304 | "⡈", 305 | "⡉", 306 | "⡊", 307 | "⡋", 308 | "⡌", 309 | "⡍", 310 | "⡎", 311 | "⡏", 312 | "⠐", 313 | "⠑", 314 | "⠒", 315 | "⠓", 316 | "⠔", 317 | "⠕", 318 | "⠖", 319 | "⠗", 320 | "⡐", 321 | "⡑", 322 | "⡒", 323 | "⡓", 324 | "⡔", 325 | "⡕", 326 | "⡖", 327 | "⡗", 328 | "⠘", 329 | "⠙", 330 | "⠚", 331 | "⠛", 332 | "⠜", 333 | "⠝", 334 | "⠞", 335 | "⠟", 336 | "⡘", 337 | "⡙", 338 | "⡚", 339 | "⡛", 340 | "⡜", 341 | "⡝", 342 | "⡞", 343 | "⡟", 344 | "⠠", 345 | "⠡", 346 | "⠢", 347 | "⠣", 348 | "⠤", 349 | "⠥", 350 | "⠦", 351 | "⠧", 352 | "⡠", 353 | "⡡", 354 | "⡢", 355 | "⡣", 356 | "⡤", 357 | "⡥", 358 | "⡦", 359 | "⡧", 360 | "⠨", 361 | "⠩", 362 | "⠪", 363 | "⠫", 364 | "⠬", 365 | "⠭", 366 | "⠮", 367 | "⠯", 368 | "⡨", 369 | "⡩", 370 | "⡪", 371 | "⡫", 372 | "⡬", 373 | "⡭", 374 | "⡮", 375 | "⡯", 376 | "⠰", 377 | "⠱", 378 | "⠲", 379 | "⠳", 380 | "⠴", 381 | "⠵", 382 | "⠶", 383 | "⠷", 384 | "⡰", 385 | "⡱", 386 | "⡲", 387 | "⡳", 388 | "⡴", 389 | "⡵", 390 | "⡶", 391 | "⡷", 392 | "⠸", 393 | "⠹", 394 | "⠺", 395 | "⠻", 396 | "⠼", 397 | "⠽", 398 | "⠾", 399 | "⠿", 400 | "⡸", 401 | "⡹", 402 | "⡺", 403 | "⡻", 404 | "⡼", 405 | "⡽", 406 | "⡾", 407 | "⡿", 408 | "⢀", 409 | "⢁", 410 | "⢂", 411 | "⢃", 412 | "⢄", 413 | "⢅", 414 | "⢆", 415 | "⢇", 416 | "⣀", 417 | "⣁", 418 | "⣂", 419 | "⣃", 420 | "⣄", 421 | "⣅", 422 | "⣆", 423 | "⣇", 424 | "⢈", 425 | "⢉", 426 | "⢊", 427 | "⢋", 428 | "⢌", 429 | "⢍", 430 | "⢎", 431 | "⢏", 432 | "⣈", 433 | "⣉", 434 | "⣊", 435 | "⣋", 436 | "⣌", 437 | "⣍", 438 | "⣎", 439 | "⣏", 440 | "⢐", 441 | "⢑", 442 | "⢒", 443 | "⢓", 444 | "⢔", 445 | "⢕", 446 | "⢖", 447 | "⢗", 448 | "⣐", 449 | "⣑", 450 | "⣒", 451 | "⣓", 452 | "⣔", 453 | "⣕", 454 | "⣖", 455 | "⣗", 456 | "⢘", 457 | "⢙", 458 | "⢚", 459 | "⢛", 460 | "⢜", 461 | "⢝", 462 | "⢞", 463 | "⢟", 464 | "⣘", 465 | "⣙", 466 | "⣚", 467 | "⣛", 468 | "⣜", 469 | "⣝", 470 | "⣞", 471 | "⣟", 472 | "⢠", 473 | "⢡", 474 | "⢢", 475 | "⢣", 476 | "⢤", 477 | "⢥", 478 | "⢦", 479 | "⢧", 480 | "⣠", 481 | "⣡", 482 | "⣢", 483 | "⣣", 484 | "⣤", 485 | "⣥", 486 | "⣦", 487 | "⣧", 488 | "⢨", 489 | "⢩", 490 | "⢪", 491 | "⢫", 492 | "⢬", 493 | "⢭", 494 | "⢮", 495 | "⢯", 496 | "⣨", 497 | "⣩", 498 | "⣪", 499 | "⣫", 500 | "⣬", 501 | "⣭", 502 | "⣮", 503 | "⣯", 504 | "⢰", 505 | "⢱", 506 | "⢲", 507 | "⢳", 508 | "⢴", 509 | "⢵", 510 | "⢶", 511 | "⢷", 512 | "⣰", 513 | "⣱", 514 | "⣲", 515 | "⣳", 516 | "⣴", 517 | "⣵", 518 | "⣶", 519 | "⣷", 520 | "⢸", 521 | "⢹", 522 | "⢺", 523 | "⢻", 524 | "⢼", 525 | "⢽", 526 | "⢾", 527 | "⢿", 528 | "⣸", 529 | "⣹", 530 | "⣺", 531 | "⣻", 532 | "⣼", 533 | "⣽", 534 | "⣾", 535 | "⣿" 536 | ] 537 | }, 538 | "line": { 539 | "interval": 130, 540 | "frames": [ 541 | "-", 542 | "\\", 543 | "|", 544 | "/" 545 | ] 546 | }, 547 | "line2": { 548 | "interval": 100, 549 | "frames": [ 550 | "⠂", 551 | "-", 552 | "–", 553 | "—", 554 | "–", 555 | "-" 556 | ] 557 | }, 558 | "pipe": { 559 | "interval": 100, 560 | "frames": [ 561 | "┤", 562 | "┘", 563 | "┴", 564 | "└", 565 | "├", 566 | "┌", 567 | "┬", 568 | "┐" 569 | ] 570 | }, 571 | "simpleDots": { 572 | "interval": 400, 573 | "frames": [ 574 | ". ", 575 | ".. ", 576 | "...", 577 | " " 578 | ] 579 | }, 580 | "simpleDotsScrolling": { 581 | "interval": 200, 582 | "frames": [ 583 | ". ", 584 | ".. ", 585 | "...", 586 | " ..", 587 | " .", 588 | " " 589 | ] 590 | }, 591 | "star": { 592 | "interval": 70, 593 | "frames": [ 594 | "✶", 595 | "✸", 596 | "✹", 597 | "✺", 598 | "✹", 599 | "✷" 600 | ] 601 | }, 602 | "star2": { 603 | "interval": 80, 604 | "frames": [ 605 | "+", 606 | "x", 607 | "*" 608 | ] 609 | }, 610 | "flip": { 611 | "interval": 70, 612 | "frames": [ 613 | "_", 614 | "_", 615 | "_", 616 | "-", 617 | "`", 618 | "`", 619 | "'", 620 | "´", 621 | "-", 622 | "_", 623 | "_", 624 | "_" 625 | ] 626 | }, 627 | "hamburger": { 628 | "interval": 100, 629 | "frames": [ 630 | "☱", 631 | "☲", 632 | "☴" 633 | ] 634 | }, 635 | "growVertical": { 636 | "interval": 120, 637 | "frames": [ 638 | "▁", 639 | "▃", 640 | "▄", 641 | "▅", 642 | "▆", 643 | "▇", 644 | "▆", 645 | "▅", 646 | "▄", 647 | "▃" 648 | ] 649 | }, 650 | "growHorizontal": { 651 | "interval": 120, 652 | "frames": [ 653 | "▏", 654 | "▎", 655 | "▍", 656 | "▌", 657 | "▋", 658 | "▊", 659 | "▉", 660 | "▊", 661 | "▋", 662 | "▌", 663 | "▍", 664 | "▎" 665 | ] 666 | }, 667 | "balloon": { 668 | "interval": 140, 669 | "frames": [ 670 | " ", 671 | ".", 672 | "o", 673 | "O", 674 | "@", 675 | "*", 676 | " " 677 | ] 678 | }, 679 | "balloon2": { 680 | "interval": 120, 681 | "frames": [ 682 | ".", 683 | "o", 684 | "O", 685 | "°", 686 | "O", 687 | "o", 688 | "." 689 | ] 690 | }, 691 | "noise": { 692 | "interval": 100, 693 | "frames": [ 694 | "▓", 695 | "▒", 696 | "░" 697 | ] 698 | }, 699 | "bounce": { 700 | "interval": 120, 701 | "frames": [ 702 | "⠁", 703 | "⠂", 704 | "⠄", 705 | "⠂" 706 | ] 707 | }, 708 | "boxBounce": { 709 | "interval": 120, 710 | "frames": [ 711 | "▖", 712 | "▘", 713 | "▝", 714 | "▗" 715 | ] 716 | }, 717 | "boxBounce2": { 718 | "interval": 100, 719 | "frames": [ 720 | "▌", 721 | "▀", 722 | "▐", 723 | "▄" 724 | ] 725 | }, 726 | "triangle": { 727 | "interval": 50, 728 | "frames": [ 729 | "◢", 730 | "◣", 731 | "◤", 732 | "◥" 733 | ] 734 | }, 735 | "arc": { 736 | "interval": 100, 737 | "frames": [ 738 | "◜", 739 | "◠", 740 | "◝", 741 | "◞", 742 | "◡", 743 | "◟" 744 | ] 745 | }, 746 | "circle": { 747 | "interval": 120, 748 | "frames": [ 749 | "◡", 750 | "⊙", 751 | "◠" 752 | ] 753 | }, 754 | "squareCorners": { 755 | "interval": 180, 756 | "frames": [ 757 | "◰", 758 | "◳", 759 | "◲", 760 | "◱" 761 | ] 762 | }, 763 | "circleQuarters": { 764 | "interval": 120, 765 | "frames": [ 766 | "◴", 767 | "◷", 768 | "◶", 769 | "◵" 770 | ] 771 | }, 772 | "circleHalves": { 773 | "interval": 50, 774 | "frames": [ 775 | "◐", 776 | "◓", 777 | "◑", 778 | "◒" 779 | ] 780 | }, 781 | "squish": { 782 | "interval": 100, 783 | "frames": [ 784 | "╫", 785 | "╪" 786 | ] 787 | }, 788 | "toggle": { 789 | "interval": 250, 790 | "frames": [ 791 | "⊶", 792 | "⊷" 793 | ] 794 | }, 795 | "toggle2": { 796 | "interval": 80, 797 | "frames": [ 798 | "▫", 799 | "▪" 800 | ] 801 | }, 802 | "toggle3": { 803 | "interval": 120, 804 | "frames": [ 805 | "□", 806 | "■" 807 | ] 808 | }, 809 | "toggle4": { 810 | "interval": 100, 811 | "frames": [ 812 | "■", 813 | "□", 814 | "▪", 815 | "▫" 816 | ] 817 | }, 818 | "toggle5": { 819 | "interval": 100, 820 | "frames": [ 821 | "▮", 822 | "▯" 823 | ] 824 | }, 825 | "toggle6": { 826 | "interval": 300, 827 | "frames": [ 828 | "ဝ", 829 | "၀" 830 | ] 831 | }, 832 | "toggle7": { 833 | "interval": 80, 834 | "frames": [ 835 | "⦾", 836 | "⦿" 837 | ] 838 | }, 839 | "toggle8": { 840 | "interval": 100, 841 | "frames": [ 842 | "◍", 843 | "◌" 844 | ] 845 | }, 846 | "toggle9": { 847 | "interval": 100, 848 | "frames": [ 849 | "◉", 850 | "◎" 851 | ] 852 | }, 853 | "toggle10": { 854 | "interval": 100, 855 | "frames": [ 856 | "㊂", 857 | "㊀", 858 | "㊁" 859 | ] 860 | }, 861 | "toggle11": { 862 | "interval": 50, 863 | "frames": [ 864 | "⧇", 865 | "⧆" 866 | ] 867 | }, 868 | "toggle12": { 869 | "interval": 120, 870 | "frames": [ 871 | "☗", 872 | "☖" 873 | ] 874 | }, 875 | "toggle13": { 876 | "interval": 80, 877 | "frames": [ 878 | "=", 879 | "*", 880 | "-" 881 | ] 882 | }, 883 | "arrow": { 884 | "interval": 100, 885 | "frames": [ 886 | "←", 887 | "↖", 888 | "↑", 889 | "↗", 890 | "→", 891 | "↘", 892 | "↓", 893 | "↙" 894 | ] 895 | }, 896 | "arrow2": { 897 | "interval": 80, 898 | "frames": [ 899 | "⬆️ ", 900 | "↗️ ", 901 | "➡️ ", 902 | "↘️ ", 903 | "⬇️ ", 904 | "↙️ ", 905 | "⬅️ ", 906 | "↖️ " 907 | ] 908 | }, 909 | "arrow3": { 910 | "interval": 120, 911 | "frames": [ 912 | "▹▹▹▹▹", 913 | "▸▹▹▹▹", 914 | "▹▸▹▹▹", 915 | "▹▹▸▹▹", 916 | "▹▹▹▸▹", 917 | "▹▹▹▹▸" 918 | ] 919 | }, 920 | "bouncingBar": { 921 | "interval": 80, 922 | "frames": [ 923 | "[ ]", 924 | "[= ]", 925 | "[== ]", 926 | "[=== ]", 927 | "[ ===]", 928 | "[ ==]", 929 | "[ =]", 930 | "[ ]", 931 | "[ =]", 932 | "[ ==]", 933 | "[ ===]", 934 | "[====]", 935 | "[=== ]", 936 | "[== ]", 937 | "[= ]" 938 | ] 939 | }, 940 | "bouncingBall": { 941 | "interval": 80, 942 | "frames": [ 943 | "( ● )", 944 | "( ● )", 945 | "( ● )", 946 | "( ● )", 947 | "( ●)", 948 | "( ● )", 949 | "( ● )", 950 | "( ● )", 951 | "( ● )", 952 | "(● )" 953 | ] 954 | }, 955 | "smiley": { 956 | "interval": 200, 957 | "frames": [ 958 | "😄 ", 959 | "😝 " 960 | ] 961 | }, 962 | "monkey": { 963 | "interval": 300, 964 | "frames": [ 965 | "🙈 ", 966 | "🙈 ", 967 | "🙉 ", 968 | "🙊 " 969 | ] 970 | }, 971 | "hearts": { 972 | "interval": 100, 973 | "frames": [ 974 | "💛 ", 975 | "💙 ", 976 | "💜 ", 977 | "💚 ", 978 | "❤️ " 979 | ] 980 | }, 981 | "clock": { 982 | "interval": 100, 983 | "frames": [ 984 | "🕛 ", 985 | "🕐 ", 986 | "🕑 ", 987 | "🕒 ", 988 | "🕓 ", 989 | "🕔 ", 990 | "🕕 ", 991 | "🕖 ", 992 | "🕗 ", 993 | "🕘 ", 994 | "🕙 ", 995 | "🕚 " 996 | ] 997 | }, 998 | "earth": { 999 | "interval": 180, 1000 | "frames": [ 1001 | "🌍 ", 1002 | "🌎 ", 1003 | "🌏 " 1004 | ] 1005 | }, 1006 | "material": { 1007 | "interval": 17, 1008 | "frames": [ 1009 | "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1010 | "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1011 | "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1012 | "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1013 | "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1014 | "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1015 | "███████▁▁▁▁▁▁▁▁▁▁▁▁▁", 1016 | "████████▁▁▁▁▁▁▁▁▁▁▁▁", 1017 | "█████████▁▁▁▁▁▁▁▁▁▁▁", 1018 | "█████████▁▁▁▁▁▁▁▁▁▁▁", 1019 | "██████████▁▁▁▁▁▁▁▁▁▁", 1020 | "███████████▁▁▁▁▁▁▁▁▁", 1021 | "█████████████▁▁▁▁▁▁▁", 1022 | "██████████████▁▁▁▁▁▁", 1023 | "██████████████▁▁▁▁▁▁", 1024 | "▁██████████████▁▁▁▁▁", 1025 | "▁██████████████▁▁▁▁▁", 1026 | "▁██████████████▁▁▁▁▁", 1027 | "▁▁██████████████▁▁▁▁", 1028 | "▁▁▁██████████████▁▁▁", 1029 | "▁▁▁▁█████████████▁▁▁", 1030 | "▁▁▁▁██████████████▁▁", 1031 | "▁▁▁▁██████████████▁▁", 1032 | "▁▁▁▁▁██████████████▁", 1033 | "▁▁▁▁▁██████████████▁", 1034 | "▁▁▁▁▁██████████████▁", 1035 | "▁▁▁▁▁▁██████████████", 1036 | "▁▁▁▁▁▁██████████████", 1037 | "▁▁▁▁▁▁▁█████████████", 1038 | "▁▁▁▁▁▁▁█████████████", 1039 | "▁▁▁▁▁▁▁▁████████████", 1040 | "▁▁▁▁▁▁▁▁████████████", 1041 | "▁▁▁▁▁▁▁▁▁███████████", 1042 | "▁▁▁▁▁▁▁▁▁███████████", 1043 | "▁▁▁▁▁▁▁▁▁▁██████████", 1044 | "▁▁▁▁▁▁▁▁▁▁██████████", 1045 | "▁▁▁▁▁▁▁▁▁▁▁▁████████", 1046 | "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", 1047 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████", 1048 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", 1049 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", 1050 | "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", 1051 | "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", 1052 | "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", 1053 | "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", 1054 | "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", 1055 | "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", 1056 | "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", 1057 | "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█", 1058 | "████████▁▁▁▁▁▁▁▁▁▁▁▁", 1059 | "█████████▁▁▁▁▁▁▁▁▁▁▁", 1060 | "█████████▁▁▁▁▁▁▁▁▁▁▁", 1061 | "█████████▁▁▁▁▁▁▁▁▁▁▁", 1062 | "█████████▁▁▁▁▁▁▁▁▁▁▁", 1063 | "███████████▁▁▁▁▁▁▁▁▁", 1064 | "████████████▁▁▁▁▁▁▁▁", 1065 | "████████████▁▁▁▁▁▁▁▁", 1066 | "██████████████▁▁▁▁▁▁", 1067 | "██████████████▁▁▁▁▁▁", 1068 | "▁██████████████▁▁▁▁▁", 1069 | "▁██████████████▁▁▁▁▁", 1070 | "▁▁▁█████████████▁▁▁▁", 1071 | "▁▁▁▁▁████████████▁▁▁", 1072 | "▁▁▁▁▁████████████▁▁▁", 1073 | "▁▁▁▁▁▁███████████▁▁▁", 1074 | "▁▁▁▁▁▁▁▁█████████▁▁▁", 1075 | "▁▁▁▁▁▁▁▁█████████▁▁▁", 1076 | "▁▁▁▁▁▁▁▁▁█████████▁▁", 1077 | "▁▁▁▁▁▁▁▁▁█████████▁▁", 1078 | "▁▁▁▁▁▁▁▁▁▁█████████▁", 1079 | "▁▁▁▁▁▁▁▁▁▁▁████████▁", 1080 | "▁▁▁▁▁▁▁▁▁▁▁████████▁", 1081 | "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", 1082 | "▁▁▁▁▁▁▁▁▁▁▁▁███████▁", 1083 | "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", 1084 | "▁▁▁▁▁▁▁▁▁▁▁▁▁███████", 1085 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████", 1086 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", 1087 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", 1088 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████", 1089 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", 1090 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███", 1091 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", 1092 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", 1093 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██", 1094 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", 1095 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", 1096 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█", 1097 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1098 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1099 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁", 1100 | "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁" 1101 | ] 1102 | }, 1103 | "moon": { 1104 | "interval": 80, 1105 | "frames": [ 1106 | "🌑 ", 1107 | "🌒 ", 1108 | "🌓 ", 1109 | "🌔 ", 1110 | "🌕 ", 1111 | "🌖 ", 1112 | "🌗 ", 1113 | "🌘 " 1114 | ] 1115 | }, 1116 | "runner": { 1117 | "interval": 140, 1118 | "frames": [ 1119 | "🚶 ", 1120 | "🏃 " 1121 | ] 1122 | }, 1123 | "pong": { 1124 | "interval": 80, 1125 | "frames": [ 1126 | "▐⠂ ▌", 1127 | "▐⠈ ▌", 1128 | "▐ ⠂ ▌", 1129 | "▐ ⠠ ▌", 1130 | "▐ ⡀ ▌", 1131 | "▐ ⠠ ▌", 1132 | "▐ ⠂ ▌", 1133 | "▐ ⠈ ▌", 1134 | "▐ ⠂ ▌", 1135 | "▐ ⠠ ▌", 1136 | "▐ ⡀ ▌", 1137 | "▐ ⠠ ▌", 1138 | "▐ ⠂ ▌", 1139 | "▐ ⠈ ▌", 1140 | "▐ ⠂▌", 1141 | "▐ ⠠▌", 1142 | "▐ ⡀▌", 1143 | "▐ ⠠ ▌", 1144 | "▐ ⠂ ▌", 1145 | "▐ ⠈ ▌", 1146 | "▐ ⠂ ▌", 1147 | "▐ ⠠ ▌", 1148 | "▐ ⡀ ▌", 1149 | "▐ ⠠ ▌", 1150 | "▐ ⠂ ▌", 1151 | "▐ ⠈ ▌", 1152 | "▐ ⠂ ▌", 1153 | "▐ ⠠ ▌", 1154 | "▐ ⡀ ▌", 1155 | "▐⠠ ▌" 1156 | ] 1157 | }, 1158 | "shark": { 1159 | "interval": 120, 1160 | "frames": [ 1161 | "▐|\\____________▌", 1162 | "▐_|\\___________▌", 1163 | "▐__|\\__________▌", 1164 | "▐___|\\_________▌", 1165 | "▐____|\\________▌", 1166 | "▐_____|\\_______▌", 1167 | "▐______|\\______▌", 1168 | "▐_______|\\_____▌", 1169 | "▐________|\\____▌", 1170 | "▐_________|\\___▌", 1171 | "▐__________|\\__▌", 1172 | "▐___________|\\_▌", 1173 | "▐____________|\\▌", 1174 | "▐____________/|▌", 1175 | "▐___________/|_▌", 1176 | "▐__________/|__▌", 1177 | "▐_________/|___▌", 1178 | "▐________/|____▌", 1179 | "▐_______/|_____▌", 1180 | "▐______/|______▌", 1181 | "▐_____/|_______▌", 1182 | "▐____/|________▌", 1183 | "▐___/|_________▌", 1184 | "▐__/|__________▌", 1185 | "▐_/|___________▌", 1186 | "▐/|____________▌" 1187 | ] 1188 | }, 1189 | "dqpb": { 1190 | "interval": 100, 1191 | "frames": [ 1192 | "d", 1193 | "q", 1194 | "p", 1195 | "b" 1196 | ] 1197 | }, 1198 | "weather": { 1199 | "interval": 100, 1200 | "frames": [ 1201 | "☀️ ", 1202 | "☀️ ", 1203 | "☀️ ", 1204 | "🌤 ", 1205 | "⛅️ ", 1206 | "🌥 ", 1207 | "☁️ ", 1208 | "🌧 ", 1209 | "🌨 ", 1210 | "🌧 ", 1211 | "🌨 ", 1212 | "🌧 ", 1213 | "🌨 ", 1214 | "⛈ ", 1215 | "🌨 ", 1216 | "🌧 ", 1217 | "🌨 ", 1218 | "☁️ ", 1219 | "🌥 ", 1220 | "⛅️ ", 1221 | "🌤 ", 1222 | "☀️ ", 1223 | "☀️ " 1224 | ] 1225 | }, 1226 | "christmas": { 1227 | "interval": 400, 1228 | "frames": [ 1229 | "🌲", 1230 | "🎄" 1231 | ] 1232 | }, 1233 | "grenade": { 1234 | "interval": 80, 1235 | "frames": [ 1236 | "، ", 1237 | "′ ", 1238 | " ´ ", 1239 | " ‾ ", 1240 | " ⸌", 1241 | " ⸊", 1242 | " |", 1243 | " ⁎", 1244 | " ⁕", 1245 | " ෴ ", 1246 | " ⁓", 1247 | " ", 1248 | " ", 1249 | " " 1250 | ] 1251 | }, 1252 | "point": { 1253 | "interval": 125, 1254 | "frames": [ 1255 | "∙∙∙", 1256 | "●∙∙", 1257 | "∙●∙", 1258 | "∙∙●", 1259 | "∙∙∙" 1260 | ] 1261 | }, 1262 | "layer": { 1263 | "interval": 150, 1264 | "frames": [ 1265 | "-", 1266 | "=", 1267 | "≡" 1268 | ] 1269 | }, 1270 | "betaWave": { 1271 | "interval": 80, 1272 | "frames": [ 1273 | "ρββββββ", 1274 | "βρβββββ", 1275 | "ββρββββ", 1276 | "βββρβββ", 1277 | "ββββρββ", 1278 | "βββββρβ", 1279 | "ββββββρ" 1280 | ] 1281 | }, 1282 | "aesthetic": { 1283 | "interval": 80, 1284 | "frames": [ 1285 | "▰▱▱▱▱▱▱", 1286 | "▰▰▱▱▱▱▱", 1287 | "▰▰▰▱▱▱▱", 1288 | "▰▰▰▰▱▱▱", 1289 | "▰▰▰▰▰▱▱", 1290 | "▰▰▰▰▰▰▱", 1291 | "▰▰▰▰▰▰▰", 1292 | "▰▱▱▱▱▱▱" 1293 | ] 1294 | } 1295 | } 1296 | --------------------------------------------------------------------------------