ДокументацияDocumentation

Руководство по LatencyLatency guide

Установка, подключение источников и настройка. Версия 1.7.0.Installation, connecting sources and configuration. Version 1.7.0.

ОбзорOverview

Latency — десктопный медиаплеер на Electron + React + TypeScript с архитектурой подключаемых источников (PlaybackProvider). Локальные файлы, SoundCloud и Яндекс Музыка работают через единое ядро: очередь, плеер-бар, лайки и плейлисты не зависят от источника.Latency is a desktop media player built on Electron + React + TypeScript with a pluggable-source architecture (PlaybackProvider). Local files, SoundCloud and Yandex Music run through one engine: queue, player bar, likes and playlists are source-agnostic.

Платформы. Десктоп (Windows, Linux) и телефон (Android, iOS) идут под одной версией и с одним интерфейсом: с 1.6.0 мобильные сборки рисуют сам десктопный интерфейс (скин nextgen, раскладка Universal) в нативной обвязке — нижние табы, сайдбар в ящике, капсула плеера над табами. Экраны, механики и настройки те же; исключения перечислены в FAQ. Планшетной раскладки пока нет — на iPad работает телефонная. Platforms. Desktop (Windows, Linux) and phone (Android, iOS) ship under one version with one interface: since 1.6.0 the mobile builds render the desktop interface itself (nextgen skin, Universal layout) inside a native shell — bottom tabs, the sidebar in a drawer, the player capsule above the tabs. The same screens, mechanics and settings; the exceptions are listed in the FAQ. There is no tablet layout yet — an iPad runs the phone one.

УстановкаInstallation

Все сборки лежат на вкладке Releases. Выберите файл под свою платформу.All builds are on the Releases page. Pick the file for your platform.

