# OBS WebKit Browser Source (без CEF) Нативный input source для OBS Studio на Alpine Linux. Страницы рендерит системный WebKitGTK 4.1 в отдельном процессе; Chromium/CEF и Xvfb в проекте нет. Renderer использует X11/XWayland-сессию OBS и держит WebView в полностью прозрачном неинтерактивном нативном окне. Нативная surface нужна WebKitGTK для импорта GPU DMA-BUF. Кадры передаются в OBS напрямую как BGRA, без FFmpeg и захвата рабочего стола. Поддерживается: - HTTP/HTTPS, `data:` URL и локальные HTML-файлы; - прозрачный фон с alpha-каналом; - пользовательский CSS; - размер 2–8192 px и 1–60 FPS; - аппаратный WebKit compositor через DRM/DMA-BUF (Mesa `radeonsi` на AMD); - прямой XComposite/XShm-захват скомпозированного GPU-кадра с alpha; - XDamage-пропуск чтения backing pixmap, пока содержимое страницы не меняется; - shared-memory транспорт кадров без многомегабайтной записи в pipe; - мышь, прокрутка, фокус и базовый ввод с клавиатуры через окно Interact OBS; - перезагрузка страницы и остановка renderer-процесса у скрытого source. - пользовательские web-панели в меню «Док-панели» OBS с сохранением URL в коллекции сцен, восстановлением после запуска и интерактивным вводом. - единый постоянный WebKit-профиль для источников на сцене и web-панелей: общие cookies, HTTP cache, localStorage, IndexedDB, service workers и credentials; страницы одного origin взаимодействуют штатными `storage`-событиями и `BroadcastChannel`, как вкладки одного браузера. Звук страницы намеренно выключен: добавьте в OBS отдельный Application Audio Capture. Все WebView одной сессии OBS работают в общем renderer-процессе и одном `WebKitWebContext`; маленькие процессы-посредники сохраняют прежнюю независимую жизнь каждого source/dock и изоляцию от OBS. Профиль хранится в стандартных каталогах данных и cache пользователя (`obs-webkit-browser/profile`) и переживает перезапуск OBS. Renderer наследует X11/XWayland-дисплей OBS; его нативное окно имеет нулевую opacity, пустую input shape и не появляется на рабочем столе. Дополнительный display server не запускается. WebKit принудительно включает аппаратный compositor и выбирает доступный DRM render node; для него нужен доступ к `/dev/dri/renderD*`. Для тяжёлого полноэкранного `filter: blur()` всё ещё разумно выбирать реальный размер виджета вместо рендера 4K/1080p с последующим уменьшением в сцене. Пользовательские `will-change` и compositor hints сохраняются, но renderer не внедряет их в страницу сам: WebKit сам распределяет элементы по GPU-слоям. Это рабочий backend, а не замена всех расширенных возможностей штатного obs-browser (DevTools, cookies API и DRM здесь пока отсутствуют). ## Сборка на Alpine ```sh chmod +x scripts/install-deps-alpine.sh ./scripts/install-deps-alpine.sh /usr/bin/cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release /usr/bin/cmake --build build ctest --test-dir build --output-on-failure doas /usr/bin/cmake --install build --prefix /usr ``` После установки перезапустите OBS и добавьте источник **Браузер WebKit**. Для панели откройте **Док-панели → Пользовательские web-панели...**, добавьте название и URL и нажмите **Применить**. Панель можно скрывать и показывать через обычное меню доков OBS; правый клик по странице открывает команду перезагрузки. Если OBS установлен в нестандартный prefix, задайте при конфигурации `OBS_PLUGIN_DIR` и `OBS_PLUGIN_DATA_DIR`. ## Почему WebKitGTK, а не WPE WPE архитектурно подходит лучше всего, но пакет `wpewebkit` отсутствует в актуальном Alpine edge/3.24 (остались только `libwpe` и backend). WebKitGTK 4.1 есть в текущем репозитории Alpine, использует тот же WebKit и не зависит от CEF. Renderer изолирован от OBS, поэтому падение Web-процесса не должно уронить студию.