[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94859":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":14,"starSnapshotCount":14,"syncStatus":21,"lastSyncTime":9,"discoverSource":22},94859,"tools-for-autodarts","creazy231\u002Ftools-for-autodarts","creazy231","Tools for Autodarts enhances the gaming experience on autodarts.io",null,"https:\u002F\u002Fgithub.com\u002Fcreazy231\u002Ftools-for-autodarts","Vue",127,32,0,41.56,false,"main","2026-08-24 04:01:22","\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fautodarts-tools-logo.png\" alt=\"Tools for Autodarts Logo\" width=\"200\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">\nTools for Autodarts\n\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fcreazy231\u002Ftools-for-autodarts\u002Frelease.yml\" alt=\"GitHub Actions Workflow Status\">&nbsp;\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fpackage-json\u002Fv\u002Fcreazy231\u002Ftools-for-autodarts\" alt=\"GitHub package.json version\">&nbsp;\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcreazy231\u002Ftools-for-autodarts\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fcreazy231\u002Ftools-for-autodarts\" alt=\"GitHub Release\">\u003C\u002Fa>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Ca href=\"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Ftools-for-autodarts\u002Foolfddhehmbpdnlmoljmllcdggmkgihh\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fchrome-web-store\u002Fv\u002Foolfddhehmbpdnlmoljmllcdggmkgihh?logo=google-chrome&logoColor=%23FFFFFF&label=Chrome\" alt=\"Chrome Web Store Version\">\u003C\u002Fa>&nbsp;\u003Ca href=\"https:\u002F\u002Faddons.mozilla.org\u002Fde\u002Ffirefox\u002Faddon\u002Ftools-for-autodarts\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Famo\u002Fv\u002Ftools-for-autodarts?logo=firefox&logoColor=%23FFFFFF&label=Firefox\" alt=\"Mozilla Add-on Version\">\u003C\u002Fa>&nbsp;\u003Ca href=\"https:\u002F\u002Fapps.apple.com\u002Fde\u002Fapp\u002Ftools-for-autodarts\u002Fid6479754594\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fitunes\u002Fv\u002F6479754594?logo=apple&logoColor=%23FFFFFF&label=MacOS%20%26%20iOS\" alt=\"App Store Version\">\u003C\u002Fa>&nbsp;\u003Ca href=\"https:\u002F\u002Fintradeus.github.io\u002Fhttp-protocol-redirector?r=altstore:\u002F\u002Fsource?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fcreazy231\u002Ftools-for-autodarts\u002Frefs\u002Fheads\u002Fmain\u002FAutodarts_Tools_Source.json\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fcreazy231\u002Ftools-for-autodarts?logo=apple&logoColor=%23FFFFFF&label=AltStore%20iOS&color=007AFF\" alt=\"AltStore iOS Version\">\u003C\u002Fa>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Ca href=\"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Ftools-for-autodarts\u002Foolfddhehmbpdnlmoljmllcdggmkgihh\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fchrome-web-store\u002Fusers\u002Foolfddhehmbpdnlmoljmllcdggmkgihh?logo=google-chrome&logoColor=%23FFFFFF&label=Chrome%20Users\" alt=\"Chrome Web Store Users\">\u003C\u002Fa>&nbsp;\u003Ca href=\"https:\u002F\u002Faddons.mozilla.org\u002Fde\u002Ffirefox\u002Faddon\u002Ftools-for-autodarts\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Famo\u002Fusers\u002Ftools-for-autodarts?logo=firefox&logoColor=%23FFFFFF&label=Firefox%20Users&color=4c1\" alt=\"Mozilla Add-on Users\">\u003C\u002Fa>&nbsp;\u003Ca href=\"https:\u002F\u002Fko-fi.com\u002Fcreazy231\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKo--fi-Support%20me%20on%20Ko--fi-FF5E5B?logo=ko-fi&logoColor=white\" alt=\"Support me on Ko-fi\">\u003C\u002Fa>\u003C\u002Fp>\n\n\u003Chr>\n\n> [!CAUTION]\n> **Tools for Autodarts** is developed by the community and is not an integral part of the official Autodarts platform.\n\n## 📋 Overview\n\nTools for Autodarts is a browser extension that enhances your gaming experience on [autodarts.com](https:\u002F\u002Fautodarts.com). It adds numerous quality-of-life features, customization options, and advanced functionality to make your Autodarts experience more enjoyable and personalized.\n\n## 💾 Installation\n\n### 🌐 Browser Extensions\n- [Chrome Web Store](https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Ftools-for-autodarts\u002Foolfddhehmbpdnlmoljmllcdggmkgihh)\n- [Firefox Add-ons](https:\u002F\u002Faddons.mozilla.org\u002Fde\u002Ffirefox\u002Faddon\u002Ftools-for-autodarts)\n- [MacOS & iOS App Store](https:\u002F\u002Fapps.apple.com\u002Fde\u002Fapp\u002Ftools-for-autodarts\u002Fid6479754594)\n- [iOS sideload via AltStore](https:\u002F\u002Fintradeus.github.io\u002Fhttp-protocol-redirector?r=altstore:\u002F\u002Finstall?url=https:\u002F\u002Fgithub.com\u002Fcreazy231\u002Ftools-for-autodarts\u002Freleases\u002Flatest\u002Fdownload\u002Fautodarts-tools-ios.ipa)\n\n### 📱 AltStore Installation Guides (iPhone\u002FiPad)\n- [Windows Installation Guide](https:\u002F\u002Ffaq.altstore.io\u002Faltstore-classic\u002Fhow-to-install-altstore-windows)\n- [macOS Installation Guide](https:\u002F\u002Ffaq.altstore.io\u002Faltstore-classic\u002Fhow-to-install-altstore-macos)\n\n### 🌐 AltStore Source\n- [View in Browser](https:\u002F\u002Ftherealfoxster.github.io\u002Faltsource-viewer\u002Fview\u002F?source=https:\u002F\u002Fraw.githubusercontent.com\u002Fcreazy231\u002Ftools-for-autodarts\u002Frefs\u002Fheads\u002Fmain\u002FAutodarts_Tools_Source.json)\n- [Add to AltStore](https:\u002F\u002Fintradeus.github.io\u002Fhttp-protocol-redirector?r=altstore:\u002F\u002Fsource?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fcreazy231\u002Ftools-for-autodarts\u002Frefs\u002Fheads\u002Fmain\u002FAutodarts_Tools_Source.json)\n\n# 📑 Table of Contents\n\n- [Overview](#-overview)\n- [Installation](#-installation)\n- [Features](#-features)\n  - [Lobby Enhancements](#-lobby-enhancements)\n  - [Match Customization](#-match-customization)\n  - [Gameplay Features](#-gameplay-features)\n  - [Audio Features](#-audio-features)\n  - [WLED Integration](#-wled-integration)\n  - [Animations](#-animations)\n  - [Utility Features](#-utility-features)\n- [Configuration](#️-configuration)\n- [Development](#-development)\n- [Contributing](#-contributing)\n- [Show your support](#️-show-your-support)\n- [Credits](#-credits)\n- [License](#-license)\n\n## ✨ Features\n\n### 🚪 Lobby Enhancements\n- **Auto-Start**: Automatically starts the game 3 seconds after a player joins the lobby\n- **Discord Webhook Integration**: Sends invitation links for private lobbies to your Discord server\n  - **Auto-Start Timer**: Automatically starts the game after a configurable time delay once the webhook is sent\n- **Shuffle Players**: Randomly reorder players in the lobby\n- **Extended Recent Players List**: Increase the number of recent local players beyond the default limit of 5\n- **Team Lobby Mode**: Removes initial player and auto-selects board for team games\n- **QR Code**: Automatically displays the lobby QR code for easily sharing with other players\n\n### 🎨 Match Customization\n- **Color Customization**: Change the colors of dart throws, scores, and match background for a personalized gaming environment\n- **Streaming Mode**: Includes green screen support, board visualization, and thrown darts display\n- **Virtual Board Surround**: Adds a customizable surround to the dartboard\n- **Darts Zoom**: Shows a zoomed view of your dart throws in the bottom corners or center of the screen\n  - Configurable position (bottom-right, bottom-left, or center)\n  - View mode toggle between live camera feed and static board image\n  - Adjustable zoom level for detailed throw analysis\n- **Hide Menu**: Provides more space for the game view\n- **Automatic Fullscreen**: Automatically enables fullscreen mode during matches for an immersive experience\n- **Adjustable UI Elements**: Modify the size of legs, sets, and match information\n- **Larger Player Names**: Increase the font size of player names for better visibility during matches\n\n### 🎮 Gameplay Features\n- **Takeout Visualization**: Visual notification when takeout is in progress\n- **Automatic Next Player**: Switches to the next player after a configurable delay when takeout is stuck\n- **Automatic Next Leg\u002FSet**: Automatically advances to the next leg or set after takeout\n- **Smaller Font for Inactive Players**: Reduces the font size of scores for players not currently throwing\n- **External Boards Support**: Easily follow games on external boards\n- **Fancy Gameshot Animation**: Celebratory animation when a player wins\n- **Enhanced Scoring Display**: Improves dart throw visuals with larger numbers and scoring notation\n  - Shows dart notation (S\u002FD\u002FT, BULL) beneath point values\n  - Includes smooth animations when scores update\n- **Animations**: Display custom animations for special events like 180s, bulls, busts, and leg wins during gameplay\n- **Quick Correction**: Easily fix misrecognized dart throws with an intuitive interface\n  - Grid-based correction panel showing all board segments\n  - Numpad keyboard shortcuts for fast corrections\n  - Color-coded buttons matching dart board segments\n  - Keyboard shortcuts for accessing throws (\u002F, *, -) and making corrections\n- **Instant Replay**: Records webcam footage and automatically shows replays of winning throws\n- **Gotcha Helper**: Shows how many points the other players are ahead in Gotcha game variant\n  - Displays dart throws needed to catch up\n- **Checkout Guide**: Displays suggested checkout darts in each player's score box\n\n### 🔊 Audio Features\n- **Caller**: Voice announcements for scores, checkouts, and each dart thrown during gameplay\n- **Sound FX**: Ambient sound effects for different game events\n- **Sound Upload**: Add your own custom sounds for personalized feedback\n- **Text-to-Speech (TTS)**: Generate custom caller and sound FX audio directly from text using your device's built-in voices\n- **WLED Integration**: Trigger lighting effects and HTTP requests synchronized with game events\n\n### 🗣️ Caller Feature\nThe Caller feature provides voice announcements during your darts gameplay, similar to professional darts tournaments:\n\n#### Configuration Options\n- **Call Every Dart**: Announces each dart as it's thrown, rather than waiting for the end of a turn\n- **Call Checkout**: Announces possible checkout combinations when a player is on a checkout score\n- **Custom Sound Library**: Add, edit, and organize voice clips for different game events\n- **Text-to-Speech (TTS) Generation**: Generate caller sounds directly from text using the built-in \"Generate TTS\" button — no external files needed. Select from any voice installed on your device, adjust speed and pitch, and preview before saving. Your last-used voice, speed, and pitch settings are remembered across sessions.\n- **Bulk Upload with Trigger Assignment**: When uploading multiple files, you can assign the same trigger to all files at once, making it easy to set up larger sound sets without manually assigning triggers to each file individually\n\n#### Supported Triggers\nYou can assign sounds to be played based on these triggers:\n\n- **Points**: `0` to `180` (point totals)\n- **Point Ranges**: A range between `0` and `180`, e.g. `0-20` or `100-180` (point totals)\n- **Singles**: `s1` to `s20` and `s25` (single segments)\n- **Doubles**: `d1` to `d20` and `bull` (double segments and bullseye)\n- **Triples**: `t1` to `t20` (triple segments)\n- **Special Voice Lines**:\n  - `gameon`: At the start of a new game\n  - `gameshot`: When a player wins the game\n  - `you_require`: Plays before announcing checkout combinations (numbers are called separately)\n  - `busted`: When a player busts\n  - `double`, `triple`: Generic announcements for dart types\n  - `outside`: When a dart lands outside the scoring area\n  - `next_player`: Plays when switching to the next player (fallback if no player name sound is found)\n  - `bot`: Plays instead of player name when the player is a CPU\u002Fbot player\n  - `playername`: Player name sounds play automatically when it's their turn. Example: If your name is `creazy.eth` on Autodarts, simply use `creazy.eth` (supports spaces or `_` like `player_name` or `player name`)\n- **Board Status**:\n  - `board_started`: When the board has started\n  - `board_stopped`: When the board has stopped or disconnected\n  - `manual_reset_done`: After a manual reset (also triggered when a new round starts)\n  - `takeout_finished`: When takeout has finished\n  - `calibration_started`: When calibration is started\n  - `calibration_finished`: When calibration has finished\n- **Cricket-Specific**:\n  - `cricket_hit`: When a player hits a Cricket target (15-20 and Bull)\n  - `cricket_miss`: When a player hits a non-Cricket target (Miss-14)\n\n#### Cricket Mode Behavior\nIn Cricket games, the caller has specific behavior:\n- `cricket_hit` is triggered when a player hits a target that's still open (15-20 and Bull)\n- `cricket_miss` is triggered when a player hits any other number (Miss-14) or hits a target that's already closed by all players\n- Regular throw sounds (like `t20`, `d16`) are still announced when enabled\n\n#### Audio Interaction Requirements\nDue to browser security policies, especially on Safari and mobile browsers, audio can only be played after user interaction (click, tap, or keypress). The extension will:\n- Automatically detect when audio can't be played\n- Show a notification prompting the user to interact with the page\n- Automatically unlock audio playback once interaction occurs\n- Queue up sounds to ensure nothing is missed during this process\n\n#### Predefined Caller Sets\nThe extension comes with ready-to-use caller sets that you can easily import:\n\n##### Dutch (nl-NL)\n- **NL - Laura (Female)**: Dutch female voice caller\n\n##### French (fr-FR) \n- **FR - Remi (Male)**: French male voice caller\n- **FR - Lea (Female)**: French female voice caller\n\n##### Spanish (es-ES)\n- **ES - Lucia (Female)**: Spanish female voice caller\n- **ES - Sergio (Male)**: Spanish male voice caller  \n\n##### German & Austrian\n- **AT - Hannah (Female)**: Austrian German female voice caller\n- **DE - Vicki (Female)**: German female voice caller\n- **DE - Daniel (Male)**: German male voice caller\n\n##### British English (en-GB)\n- **GB - Amy (Female)**: British female voice caller\n- **GB - Arthur (Male)**: British male voice caller\n\n##### American English (en-US)\n- **US - Ivy (Female)**: American female voice caller\n- **US - Joey (Male)**: American male voice caller\n- **US - Joanna (Female)**: American female voice caller\n- **US - Matthew (Male)**: American male voice caller\n- **US - Danielle (Female)**: American female voice caller\n- **US - Kimberly (Female)**: American female voice caller\n- **US - Ruth (Female)**: American female voice caller\n- **US - Salli (Female)**: American female voice caller\n- **US - Kevin (Male)**: American male voice caller\n- **US - Justin (Male)**: American male voice caller\n- **US - Stephen (Male)**: American male voice caller\n- **US - Kendra (Female)**: American female voice caller\n- **US - Gregory (Male)**: American male voice caller\n\nSimply select one of these presets when adding sounds through the \"Import from URL\" option in the Caller settings.\n\n> [!NOTE]\n> Some predefined caller sets may not work in Safari due to browser restrictions. Tools for Autodarts is not responsible for the content of these caller sets.\n\n#### Intelligent Fallback System\nThe caller has a sophisticated fallback system to provide complete coverage even with limited sound files:\n- **Segment Announcements**: If a specific segment sound (e.g., `s20`) isn't available, it automatically plays just the number (`20`)\n- **Double\u002FTriple Handling**: For doubles and triples, it follows the pattern of playing the word followed by the number (e.g., `d20` → `double` + `20`)\n- **Miss Handling**: `miss` or `m` prefixed throws will fall back to `outside` sounds\n- **Matchshot Handling**: When no `matchshot` sound is available, the system will automatically use the `gameshot` sound instead\n- **Player Announcements**: Automatically announces the current player's name at the start of their turn\n- **Game Start**: Plays the \"game on\" sound at the beginning of a match\n\n#### Cross-Browser Audio Support\n- Compatible with all major browsers including Safari on iOS\u002FMacOS\n- Automatic audio unlocking for mobile browsers that require user interaction\n- Queued sound playback to ensure all announcements are heard in the correct order\n\n### 🔊 Sound FX Feature\nThe Sound FX feature adds ambient sound effects to your gameplay experience:\n\n#### Game Event Sounds\nAdd sound effects for various game events:\n- **Point Triggers**: Sounds can be triggered for any score from `ambient_0` to `ambient_180`\n- **Point Ranges**: A range between `0` and `180`, e.g. `0-20` or `100-180` (point totals). Format: `ambient_100-180` or `100-180` (with or without the `ambient_` prefix)\n- **Individual Throws**: Sounds for specific throws like `ambient_s20`, `ambient_d16`, `ambient_t19`, etc.\n- **Combined Throws**: Trigger sounds based on a sequence of throws using format `s20_t19_d12`\n- **Special Events**: Dedicated sounds for `ambient_gameon`, `gameshot`, `busted`, and more\n- **Player Turn Sounds**: \n  - `ambient_next_player`: Plays when switching to the next player (fallback if no player name sound exists)\n  - `ambient_bot`: Plays when switching to a CPU\u002Fbot player\n  - `bot_throw`: Plays when a bot player throws a dart\n  - `opponent_throw`: Plays when a remote opponent (any real player other than you, on a different board) throws a dart — useful as throw feedback when playing online without looking at the screen. Your own throws and bot throws are excluded (bots use `bot_throw`), and so are players sharing your board (e.g. a friend visiting to play on your board with their own account) since that board already makes the throw noise\n  - Player-specific sounds using format: `ambient_playername` or `ambient_player_name`\n- **Lobby Sounds**:\n  - `ambient_lobby_in`: Plays when a player joins the lobby\n  - `ambient_lobby_out`: Plays when a player leaves the lobby\n- **Tournament Sounds**:\n  - `ambient_tournament_ready`: Plays when \"Time to ready up\" text appears in tournaments\n- **Board Status Sounds** (only during a game):\n  - `ambient_board_started`: Plays when the board has started\n  - `ambient_board_stopped`: Plays when the board has stopped or disconnected\n  - `ambient_manual_reset_done`: Plays after a manual reset (also triggered when a new round starts)\n  - `ambient_takeout_finished`: Plays when takeout has finished\n  - `ambient_calibration_started`: Plays when calibration is started\n  - `ambient_calibration_finished`: Plays when calibration has finished\n- **Player-Specific Gameshot**: Create personalized winning sounds for specific players using the following formats:\n  - `gameshot_player name` (spaces preserved)\n  - `gameshot_player_name` (with underscores replacing spaces)\n  - With ambient prefix: `ambient_gameshot_player_name`\n- **Cricket Mode**: Special triggers for Cricket games:\n  - `cricket_hit`: Triggered when hitting Cricket targets (15-20 and Bull) that are still open\n  - `cricket_miss`: Triggered when hitting non-Cricket targets (Miss-14) or hitting targets already closed by all players\n\n#### Match vs Game Winning Sounds\nThe Sound FX feature distinguishes between winning a single game (gameshot) and winning the entire match (matchshot):\n- **Match Win**: `ambient_matchshot` or `matchshot` triggers when a player wins the complete match\n- **Game Win**: `ambient_gameshot` or `gameshot` triggers when a player wins a single game\u002Fleg\n- **Player-Specific Match Win**: Create personalized match winning sounds:\n  - `matchshot_player_name` (with underscores)\n  - `matchshot_player name` (with spaces)\n  - With ambient prefix: `ambient_matchshot_player_name`\n\n#### Ambient Sound Prefix\n- Use the `ambient_` prefix (e.g., `ambient_180`, `ambient_t20`) to create separate sound sets for caller and ambient sounds\n- This allows you to have professional voice announcements via the Caller while also having fun sound effects via Sound FX\n\n#### Dual Audio Channels\n- Enhanced sound playback with separate audio channels for caller and ambient sounds\n- Improved game mode handling for specialized sound triggers\n- Better performance with simultaneous sound playback\n\n#### Smart Fallback System\nThe Sound FX feature includes a sophisticated multi-level fallback system:\n- If an exact match with `ambient_` prefix isn't found, it tries without the prefix\n- For segment triggers like `ambient_t20`, it tries multiple fallbacks in this order:\n  - Exact match: `ambient_t20`\n  - Without ambient prefix: `t20`\n  - Split into word+number: `ambient_triple` + `ambient_20`\n  - Non-ambient word+number: `triple` + `20`\n  - Just the number: `20`\n- Similar fallback chains exist for double segments (`d16`) and single segments (`s1`)\n- For `miss` or `m` prefixed throws, it falls back to `outside` sounds\n- In Cricket games, `miss` triggers may fall back to `cricket_miss` sounds\n- **Matchshot Fallbacks**: When a player wins a match, the system tries sounds in this order:\n  - Player-specific matchshot: `ambient_matchshot_player_name`\n  - Player-specific gameshot: `ambient_gameshot_player_name`\n  - Generic matchshot: `ambient_matchshot`\n  - Generic gameshot: `ambient_gameshot`\n- If no match is found after all fallback attempts, no sound is played\n\n#### Text-to-Speech (TTS) Generation\nGenerate sound effects directly from text without needing external audio files:\n- **Generate TTS Button**: Available in the Sound FX settings toolbar alongside Upload and Delete buttons\n- **Voice Selection**: Choose from any voice installed on your operating system (varies by platform)\n- **Speed & Pitch Control**: Adjust speech rate (0.5x–2x) and pitch (0–2) with sliders\n- **Prelisten**: Preview the generated speech before saving\n- **Persistent Settings**: Your last-used voice, speed, and pitch are remembered across sessions\n- **Cross-Platform**: Works on Desktop (Chrome, Firefox, Edge, Safari), iOS Safari, and Android Chrome using the Web Speech API\n- **Trigger Assignment**: Assign triggers to TTS sounds just like any other sound\n\n> [!NOTE]\n> TTS sounds use your device's built-in speech synthesis and are generated live during playback. Voice availability and quality depend on your operating system. Short phrases work best for dart calling use cases.\n\n#### Bulk Upload with Trigger Assignment\n- **Multi-File Upload**: Upload multiple sound files at once for faster setup\n- **Bulk Trigger Assignment**: When \"Generate triggers from filenames\" is disabled, you can assign the same trigger to all uploaded files at once\n- **Efficient Setup**: Makes it easy to set up larger sound sets without manually assigning triggers to each file individually\n\n#### Technical Features\n- **Queue Management**: Enhanced sound queue management to prevent overlapping and ensure proper playback order (improved in v2.0.3)\n- **Format Support**: Plays both URL-based sounds, base64-encoded audio, and TTS (text-to-speech) sounds\n- **IndexedDB Storage**: Efficiently stores sound files in browser database to improve performance\n- **Error Handling**: Automatically falls back to alternative sources if a sound fails to play\n- **Safari Compatible**: Works with all major browsers including Safari's strict audio policies\n\n### 💡 WLED Integration\nThe WLED feature allows you to trigger lighting effects and other HTTP requests based on game events, creating an immersive visual experience synchronized with your darts gameplay.\n\n#### What is WLED?\nWLED is a popular open-source firmware for controlling addressable LED strips (WS2812B, SK6812, etc.) with ESP8266\u002FESP32 microcontrollers. It provides a web interface and HTTP API for controlling lighting effects, making it perfect for integrating with Tools for Autodarts.\n\n#### Configuration Options\n- **Effect Management**: Add, edit, enable\u002Fdisable, and reorder lighting effects\n- **Board Filtering**: Restrict effects to specific board IDs, with an \"other\" effect for non-matching boards\n- **CSV Import**: Bulk import effects using CSV format: `[name];[url];[trigger1];[trigger2]...`\n- **Drag & Drop**: Reorder effects by dragging them in the settings interface\n- **URL Validation**: All URLs must use HTTPS for security reasons\n\n#### Supported Triggers\nEffects can be triggered by various game events using these triggers:\n\n##### Board Status (only during a game)\n- **board_starting**: when the board is going to start\n- **board_started**: when the board has started\n- **board_stopping**: when the board is going to stop\n- **board_stopped**: when the board has stopped\n- **manual_reset_done**: after a manual reset (is also triggered when a new round starts)\n- **throw**: when a throw is detected\n- **last_throw**: when the last throw is detected\n- **takeout_finished**: when takeout has finished\n- **calibration_started**: when calibration is started\n- **calibration_finished**: when calibration has finished\n\n##### Game Events\n- **`gameon`**: At the start of each player's turn (default fallback effect)\n- **`takeout`**: When takeout is in progress\n- **`gameshot`**: When a player wins a game\u002Fleg\n- **`gameshot+[throwName]`**: When a player wins a game\u002Fleg with the specified throw (e.g. `gameshot+d10`)\n- **`matchshot`**: When a player wins the entire match\n- **`matchshot+[throwName]`**: When a player wins the entire match with the specified throw (e.g. `matchshot+bull`)\n- **`busted`**: When a player busts (scores more than needed)\n- **`idle`**: When leaving the match (cleanup effect)\n\n##### Point Totals\n- **`0` to `180`**: Triggered by the total points scored in a turn\n- **Range Format**: `range_[min]_[max]` (e.g., `range_100_180` for scores between 100-180)\n\n##### Individual Dart Throws\n- **Singles**: `s1` to `s20`, `s25` (single segments, s25 for single bull)\n- **Doubles**: `d1` to `d20`, `bull` (double segments, bull for bullseye)\n- **Triples**: `t1` to `t20` (triple segments)\n- **`outside`**: When a dart lands outside the scoring area\n\n##### Combination Throws\n- **Format**: `[dart1]_[dart2]_[dart3]` (e.g., `t20_t20_t20` for three triple 20s)\n- Triggered only when all three darts are thrown in the exact sequence\n\n##### Lobby Events\n- **`lobby_in`**: When a player joins the lobby\n- **`lobby_out`**: When a player leaves the lobby\n\n##### Tournament Events\n- **`tournament_ready`**: Triggered when tournament start event is received via websocket\n\n##### Player-Specific Effects\n- **Player Names**: Use the exact player name as it appears in Autodarts. This is triggered instead of the generic `gameon` effect.\n- **Spaces**: Player names with spaces are supported (e.g., `john doe`)\n- **Underscores**: Alternative format with whitespaces replaced by underscores (e.g., `john_doe`)\n- **`bot_throw`**: Triggered when a CPU\u002Fbot player throws\n- **`gameshot_[player name]`**: player specific gameshot trigger\n- **`matchshot_[player name]`**: player specific matchshot trigger\n\n##### Board-Specific Effects\n- **Board IDs**: Configure specific board IDs to limit effects to certain boards\n- **`other`**: Special trigger for throws on boards not in the configured board ID list\n- **Format**: Board IDs are UUIDs (e.g., `6a501a61-53a5-468a-a56a-17134ace3099`)\n\n#### Smart Effect Selection\n- **Multiple Effects**: If multiple effects share the same trigger, one is randomly selected\n- **Priority System**: More specific effects take precedence over general ones\n- **Fallback Logic**: Falls back to `gameon` effect if no specific trigger matches\n\n#### Technical Implementation\n- **HTTP Requests**: Effects trigger HTTP GET requests to the specified URLs\n- **JSON API**: Effects trigger HTTP POST requests to the specified URLs with the specified JSON body\n- **HTTPS Only**: All URLs must use HTTPS protocol for security (HTTP may work in the local network)\n- **Debouncing**: Game events are debounced to prevent rapid-fire triggers\n- **Error Handling**: Failed requests are silently ignored to prevent interrupting gameplay\n\n#### Example WLED URLs\n```\nhttp:\u002F\u002Fwled-device.local\u002Fwin\u002FPL=1    # Play preset 1\nhttp:\u002F\u002Fwled-device.local\u002Fwin\u002FA=128   # Set brightness to 128\nhttp:\u002F\u002Fwled-device.local\u002Fwin\u002FFX=54   # Set effect to 54\nhttp:\u002F\u002Fwled-device.local\u002Fwin\u002FR=255&G=0&B=0  # Set color to red\n```\n\n#### Example WLED JSON API call\n\nWLED API Endpoint: http:\u002F\u002Fwled-device.local\u002Fjson\n```json\n{\"on\":true,\"bri\":255,\"transition\":1,\"bs\":0,\"mainseg\":0,\"seg\":[{\"id\":0,\"start\":0,\"stop\":135,\"grp\":1,\"spc\":0,\"of\":0,\"on\":true,\"frz\":false,\"bri\":255,\"cct\":127,\"set\":0,\"lc\":1,\"n\":\"1_0\",\"col\":[[0,255,0],[255,0,0],[0,0,255]],\"fx\":179,\"sx\":128,\"ix\":128,\"pal\":11,\"c1\":128,\"c2\":128,\"c3\":16,\"sel\":true,\"rev\":false,\"mi\":false,\"o1\":false,\"o2\":false,\"o3\":false,\"si\":0,\"m12\":0,\"bm\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0},{\"stop\":0}]}\n```\n\nThe current state of the WLED leds can be fetched at http:\u002F\u002Fwled-device.local\u002Fjson\u002Fstate. Refer to\nhttps:\u002F\u002Fkno.wled.ge\u002Finterfaces\u002Fjson-api\u002F for further informations about the json API.\n\n\n#### CSV Import Format\nImport multiple effects at once using this format:\n```csv\nEffect Name;http:\u002F\u002Fwled-device.local\u002Fwin\u002FPL=1;gameon\n180 Effect;http:\u002F\u002Fwled-device.local\u002Fwin\u002FPL=2;180\nTakeout;http:\u002F\u002Fwled-device.local\u002Fwin\u002FPL=3;takeout;busted\n```\n\n#### Board Filtering\n- **Enable Filtering**: Add board IDs (one per line) to restrict effects to specific boards\n- **Other Effect**: Create an effect with trigger `other` for throws on non-matching boards\n- **Use Cases**: Different effects for different dart boards in multi-board setups\n\n#### Game Mode Support\n- **X01 Games**: Full support for all triggers and point combinations\n- **ATC, RTW, Shanghai, Bob's 27**: `target[1-20,25,bull]` for the current target \n- **Cricket**: Basic support with plans for expanded cricket-specific triggers\n- **Bull-off**: `bulloff` trigger on bull-off rounds\n\n#### Best Practices\n1. **Test Effects**: Use the play button in settings to test effects before games\n2. **HTTPS URLs**: Always use HTTPS URLs for security compliance\n3. **Descriptive Names**: Use clear names for easy effect management\n4. **Logical Grouping**: Group related effects together using drag & drop\n5. **Backup Settings**: Export your configuration regularly\n\n#### Troubleshooting\n- **Effect Not Triggering**: Check that the trigger spelling matches exactly\n- **HTTPS Errors**: Ensure your WLED device supports HTTPS\n- **Board Filtering**: Verify board IDs are correctly formatted UUIDs\n- **URL Format**: Confirm WLED URLs follow the correct API format\n\n### 🎬 Animations\n\nThe Animations feature allows you to display custom GIF animations for special events during gameplay:\n\n#### Configuration\n- **Delay**: Set how long to wait before showing the animation (in seconds)\n- **Duration**: Set how long the animation should display (in seconds)\n- **Object Fit**: Choose between 'cover' (fill screen) or 'contain' (maintain aspect ratio)\n- **Bulk Upload with Trigger Assignment**: When uploading multiple GIF files, you can assign the same trigger to all files at once when \"Generate triggers from filenames\" is disabled, making it easy to set up larger animation sets\n\n#### Supported Triggers\nAnimations can be triggered by various game events using these tags:\n\n- **Points**: `0` to `180` (total points scored in a turn)\n- **Singles**: `s0` to `s20` and `25` (single segments, `25` for bull)\n- **Doubles**: `d1` to `d20` (double segments, `bull` for bullseye)\n- **Triples**: `t1` to `t20` (triple segments)\n- **Special Events**:\n  - `bull`: When a player hits the bullseye\n  - `outside`: When a dart lands outside the scoring area\n  - `busted`: When a player busts (scores more than needed)\n  - `gameshot`: When a player wins the game or leg\n\n#### Combination Tags\nYou can also use combination tags to trigger animations based on specific dart throw combinations. Format: `[first dart]_[second dart]_[third dart]`\n\nExample: `s20_s5_d20` would trigger when a player throws single 20, then single 5, then double 20.\n\nYou can add multiple triggers for the same animation by entering each trigger on a new line in the animation settings.\n\n> [!NOTE]  \n> If you assign the same trigger to multiple animations, the system will randomly select one of the matching animations to play each time the trigger occurs. This allows for variety in your gameplay experience.\n\n### 🔄 Utility Features\n- **Settings Import\u002FExport**: Transfer your configuration between devices or create backups\n- **Clipboard Support**: Copy and paste settings for easy sharing\n\n## ⚙️ Configuration\n\nThe extension provides a comprehensive settings panel where you can configure all features according to your preferences:\n\n- Enable\u002Fdisable individual features\n- Customize colors and appearance\n- Set timing for automatic actions\n- Configure Discord webhook integration\n- Adjust sound settings and upload custom sounds\n- Customize streaming mode settings\n\n### 📤 Settings Import\u002FExport\n\nThe extension allows you to easily transfer your settings between devices or create backups:\n\n- **Export Settings**: Download your current configuration as a file\n- **Import Settings**: Load settings from a previously exported file\n- **Copy to Clipboard**: Copy your settings to the clipboard for easy sharing\n- **Paste from Clipboard**: Apply settings that were copied from another installation\n- **Reset Settings**: Restore all settings to their default values through the Danger Zone section\n\nThis makes it simple to:\n- Back up your perfect configuration\n- Share your setup with friends\n- Transfer settings between browsers or devices\n- Restore settings after reinstalling the extension\n- Start fresh with default settings when needed\n\n## 👨‍💻 Development\n\nThis project is built using:\n- Vue.js 3\n- TypeScript\n- Tailwind CSS\n- WXT (Web Extension Toolbox)\n\n### 🚀 Getting Started\n\n```bash\n# Install dependencies\nyarn install\n\n# Start development server\nyarn dev\n\n# Build for production\nyarn build\n\n# Build for Firefox\nyarn build:firefox\n\n# Create distribution zip\nyarn zip\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request or create an issue if you have ideas for improvements or have found a bug.\n\nFeel free to fork and make a Pull Request to this plugin project. All the input is warmly welcome!\n\n## ⭐️ Show your support\nGive a star if this project helped you.\n\n\u003Ca href=\"https:\u002F\u002Fko-fi.com\u002Fcreazy231\">\n  \u003Cimg width=\"270px\" src=\"https:\u002F\u002Fstorage.ko-fi.com\u002Fcdn\u002Fbrandasset\u002Fkofi_button_stroke.png\" alt=\"Support me on Ko-fi\">\n\u003C\u002Fa>\n\n## 👏 Credits\n\n🎯 [Autodarts](https:\u002F\u002Fautodarts.com) - The original platform this extension enhances\u003Cbr>\n🎨 Benjamin Zehentner (Discord: ben_1987) - Creator of the Tools for Autodarts logo\n\n## 📄 License\n\nThis project is licensed under the [Creative Commons Attribution-NonCommercial 4.0 International License (CC BY-NC 4.0)](LICENSE) - see the [LICENSE](LICENSE) file for details.\n\nUnder this license:\n- **Attribution** — You must give appropriate credit, provide a link to this project, and indicate if changes were made.\n- **NonCommercial** — You may not use this project for commercial purposes or monetary compensation.\n","Tools for Autodarts 是一款面向 autodarts.io 平台的浏览器扩展工具集，旨在提升在线飞镖游戏的交互体验。核心功能包括实时数据可视化（如投掷热图、统计面板）、界面自定义（主题\u002F布局调整）、快捷操作（一键重播、自动截图）、比赛信息增强（对手历史对比、胜率提示）等；基于 Vue 开发，支持 Chrome、Firefox、Safari 及 iOS\u002FmacOS 原生应用。适用于使用 autodarts.io 进行线上飞镖对战、训练复盘或社区赛事观赛的玩家与教练。",2,"trending"]