Windows

  1. Скачайте Latency-1.7.0-x64.exe (установщик NSIS) или Latency-1.7.0-portable.exe (без установки).Download Latency-1.7.0-x64.exe (NSIS installer) or Latency-1.7.0-portable.exe (no install).
  2. Запустите установщик и выберите папку (можно изменить путь установки), либо просто запустите портативный .exe.Run the installer and choose a folder (the install path is changeable), or just run the portable .exe.
  3. Если SmartScreen ругается на неизвестного издателя — «Подробнее» → «Выполнить в любом случае» (сборка без платной подписи кода).If SmartScreen warns about an unknown publisher — “More info” → “Run anyway” (the build isn't paid-code-signed).

Linux

  1. AppImage (любой дистрибутив): скачайте Latency-1.7.0-x86_64.AppImage, дайте права на запуск — chmod +x Latency-1.7.0-x86_64.AppImage — и откройте двойным кликом или из терминала.AppImage (any distro): download Latency-1.7.0-x86_64.AppImage, make it executable — chmod +x Latency-1.7.0-x86_64.AppImage — and run it (double-click or from a terminal).
  2. rpm (Fedora / RHEL): sudo dnf install ./Latency-1.7.0-x86_64.rpm, затем запустите Latency из меню приложений.rpm (Fedora / RHEL): sudo dnf install ./Latency-1.7.0-x86_64.rpm, then launch Latency from the app menu.

Android

  1. Скачайте Latency-1.7.0.apk на телефон.Download Latency-1.7.0.apk to your phone.
  2. Откройте файл — система попросит разрешить «Установка из неизвестных источников» для браузера/проводника. Включите.Open the file — the system will ask to allow “Install from unknown sources” for your browser/file manager. Enable it.
  3. Подтвердите установку. Это debug-APK — обновления раз в 7 дней не требуются.Confirm the install. It's a debug APK — no 7-day re-signing needed.

iOS

iOS-сборка — неподписанный Latency-1.7.0-unsigned.ipa. Подпишите своим Apple ID через сайдлоадер:The iOS build is an unsigned Latency-1.7.0-unsigned.ipa. Sign it with your Apple ID via a sideloader:

  1. Установите AltStore или Sideloadly на компьютер.Install AltStore or Sideloadly on your computer.
  2. Подключите iPhone, перетащите .ipa и подпишите своим Apple ID.Connect your iPhone, drop the .ipa in and sign with your Apple ID.
  3. На бесплатном аккаунте подпись действует 7 дней — потом перевыпуск.On a free account the signature lasts 7 days — re-sign after that.

Локальные файлыLocal files

Добавьте папки с музыкой — Latency просканирует их, прочитает теги и обложки (music-metadata) и закэширует обложки в userData. Файлы отдаются через собственный протокол media://. Без ограничений по форматам и количеству.Add your music folders — Latency scans them, reads tags and cover art (music-metadata) and caches covers in userData. Files are served through a custom media:// protocol. No format or count limits.

SoundCloud

Поиск треков и артистов работает без входа: client_id подбирается автоматически (скрейпится на лету, авто-рефреш при 401). Стрим — progressive (MP3) и HLS (через hls.js).Track & artist search works without logging in: client_id is fetched automatically (scraped on the fly, auto-refreshed on 401). Streaming is progressive (MP3) and HLS (via hls.js).

Вход в аккаунт (опционально)Logging in (optional)

Вход открывает персональные миксы и лайки. Подключение — в Profile или Settings → SoundCloud: после логина OAuth-токен перехватывается из вашей же сессии и хранится локально в %APPDATA%/latency-player/soundcloud.json (на ПК) или в защищённом хранилище приложения (на телефоне). В репозиторий он не попадает.Logging in unlocks personal mixes and likes. Connect in Profile or Settings → SoundCloud: after login the OAuth token is captured from your session and stored locally in %APPDATA%/latency-player/soundcloud.json (PC) or app storage (phone). It never enters the repo.

На телефонах (iOS / Android): вход полностью автоматизирован через встроенный нативный Web-диалог — нажмите «Войти», авторизуйтесь на сайте, и приложение само перехватит токен и куки. Ручной ввод токенов не требуется.On phones (iOS / Android): login is fully automated via an in-app native browser sheet — tap “Log in”, authenticate on the site, and the app captures your token and cookies automatically. No manual token entry required.

Токен только ваш и только на вашем устройстве. Отключить аккаунт можно в профиле в любой момент.The token is yours and stays on your device. You can disconnect the account from your profile any time.
🇷🇺 Россия. SoundCloud в России заблокирован (ограничение самой площадки), поэтому онлайн-поиск и стрим SoundCloud работают только через VPN. При этом локальные файлы работают без VPN, а поиск текстов (LRCLIB / Genius) скорее всего тоже доступен — эти сервисы не заблокированы. 🇷🇺 Russia. SoundCloud is blocked in Russia (a platform-side restriction), so SoundCloud online search and streaming work only over a VPN. Local files work without a VPN, and lyrics search (LRCLIB / Genius) most likely works too — those services aren't blocked.

Яндекс МузыкаYandex Music

Третий источник, который работает в России без VPN (в отличие от SoundCloud). Вход — своим аккаунтом (OAuth, токен хранится локально), стрим полных треков по вашей подписке Яндекс Плюс. Без входа — 30-секундные превью. Без обхода блокировок и DRM.A third source that works in Russia without a VPN (unlike SoundCloud). Log in with your own account (OAuth, the token is stored locally) and stream full tracks via your Yandex Plus subscription. Without login — 30-second previews. No blocking bypass or DRM.

  • Поиск треков, артистов, альбомов и плейлистов; страницы артистов с похожими и слушателями в месяц; импорт лайков.Search for tracks, artists, albums and playlists; artist pages with similar artists and monthly listeners; likes import.
  • Моя волна — персональное бесконечное радио с самопополняющейся очередью, а также «Моя волна по треку / по артисту» из меню трека и страницы артиста.My Wave — an endless personal radio with a self-refilling queue, plus “My Wave by track / by artist” from the track menu and artist page.
  • Автоматический вход на телефонах: нативный Web-диалог открывает авторизацию Яндекса и автоматически перехватывает токен доступа при успешном входе.Automated phone login: an in-app sheet opens Yandex login and captures the access token automatically upon successful authorization.
  • Подключение — в Profile или Settings → Яндекс. При умном выборе источника на русских системах плеер по умолчанию ищет и играет через Яндекс.Connect in Profile or Settings → Yandex. With smart source selection, on Russian-locale systems the player searches and plays via Yandex by default.

Discord Rich Presence

Показывает в профиле Discord название трека, by Автор, статус играет/пауза, таймер и обложку трека вместо иконки приложения.Shows the track title, by Artist, playing/paused status, a timer and the track cover (instead of an app icon) in your Discord profile.

  1. Создайте приложение на discord.com/developers и скопируйте Application ID.Create an app at discord.com/developers and copy its Application ID.
  2. В Latency: Settings → Discord → включите тумблер и вставьте Application ID.In Latency: Settings → Discord → toggle it on and paste the Application ID.
  3. Запустите Discord-десктоп. Если он не запущен — плеер просто не показывает статус, без падений.Run the Discord desktop app. If it isn't running, the player just skips presence — no crashes.

Эквалайзер, звук и кроссфейдEqualizer, sound & crossfade

10 полос (32 Гц … 16 кГц, BiquadFilter peaking), вертикальные ползунки ±12 дБ, тумблер вкл/выкл и 7 пресетов: Flat, Bass Boost, Treble Boost, Vocal, Electronic, Rock, Loudness. Открывается кнопкой EQ в правой панели (на десктопе) или из Настройки → Звук / кнопкой в открытом плеере (на телефоне). С версии 1.6.3 работает для всех источников на всех платформах: на iOS через нативный аудио-тракт, на Android через Web Audio-граф (стрим ЯМ скачивается по частям в MediaSource).10 bands (32 Hz … 16 kHz, peaking BiquadFilter), vertical ±12 dB sliders, an on/off toggle and 7 presets: Flat, Bass Boost, Treble Boost, Vocal, Electronic, Rock, Loudness. Opened via the EQ button in the right panel (desktop) or from Settings → Sound / the fullscreen player button (phone). Works for all sources across all platforms: via native audio path on iOS, via Web Audio graph on Android (Yandex stream fed into MediaSource).

Умное выравнивание громкости (Настройки → Звук → «Выравнивание громкости»). Интеллектуальный левелер устраняет перепады динамики между треками: мягкий компрессор подтягивает тихие фрагменты, AGC стабилизирует громкость, а пик-лимитер защищает от клиппинга. На десктопе и Android работает в Web Audio API, на iOS — напрямую в реальном времени через нативный аудио-тап (MTAudioProcessingTap CoreAudio).Smart audio leveler (Settings → Sound → “Volume leveling”). The intelligent leveler evens out perceived loudness between tracks: an adaptive soft compressor lifts quiet passages, AGC stabilizes dynamic balance, and a peak limiter prevents clipping. Runs in the Web Audio API on desktop & Android, and directly in real time inside a native CoreAudio DSP tap (MTAudioProcessingTap) on iOS.

Кроссфейд с наложением. Настраивается от 0 до 12 секунд. На десктопе и Android работает через аудио-граф, а на iOS — через двухпоточный нативный аудиомост с двумя AVPlayer (завершающийся трек плавно затихает, новый параллельно нарастает без щелчков и пауз).Overlapping crossfade. Configurable from 0 to 12 seconds. Runs through the audio graph on desktop & Android, and via a dual-engine native audio bridge with two AVPlayer instances on iOS (outgoing track smoothly fades out while the incoming fades in simultaneously).

Тексты и караокеLyrics & karaoke

  • Умный автопоиск: названия треков автоматически очищаются от мусора — скобок [Remastered], версий, меток feat. / ft. — повышая шанс точного совпадения в базах LRCLIB и Genius.Smart title cleaning: track titles are automatically stripped of extraneous tags — brackets like [Remastered], versions, feat. / ft. markers — improving matches in LRCLIB and Genius.
  • Ручной поиск слов: прямо из полноэкранного караоке-режима можно открыть окно ручного поиска, ввести название или артиста, выбрать из списка найденных текстов и привязать его к треку в один клик.Manual lyrics search: directly from fullscreen karaoke, open manual search, refine the title/artist, browse matches, and bind the chosen lyrics to the track in one click.
  • LRCLIB — синхронизированный LRC: построчная подсветка по позиции, автоскролл, клик по строке = перемотка.LRCLIB — synced LRC: per-line highlight by position, auto-scroll, click a line to seek.
  • Genius — фолбэк (plain-текст) с оценочной авто-разбивкой по времени.Genius — fallback (plain text) with estimated time-splitting.
  • Ручная синхронизация (SyncEditor) — свои тайминги, защищённые от перезаписи. Кэш — в userData/lyrics.Manual sync (SyncEditor) — your own timings, protected from overwrite. Cached in userData/lyrics.

Автопилот и персональное радиоAutopilot & personal radio

Персональное радио («Любимое»). В шапке вкладки «Любимое» доступна кнопка персонального радио с модальным окном настройки: ползунки «Настроение» (грустное ↔ бодрое), «Энергия» (спокойная ↔ мощная) и «Разнообразие» (только хиты библиотеки ↔ новые открытия) генерируют индивидуальный поток на основе ваших вкусов.Personal radio (Favorites). The Favorites tab header features a personal radio button with fine-grained controls: Mood (melancholic ↔ cheerful), Energy (chill ↔ intense), and Diversity (familiar favorites ↔ fresh discoveries) sliders craft an endless tailored stream from your listening habits.

Автопилот: тумблер на нижнем прогресс-баре. Когда очередь заканчивается, плеер автоматически находит похожие треки через SoundCloud или Яндекс и продолжает играть без остановки. В версии 1.7.0 устранено зацикливание одних и тех же треков при повторном запуске станции.Autopilot: toggle on the bottom progress bar. When the queue ends, the player finds similar tracks via SoundCloud or Yandex and keeps playing indefinitely. Looping of identical cached tracks has been resolved in 1.7.0.

Офлайн-кэшOffline cache

Кнопка скачивания (↓) на каждом SoundCloud-треке сохраняет MP3 в userData/offline — потом он играет без интернета. Вкладка Скачанное в сайдбаре → «Моя музыка». В Settings → Storage видно количество и размер кэша с кнопкой очистки.The download button (↓) on any SoundCloud track saves the MP3 to userData/offline — it then plays offline. A Downloaded tab in the sidebar → “My music”. Settings → Storage shows cache count and size with a clear button.

Горячие клавишиHotkeys

Настраиваемые хоткеи в стиле Discord (Settings → Горячие клавиши): назначьте комбинацию на play/pause, next/prev, перемотку ±5 сек, громкость, mute, лайк, шаффл, повтор, открытие настроек/эквалайзера, полный экран и другое. Поддерживаются и кнопки мыши. Комбинации с модификатором (Ctrl/Alt/Shift) срабатывают даже когда окно свёрнуто; одиночные клавиши — только когда плеер в фокусе. По умолчанию список пуст. Только десктоп.Configurable Discord-style hotkeys (Settings → Hotkeys): bind a combo to play/pause, next/prev, ±5 s seek, volume, mute, like, shuffle, repeat, open settings/equalizer, fullscreen and more. Mouse buttons supported. Modifier combos (Ctrl/Alt/Shift) fire even when the window is minimized; bare keys only when the player is focused. The list is empty by default. Desktop only.

Синхронизация лайковLikes sync

Тумблер «Синхронизация лайков» в настройках аккаунта зеркалит лайки обратно на площадку: лайк в плеере ставится в SoundCloud → SoundCloud и Яндекс → Яндекс, снятие тоже убирает его там. По умолчанию выключен (opt-in — меняет ваш реальный аккаунт). Кнопка «Экспорт лайков» разово выгружает уже накопленные лайки в сервис (SoundCloud — в щадящем темпе из-за анти-бот-ограничений, Яндекс — быстро). Локальные треки пропускаются.A “Sync likes” toggle in account settings mirrors likes back to the service: a like in the player is set on SoundCloud → SoundCloud and Yandex → Yandex, and unliking removes it there too. Off by default (opt-in — it changes your real account). An “Export likes” button does a one-off push of your existing likes (SoundCloud at a gentle pace due to anti-bot limits, Yandex fast). Local tracks are skipped.

Между своими устройствами лайки переезжают файлом, без сервера: «Выгрузить в файл» собирает лайки SoundCloud и Яндекса вместе с их порядком в JSON, «Загрузить из файла» на другом устройстве расставляет их в том же порядке. Работает в обе стороны, десктоп ↔ телефон. Ничего не удаляется: свои лайки, которых не было в файле, остаются в хвосте списка, повторы сворачиваются. Локальные файлы не переносятся (путь привязан к машине) и считаются «пропущенными». На телефоне файл кладётся в Документы — на iOS он виден в «Файлах», на Android в любом файловом менеджере, — а полный путь показывается прямо в настройках.Between your own devices likes travel as a file, no server involved: “Export to file” collects SoundCloud and Yandex likes along with their order into JSON, and “Import from file” on another device restores that exact order. Works both ways, desktop ↔ phone. Nothing is deleted: likes of yours that weren't in the file stay at the tail of the list, repeats collapse. Local files aren't transferred (their path is machine-bound) and are counted as “skipped”. On mobile the file lands in Documents — visible in Files on iOS and in any file manager on Android — and the full path is shown right in Settings.

ОформлениеTheming

  • Два скина: классический oldgen и кинематографичный nextgen (ambient-фон, грейн, стеклянные панели, cover-forward карточки). Отдельная настройка «Визуал» (Default / Universal) работает поверх любого скина и меняет раскладку главной.Two skins: classic oldgen and cinematic nextgen (ambient background, grain, glass panels, cover-forward cards). A separate “Visual” setting (Default / Universal) layers over any skin and changes the Home layout.
  • Темы: Green, Purple, Blue, Pink + кастомный акцент (собственный HSV-пикер с hex и пресетами).Themes: Green, Purple, Blue, Pink + a custom accent (built-in HSV picker with hex and presets).
  • Кастомный фон: своя картинка или MP4 с недеструктивным кадрированием — «Кадрировать» открывает лист, где фон можно двигать и зумить (на телефоне пальцем, с пинч-зумом; перетаскивание точное — пиксель пальца = пиксель картинки). Область применения — полноэкранный / интерфейс / везде.Custom background: your own image or MP4 with non-destructive framing — “Frame” opens a sheet where you pan and zoom the background (with a finger on mobile, pinch included; dragging is exact — one finger pixel = one image pixel). Applied to fullscreen / UI / everywhere.
  • Компактный режим, размер текста караоке (S/M/L), два языка интерфейса (EN/RU).Compact mode, karaoke text size (S/M/L), two UI languages (EN/RU).
  • Масштаб интерфейса (только телефон): ползунок 80–130 %. Размер интерфейса на телефоне задаёт плотность экрана, а не его формат, поэтому на 720p-панели всё выглядит крупным, а на 1440p — мелким; ползунок это выравнивает вместе с обвязкой (капсула плеера, табы, отступы под вырез).Interface scale (phone only): an 80–130 % slider. On a phone the size of the interface is set by screen density rather than screen format, so a 720p panel renders everything oversized and a 1440p one undersized; the slider evens that out together with the shell (player capsule, tabs, notch insets).

Данные и приватностьData & privacy

ГдеWhere Что хранитсяWhat
localStorageочередь, громкость, история, тема, профиль, фонqueue, volume, history, theme, profile, background
userDataлайки, плейлисты, кэш обложек/текстов, офлайн-треки, токен SoundCloudlikes, playlists, cover/lyrics cache, offline tracks, SoundCloud token

В коде нет захардкоженных секретов. client_id берётся на лету, OAuth-токен SoundCloud перехватывается из вашего логина и хранится только локально. Обход DRM и риппинг защищённого аудио (Spotify/Яндекс) не делается.There are no hardcoded secrets in the code. client_id is fetched on the fly, the SoundCloud OAuth token is captured from your own login and kept locally only. No DRM circumvention or protected-audio ripping (Spotify/Yandex) is done.

Сборка из исходниковBuild from source

npm install
npm run dev        # десктоп, дев-режим с hot-reloaddesktop dev with hot-reload
npm run dev:mobile # мобильный таргет в браузереmobile target in the browser

npm run build      # main + preload + renderer → out/
npm run typecheck  # проверка типовtype checking
npm run dist:win   # установщик NSIS + портативный exe → release/NSIS installer + portable exe → release/
Для dist:win локально на Windows нужен включённый Developer Mode (иначе electron-builder падает на распаковке winCodeSign). Все артефакты (Win/Linux/Android/iOS) собираются в GitHub Actions при пуше тега v*.For dist:win locally on Windows you need Developer Mode enabled (otherwise electron-builder fails unpacking winCodeSign). All artifacts (Win/Linux/Android/iOS) are built in GitHub Actions on pushing a v* tag.

FAQ

Это бесплатно?Is it free?

Да. Полностью бесплатно, открытый исходный код под лицензией MIT.Yes. Completely free and open source under the MIT license.

Нужен ли аккаунт SoundCloud?Do I need a SoundCloud account?

Нет, поиск и воспроизведение работают без входа. Аккаунт нужен только для персональных миксов и лайков.No, search and playback work without logging in. An account is only needed for personal mixes and likes.

Поддерживается ли Spotify?Is Spotify supported?

Нет. Обход DRM и риппинг защищённого аудио в проекте не делается. Источники — локальные файлы, SoundCloud и Яндекс Музыка.No. DRM circumvention and protected-audio ripping are out of scope. The sources are local files, SoundCloud and Yandex Music.

Работает ли в России?Does it work in Russia?

Да. Яндекс Музыка работает без VPN — вход своим аккаунтом и стрим по подписке Яндекс Плюс. SoundCloud в России заблокирован (ограничение площадки), поэтому его онлайн-поиск и стрим работают только через VPN. Локальные файлы работают без VPN, поиск текстов (LRCLIB / Genius) — скорее всего тоже.Yes. Yandex Music works without a VPN — log in with your account and stream via a Yandex Plus subscription. SoundCloud is blocked in Russia (a platform-side restriction), so its online search and streaming need a VPN. Local files work without a VPN, and lyrics search (LRCLIB / Genius) most likely works too.

Можно ли добавить свой источник?Can I add my own source?

Да. Реализуйте интерфейс PlaybackProvider и зарегистрируйте его в registry.ts — ядро (стор, UI, очередь) не меняется.Yes. Implement the PlaybackProvider interface and register it in registry.ts — the core (store, UI, queue) stays unchanged.

Чем мобильная версия отличается от десктопной?How does the mobile version differ from desktop?

Интерфейсом — практически ничем: телефон монтирует те же страницы (Главная, Поиск, Альбом, Артист, Профиль, Настройки, тексты, Персональное радио) в удобной нативной обвязке (нижние табы, боковой ящик, капсула плеера) с настройкой «Масштаб интерфейса». Эквалайзер и умное выравнивание громкости работают на обоих телефонах для всего, что играет (на iOS — через нативный CoreAudio DSP, на Android — через Web Audio). Поддерживается настоящий накладывающийся кроссфейд на iOS, отображение HD-обложек, автоматическая авторизация в SoundCloud и Яндекс Музыке, а также кнопка «Лайк» на экране блокировки и в системной шторке. Не доехали лишь специфичные для ПК функции: Discord Rich Presence, глобальные горячие клавиши и автозапуск. Планшетной раскладки пока нет — на iPad работает телефонная.By interface — practically not at all: the phone runs the identical pages (Home, Search, Album, Artist, Profile, Settings, lyrics, Personal Radio) inside an ergonomic native shell (bottom tabs, drawer sidebar, player capsule) with an “Interface scale” slider. The equalizer and smart volume leveler work on both phones for everything that plays (native CoreAudio DSP on iOS, Web Audio on Android). Features true overlapping crossfade on iOS, HD cover art, automatic in-app authorization for SoundCloud and Yandex Music, plus a Like button on the lock screen and notification shade. The only omitted features are PC-specific: Discord Rich Presence, global keyboard hotkeys, and autostart. There is no tablet layout yet — an iPad runs the phone one.

Решение проблемTroubleshooting

SmartScreen / Windows Defender

Сборка не подписана платным сертификатом. «Подробнее» → «Выполнить в любом случае». Исходники открыты — можно собрать самому.The build isn't signed with a paid certificate. “More info” → “Run anyway”. The source is open — you can build it yourself.

SoundCloud не ищет / ошибка 401SoundCloud search fails / 401 error

client_id авто-обновляется при 401. Если поиск всё ещё не работает — проверьте интернет и перезапустите плеер; client_id подберётся заново.The client_id auto-refreshes on 401. If search still fails — check your connection and restart the player; the client_id will be re-fetched.

Нет текста песниNo lyrics

Не для всех треков есть синхронный LRC. Включите фолбэк на Genius в настройках или задайте тайминги вручную через SyncEditor.Not every track has a synced LRC. Enable the Genius fallback in settings, or set timings manually via the SyncEditor.

Error: Electron uninstall (dev)

Бинарник Electron не распаковался при установке. Выполните: node node_modules/electron/install.js.The Electron binary didn't unpack on install. Run: node node_modules/electron/install.js.

Не нашли ответа? Откройте issue на GitHub. Didn't find your answer? Open an issue on GitHub.