Skip to content

Repository files navigation

OBS LED Strip Wall(LEDテープウォール/透明LEDスクリーン)

LED-STRIP-WALL-github.mp4

OBS の 3D Effect プラグインと組み合わせた例 / Example combined with the 3D Effect plugin

WS2812B のようなシリアル制御フルカラー LED を使った LED ウォール越しの映像を、 OBS の任意のソースに実時間で与えるビデオフィルタです。2 種類のパネルを収録しています。

フィルタ 再現対象 内部 ID
LEDテープウォール LED テープを並べて作ったパネル(蛇行配線) led_strip_wall
透明LEDスクリーン ITO/フィルム型の透明ディスプレイ(くし形配線) led_transparent_screen

見た目だけを真似るのではなく、実際に元画像からシリアルデータを生成して、 それをデコードして表示します。

  • 元画像を LED 密度でサンプリングし、配線順・GRB バイト順(WS2812B のワイヤ フォーマット)のシリアルストリームテクスチャへエンコードします。
  • 各 LED は実物と同じく最後に受信したパケットをラッチして表示し続けます。 断線・通信途切れなどの劣化は、この「配線」段に注入されます。
  • 表示段でストリームを逆マッピングでデコードし、テープ基材・銅ハンダパッド・ LED パッケージ(白/黒ボディ+レンズ)・発光のにじみまで描画します。 拡大するとテープの構造が見えます。

処理チェーン

ソース(RGB)
  └▶ Encode : LED密度でサンプリング → 配線順スキャン + GRB化 = シリアルストリーム
      └▶ Latch : 「配線」— 断線・通信途切れ・ビット化けを注入し、LEDごとにラッチ
          └▶ Decode/Display : 逆マッピングでデコード + パネル描画(構造・にじみ・透過・視差)

「デバッグ: シリアルデータを表示」を ON にすると、パネルがデコードしている ストリームテクスチャ(チェーン順の GRB パケット)をそのまま見られます。

パラメータ

全項目の詳しい解説は docs/parameters.md にあります。 初期値・可動範囲・動かすと何が起きるかに加え、「構造が見えない」「隙間から後ろが 見えない」といった効いていないように見えるときの原因もまとめてあります。 各項目はフィルタ設定画面でマウスオーバーすると、説明と初期値が表示されます。

項目 内容
パネル電源 全LEDの点灯/消灯(短いフェード付き。テープは残る)。ホットキー/ドック/websocket からも操作可
横/縦の LED 数 パネルの LED 密度。整数で指定(例: 横 640 × 縦 480)。上限 1024×1024
パネル描画解像度 ソースに合わせる / 1080p固定 / 4K固定。固定モードはソース解像度に関係なくその解像度で構造を描画するので、1080p ソースでも 4K キャンバスでくっきり表示できます
シリアル配線 テープ版は横折り返し(1234 / 8765 / 9ABC)と縦折り返し(167C / 258B / 349A)。スクリーン版はくし形(各ラインへ並列給電)
テープの色 黒テープ / 白テープ
LEDパッケージの色 白パッケージ / 黒パッケージ(消灯時のレンズの見え方も変わります)
テープ幅(ピッチ比 %) LED ピッチに対するテープの太さ。100% 未満で透過型パネルになり、隙間から下の映像(背後のソース)が見えます
LEDサイズ(実装間隔比 %) テープ上の LED 実装間隔に対するパッケージの大きさ
電極(銅箔)の濃さ ハンダパッドの茶色の濃さ(0%=明るい銅色〜100%=焦げ茶)。電極は3接点に分かれ、横蛇行では「三」、縦配線では「川」の字に見えます
基板の透過率 ※スクリーン ガラス/アクリル基板の透過率(50〜98%)。実物は 70〜95% 程度
LEDドットサイズ ※スクリーン ガラス面に浮かぶ LED ドットの直径(ピッチ比)
LEDの光のにじみ / 明るさ 発光のグロー量(隣接 LED へのにじみ込み)と輝度
3D飛び出し 3D Effect プラグイン連動の視差表現。後述
信号劣化シミュレーション 下記参照。グループ OFF で完全に無劣化に戻ります
確認用画像拡大 表示専用のズーム(1〜16x)と拡大中心 X/Y。テープ構造の確認用で、シリアルデータには影響しません。設定画面を閉じると自動的に 1x に戻ります(配信・録画に拡大が残らないようにするため)

信号劣化

項目 再現内容
劣化LEDの割合 / ちらつき速度 経年劣化した LED が個別のリズムで暗くなったり消えたりする
恒久ドット抜け率 常時故障している LED(約4割は完全消灯、残りは1色チャンネルが死んだ変色ドット)。時間変化しない固定故障
テープ1本消灯 ※テープ版 電源コネクタが抜けたテープを1本再現。指定番号のテープの LED が全消灯(テープ自体は残る)
エッジバスの断線 ※スクリーン 縁を走る給電・データバスの断線。指定ライン以降が全滅
断線 データが届かなくなる位置を指定。フリーズ(データ線切断=最後のフレームを保持)と消灯(電源切断)を選択可能。テープ版は以降のパネル全体、スクリーン版は指定した1ラインだけが死にます
通信途切れ 頻度 / 長さ ランダムに一瞬データが途切れる。フレーム保持(何も来ない)と、途中からのビット化け(ランダム色のスパークル)が混ざる

実物の LED テープには通信速度の上限(WS2812B は 800 kbps → 約 30 fps で 1 チェーン 1000 個程度)がありますが、本フィルタでは考慮していません。

導入方法

インストーラ (Windows)

使う側(エンドユーザー): Releases ページから led-strip-wall-<version>-windows-x64.exe をダウンロードしてダブルクリック。OBS のインストール先を自動検出して obs-plugins\64bit\led-strip-wall.dlldata\obs-plugins\led-strip-wall\ を 配置します(見つからなければ手動でフォルダ選択)。インストール後 OBS を (再)起動してください。アンインストールは「アプリと機能」から。

署名していないため、初回は SmartScreen の警告が出ることがあります。 「詳細情報 → 実行」で進めてください。OBS 起動中は上書きできないので閉じてから実行します。

作る側(要 Inno Setup 6・無料): いちばん簡単なのは installer\build-installer.bat をダブルクリックするだけ (未構成なら自動で cmake --preset windows-x64 から実行します)。PowerShell から直接でも可:

powershell -ExecutionPolicy Bypass -File installer\build-installer.ps1

どちらも release\led-strip-wall-<version>-windows-x64.exe を生成します(ビルド → cmake --install → Inno Setup コンパイルまで自動)。

ビルド(付属の CMake プリセット)

公式 obs-plugintemplate ベースで、 CMake プリセットが OBS の開発用依存物(libobs / Qt6 等)を自動でダウンロードします。

Windows(Visual Studio 2022 + CMake 3.28 以降)

cmake --preset windows-x64
cmake --build --preset windows-x64 --config RelWithDebInfo

macOS

cmake --preset macos
cmake --build --preset macos --config RelWithDebInfo

Linux(Ubuntu, Ninja)

cmake --preset ubuntu-x86_64
cmake --build --preset ubuntu-x86_64

ビルド生成物(led-strip-wall.dll / .so / .plugindata/ フォルダ)を OBS の プラグインディレクトリへ配置します。

  • Windows(ポータブル配置): obs-studio/obs-plugins/64bit/led-strip-wall.dllobs-studio/data/obs-plugins/led-strip-wall/
  • Linux: ~/.config/obs-studio/plugins/led-strip-wall/bin/64bit/.../data/

CI(GitHub Actions)用のワークフローもテンプレート由来で同梱しています。 リポジトリを GitHub へ push すると Windows / macOS / Linux 向けの配布物を自動生成できます。

使い方

  1. OBS で任意のソースを右クリック →「フィルタ」。
  2. エフェクトフィルタに「LEDテープウォール」または「透明LEDスクリーン」を追加。
  3. LED 密度・配線・外観を設定します。

画面全体(シーン)に適用する

OBS ではシーン自体もソースなので、シーンにこのフィルタを追加すると、その シーンの合成結果全体(カメラ・オーバーレイ・テキストなどすべて)が LED ウォール化 されます。「最終的な出力にかける」場合はこの方法を使います。全シーン共通にしたい ときは「マスター」シーンを 1 つ作り、他のシーンをシーンソースとして入れ子に 配置してマスターにフィルタを付けます。ドックの「映像ソース」一覧にもシーンが 表示されるので、そのままライブ操作できます。

透過型パネルとして使う

「テープ幅」を 100% 未満(スクリーン版は「透過率」を上げる)にすると、隙間が アルファ透過になり、シーン上でこのソースの下にあるソースが隙間から見えます。 ステージ後方のメッシュ LED ビジョンのような画になります。発光のにじみは隙間の上にも 加算で乗るので、明るい映像ほど「光のカーテン」感が出ます。

フィルタ設定画面のプレビューはソース単体を黒背景に描くため、隙間は黒く見えます。 透過の確認はシーン側のプレビューで行ってください。

断線・グリッチの再現

「信号劣化シミュレーション」グループを ON にして:

  • 断線を ON にし「断線位置」を動かすと、配線順でそれ以降の LED がフリーズ (または消灯)します。テープ版は横折り返しなら下半分、縦折り返しなら右半分…と 配線順に死ぬのが分かります。フリーズは断線した瞬間の映像を保持し続けます。
  • 通信途切れは、頻度と長さで、たまに一瞬だけ画面全体が固まる/途中の LED から 先がランダム色にスパークするグリッチが出ます。
  • 恒久ドット抜けは時間変化しない固定故障で、灰色の死にドットと変色ドットが混在します。

透明LEDスクリーン(ITO/フィルム型)

2 つ目のフィルタ「透明LEDスクリーン」は、ガラス/アクリル基板に ITO・マイクロ メッシュの極細配線で微小 LED を実装した、店舗のウィンドウなどで見る超透明ディスプレイ の再現です。実物は蛇行配線ではなく、**駆動 IC が画面の縁にあり各ラインへ並列給電する 「くし形」**構造なので、故障の伝播もそれに従います。

項目 LEDテープウォール 透明LEDスクリーン
配線 蛇行(1本のチェーンを折り返す) くし形(駆動ICはエッジ、各ラインへ並列給電)
外観 テープ基材・電極・パッケージ ガラス基板(透過率50〜98%)+浮遊する微小ドット。配線は不可視
断線 断線位置以降のパネル全体が死ぬ 1ラインだけが途中から死ぬ(ライン番号+位置で指定)
バス断線 —(テープ1本消灯が相当) エッジバスの断線で指定ライン以降が全滅
ビット化け 断線位置から下流全部に伝播 1ライン内に閉じる(実物のグリッチと同じ)

パネル電源・劣化シミュレーション・3D飛び出し・確認用画像拡大・デバッグ表示・ドック・ ホットキーはテープ版と共通の仕組みで動きます。

3D Effect プラグインとの連動(LED の飛び出し)

3D Effect(exeldro製)などで ソースを3次元的に傾けたとき、「LEDだけが基材からちょっと飛び出て見える」視差表現が できます。両フィルタの「3D飛び出し」グループで設定します。

  • LED高さ(ピッチ比%、既定 5%): 飛び出し量。視差 = 高さ × tan(傾き)。0%で無効。 方向が逆に見える場合はマイナス値で反転できます
  • 傾きの取得: 「自動」は同じソースに付いている 3D Effect フィルタ (内部ID 3d_effect_filter)の回転角 rot_x/rot_y/rot_z を自動で読み取って追従します。 3D Effect 側のスライダーを動かすだけでLEDの浮きがついてきます。 「手動」では傾きX/Yスライダーで直接指定します
  • LEDパッケージ/ドットは傾き方向へ視差シフトし、基材との間に押し出しの側面が 描かれます。テープ・電極・ガラス面は元の位置のままなので立体感が出ます

正射影近似のため、3D Effect の FOV(遠近感)が強い場合は画面の場所によって 視差が合わないことがあります。その場合は「手動」で微調整してください。 傾きゼロのときは従来と完全に同じ絵になります。

コントロールドック

ドックメニューから、フィルタ種別ごとに 2 つのドックを開けます (「LEDテープウォール」「透明LEDスクリーン」)。それぞれ自分のフィルタが 付いているソース/シーンだけを一覧します。設定画面を開かずにライブ操作できます。

  • 映像ソース ドロップダウン + 更新 ボタン(一覧が古いときに押す)
  • LEDの明るさ スライダー
  • 電源ON/OFFグリッチ(1回発火)・ 劣化(トグル)・ 断線(トグル)

ドック・ホットキー・フィルタ設定画面は同じ設定を共有するので、どこから操作しても 状態は一致します。

ホットキー

設定 → ホットキー を開くと、フィルタを付けたソースの欄に次の項目が並びます (フィルタを追加したソースごとに個別に割り当てられます)。

表示名 内部名 動作
LEDテープウォール: パネル電源 ON/OFF led_strip_wall.power 全LEDの消灯↔点灯(短いフェード付き。テープは残る)
LEDテープウォール: グリッチ発動 led_strip_wall.glitch ビット化けスパークを1回だけ即発火(劣化グループがOFFでも効く)
LEDテープウォール: 劣化シミュレーション ON/OFF led_strip_wall.degradation 劣化グループごとトグル
LEDテープウォール: 断線 ON/OFF led_strip_wall.break 断線トグル(劣化グループがONのとき有効)

透明LEDスクリーンには同じ 4 種が led_transparent_screen.power / .glitch / .degradation / .break として並びます。

Stream Deck などは標準の「ホットキー」アクションでここに割り当てたキーを送れば 操作できます(OBS のホットキーはウィンドウが非アクティブでも効きます)。

obs-websocket からの操作

OBS 28 以降内蔵の obs-websocket (5.x) からホットキーを名前で叩けます (contextName はフィルタを付けているソース名。obs-websocket 5.4 / OBS 30.2 以降)。

{
  "requestType": "TriggerHotkeyByName",
  "requestData": { "hotkeyName": "led_strip_wall.glitch", "contextName": "対象ソース名" }
}

電源を ON/OFF どちらかに確定させたい場合や任意のパラメータを動かす場合は SetSourceFilterSettings を使います(sourceName はフィルタが付いているソース側の 名前)。グリッチを1回発火させるには glitch_pulse前回と違う整数を書き込みます (ドックのグリッチボタンと同じ仕組み)。

{
  "requestType": "SetSourceFilterSettings",
  "requestData": {
    "sourceName": "対象ソース名",
    "filterName": "LEDテープウォール",
    "filterSettings": { "power": false, "brightness": 1.5, "glitch_pulse": 1 }
  }
}

設定キーは docs/parameters.md か、保存済みシーンコレクション (JSON)で確認できます。

試すと分かりやすい設定

  • 「確認用画像拡大」の拡大率を上げる(例: 8x)と、OBS の変換をいじらずに テープ・ハンダパッド・LED パッケージの構造をその場で確認できます。 拡大中心 X/Y で見たい場所へ移動できます(表示のみ・データには影響なし)。
  • 「デバッグ: シリアルデータを表示」を ON にすると、配線に流れている GRB ストリームそのものが見えます(配線を切り替えると並びが変わります)。
  • 白テープ + テープ幅 40% + 明るい映像 = 透過メッシュビジョン。
  • 恒久ドット抜け 0.05% + 劣化LED 2% + 通信途切れ 0.3回/秒 = 「よく見ると数個死んでいる 古いパネル」。ドット抜けは実物の許容基準(0.01%程度)も 0.01 刻みで指定できます。

実装上の注意 / 制限

  • LED 数の上限は 1024×1024。ストリームテクスチャは最大 1024 texel 幅に折り畳んで 格納します。密度を上げるほどエンコード/表示の負荷が増えます。
  • 構造描画は「1 LED あたり約 4 画素」を下回ると解像できないため、面積平均の 簡易表示へ自動でフェードします(モアレ防止)。
  • 実テープの通信速度上限・リフレッシュレート制約は再現していません。
  • 負荷は 1080p 出力・RTX 5090 の実測で 0.03〜0.04 ms/フレーム(60fps の予算 16.7ms に 対して 0.25% 未満)。LED 数ではなく出力解像度で決まります。
  • 主対象は Windows(Direct3D 11)ですが、シェーダはビット演算を使っていないため OpenGL バックエンド(macOS / Linux)でも動作する想定です。

ライセンス

  • 本プラグインは libobs とリンクするため GPL-2.0-or-laterLICENSE 参照)。
  • 足場は obs-plugintemplate を使用しています。

OBS LED Strip Wall (English)

LED-STRIP-WALL-github.mp4

Example combined with the 3D Effect plugin

Two OBS video filters that render any source as a real LED wall, built from serially-driven full-colour LEDs (WS2812B style):

Filter Models Internal ID
LED Strip Wall A panel assembled from LED strips (serpentine wiring) led_strip_wall
Transparent LED Screen An ITO / film transparent display (comb wiring) led_transparent_screen

The look is not faked. The source image is genuinely encoded into a serial data stream and decoded back:

  • The image is sampled on the LED grid and encoded into a stream texture in wiring order with GRB byte order — the actual WS2812B wire format.
  • Every LED latches the last packet it received and keeps showing it, exactly like the real part. Degradation (line breaks, dropouts) is injected into this "wire" stage.
  • The display pass decodes the stream back through the inverse mapping and draws the physical panel: tape substrate, copper solder pads, LED packages (white or black body plus lens) and the emitted glow. Zoom in and the strip structure is there.

Processing chain

Source (RGB)
  └▶ Encode : sample at LED density → wiring-order scan + GRB = serial stream
      └▶ Latch : the "wire" — inject breaks, dropouts, bit garbage; latch per LED
          └▶ Decode/Display : inverse mapping + panel render (structure, glow, gaps, parallax)

Switch on "Debug: show the serial data stream" to see the stream texture the panel decodes (GRB packets in chain order) exactly as it is.

Parameters

Every setting is documented in detail in docs/parameters.md — defaults, ranges, what changes when you move them, plus a troubleshooting table for "no visible structure", "nothing shows through the gaps" and similar. In OBS, hovering any property shows its description and default value.

Setting What it does
Panel power All LEDs on/off with a short fade (the tape stays visible). Also on hotkey / dock / websocket
LEDs per row / column LED density, as integers (e.g. 640 × 480). Up to 1024×1024
Panel render resolution Follow source / fixed 1080p / fixed 4K. A fixed mode draws the structure at that resolution regardless of source size, so a 1080p source can look crisp on a 4K canvas
Serial wiring Strip wall: horizontal (1234 / 8765 / 9ABC) or vertical (167C / 258B / 349A) serpentine. Screen: comb (parallel feed per line)
Tape colour Black or white tape
LED package colour White or black package (the unlit lens changes too)
Tape width (% of pitch) Width relative to the LED pitch. Below 100% the panel becomes see-through: sources behind show through the gaps
LED package size (% of pitch) Package size relative to the LED spacing along the tape
Electrode (copper pad) tone Brown tone of the solder pads (0% bright copper → 100% dark brown). Each pad is three contacts (+5V / DATA / GND) divided across the strip: three bars stacked on horizontal wiring, three side by side on vertical
Substrate transmittance (screen) Transmittance of the glass/acrylic substrate (50–98%); real screens reach 70–95%
LED dot size (screen) Diameter of the dots floating in the glass, relative to pitch
LED glow / brightness Bloom spread (bleeding into neighbours) and luminance
3D pop-out Parallax linked to the 3D Effect plugin — see below
Signal degradation See below. With the group off the picture is completely clean
Inspection zoom Display-only magnifier (1–16×) plus centre X/Y for checking the structure; the serial data is unaffected. It returns to 1x when the dialog closes, so nothing magnified is left on the stream

Signal degradation

Setting What it reproduces
Aged LEDs / flicker speed Aged LEDs dimming or dropping out on their own rhythm
Permanent dead-dot rate Permanently failed LEDs — ~40% fully dark, the rest discoloured (one dead colour channel). Static, does not change over time
One strip powered off (strip wall) A tape with a loose power connector: every LED on the numbered strip goes dark, the tape stays visible
Broken edge bus (screen) A break in the bus along the screen edge: the given line and every one after it go dark
Broken data line Data stops past the chosen point. Choose freeze (data cut — LEDs hold the last frame) or dark (power cut). Serpentine kills the whole downstream panel; comb kills only the selected line
Dropout frequency / length Momentary data loss: either a frame hold (nothing arrives) or bit garbage from a random point on (saturated random-colour sparkle)

Real strips have a data-rate ceiling (WS2812B is 800 kbps → about 1000 LEDs per chain at 30 fps). This filter deliberately ignores it.

Installation

Windows installer

For users: download led-strip-wall-<version>-windows-x64.exe from the Releases page and double-click it. It detects your OBS installation and places obs-plugins\64bit\led-strip-wall.dll and data\obs-plugins\led-strip-wall\ in the right spots (pick the folder manually if detection fails), and registers an uninstaller under "Apps & features". (Re)start OBS afterwards.

The build is unsigned, so SmartScreen may warn on first run — choose "More info → Run anyway". Close OBS before installing; a running OBS locks the DLL.

To build the installer you need Inno Setup 6 (free). The simplest route is to double-click installer\build-installer.bat (it runs cmake --preset windows-x64 first if the project isn't configured yet), or from PowerShell:

powershell -ExecutionPolicy Bypass -File installer\build-installer.ps1

Either way you get release\led-strip-wall-<version>-windows-x64.exe, going from build to cmake --install to the Inno Setup compile automatically.

Building from source

Based on the official obs-plugintemplate; the CMake presets download the OBS build dependencies (libobs, Qt6, …) for you.

Windows (Visual Studio 2022 + CMake 3.28 or later)

cmake --preset windows-x64
cmake --build --preset windows-x64 --config RelWithDebInfo

macOS

cmake --preset macos
cmake --build --preset macos --config RelWithDebInfo

Linux (Ubuntu, Ninja)

cmake --preset ubuntu-x86_64
cmake --build --preset ubuntu-x86_64

Copy the resulting module (led-strip-wall.dll / .so / .plugin) and its data/ folder into your OBS plugin directory:

  • Windows (portable): obs-studio/obs-plugins/64bit/led-strip-wall.dll and obs-studio/data/obs-plugins/led-strip-wall/
  • Linux: ~/.config/obs-studio/plugins/led-strip-wall/bin/64bit/ and .../data/

GitHub Actions workflows come from the template, so pushing the repository builds Windows / macOS / Linux artifacts automatically.

Usage

  1. Right-click any source in OBS → Filters.
  2. Add the LED Strip Wall or Transparent LED Screen effect filter.
  3. Set the LED density, wiring and appearance.

Applying it to the whole picture

A Scene is itself a source, so adding the filter to a Scene turns the entire scene composite (camera, overlays, text — everything) into an LED wall. That is the way to "filter the final output". For a look shared across all scenes, nest your scenes inside one master scene and filter the master. The dock's source drop-down lists scenes too, so you can drive a whole scene live.

Using it as a see-through panel

Set the tape width below 100% (or raise the transmittance on the screen filter) and the gaps become alpha transparent, so sources placed under this one in the scene show through. It reads like the mesh LED walls behind a stage. The glow is added over the gaps as well, so bright footage gives a "curtain of light" feel.

The filter dialog's own preview draws the source alone on black, so gaps look black there. Check the transparency in the scene preview instead.

Breaks and glitches

Switch on the "Signal degradation" group, then:

  • Enable broken data line and move the break position: LEDs after it freeze (or go dark) in wiring order. On the strip wall a horizontal serpentine kills the bottom half, a vertical one the right half, and so on. Freeze holds the frame that was on screen at the moment of the break.
  • Dropouts (frequency and length) make the picture hitch for an instant, or make everything downstream of a random point sparkle in random colours.
  • Permanent dead dots are a static fault: a mix of grey dead dots and discoloured dots that never changes.

Transparent LED Screen (ITO / film type)

The second filter models the ultra-transparent displays seen in shop windows: tiny LEDs mounted on a glass or acrylic substrate, wired with ITO or micro-mesh traces too fine to see. Real ones are not serpentine-wired — the driver ICs sit on the screen edge and feed every line in parallel (comb topology) — so faults propagate accordingly.

LED Strip Wall Transparent LED Screen
Wiring Serpentine (one folded chain) Comb (edge drivers, parallel feed per line)
Appearance Tape substrate, pads, packages Glass substrate (50–98% transmittance) + floating dots; traces invisible
Broken line Kills the whole downstream panel Kills one line only, from the break point (line number + position)
Broken bus — (one strip powered off is the analogue) Edge bus break: every line from the given one goes dark
Bit garbage Propagates to everything downstream Stays inside one line (like the real glitch)

Panel power, degradation, 3D pop-out, inspection zoom, debug view, the dock and the hotkeys all work the same way as on the strip filter.

3D Effect plugin link (LED pop-out)

When you tilt the source in 3D with a plugin such as 3D Effect (by exeldro), the LEDs alone can appear raised above the substrate. Configure it in the 3D pop-out group of either filter.

  • LED height (% of pitch, default 5%): how far the LEDs stand proud. Parallax = height × tan(tilt); 0% disables it. A negative value flips the direction if the pop-out looks inverted.
  • Tilt source: Automatic finds a 3D Effect filter (internal id 3d_effect_filter) on the same source and follows its rot_x / rot_y / rot_z every frame — just move the 3D Effect sliders and the LEDs lift with the tilt. Manual exposes tilt X/Y sliders instead.
  • The package / dot top face is shifted along the tilt and an extruded side wall is drawn between it and the substrate, while the tape, pads and glass stay put.

The approximation is orthographic, so with a strong FOV in 3D Effect the parallax may not match everywhere on screen — fine-tune in manual mode. With zero tilt the render is identical to having the feature off.

Control dock

The Docks menu offers one dock per filter type (LED Strip Wall and Transparent LED Screen); each lists only the sources and scenes carrying its own filter. It drives things live without opening the filter dialog:

  • Video source drop-down plus a Refresh button (press it if the list is stale)
  • LED brightness slider
  • Power ON/OFF, Glitch (one-shot), Degrade (toggle), Break (toggle)

The dock, the hotkeys and the filter dialog share the same settings, so the state always agrees no matter where you change it.

Hotkeys

Settings → Hotkeys lists these entries under each source the filter is attached to (every filtered source gets its own bindings):

Display name Internal name Action
LED Strip Wall: toggle panel power led_strip_wall.power All LEDs dark ↔ lit, with a short fade (the tape stays)
LED Strip Wall: trigger glitch led_strip_wall.glitch Fire one bit-garbage burst (works even with the degradation group off)
LED Strip Wall: toggle signal degradation led_strip_wall.degradation Toggle the whole degradation group
LED Strip Wall: toggle broken data line led_strip_wall.break Toggle the break (effective while the group is on)

The Transparent LED Screen has the same four as led_transparent_screen.power / .glitch / .degradation / .break.

A Stream Deck (or similar) can drive them with its stock "Hotkey" action sending the key you bound here — OBS hotkeys work even while the window is unfocused.

Controlling over obs-websocket

With the obs-websocket built into OBS 28+ (5.x), trigger the hotkeys directly by name. contextName is the name of the source the filter is attached to (needs obs-websocket 5.4 / OBS 30.2 or later).

{
  "requestType": "TriggerHotkeyByName",
  "requestData": { "hotkeyName": "led_strip_wall.glitch", "contextName": "your source name" }
}

To set power to a definite state instead of toggling — or to drive any parameter — use SetSourceFilterSettings (sourceName is the parent source's name). To fire one glitch this way, write an integer different from the last one to glitch_pulse (the same mechanism the dock's button uses).

{
  "requestType": "SetSourceFilterSettings",
  "requestData": {
    "sourceName": "your source name",
    "filterName": "LED Strip Wall",
    "filterSettings": { "power": false, "brightness": 1.5, "glitch_pulse": 1 }
  }
}

Setting keys are listed in docs/parameters.md, or can be read from a saved scene collection (JSON).

Settings worth trying

  • Raise the inspection zoom (say 8×) to inspect the tape, solder pads and packages on the spot without touching OBS's transform; the centre X/Y sliders pan around (display-only, data untouched).
  • Switch on Debug: show the serial data stream to watch the actual GRB stream on the wire — changing the wiring visibly rearranges it.
  • White tape + 40% tape width + bright footage = a see-through mesh wall.
  • 0.05% dead dots + 2% aged LEDs + 0.3 dropouts/s = "an old panel with a few dead pixels if you look closely". The 0.01 step lets you dial in the real-world tolerance (~0.01%).

Notes and limitations

  • LED count is capped at 1024×1024; the stream texture folds at 1024 texels wide. Higher density costs more in the encode and display passes.
  • Structure cannot be resolved below roughly 4 output pixels per LED, so the shader fades to an area-averaged panel there (moiré protection).
  • The real data-rate ceiling and refresh-rate limits are deliberately not reproduced.
  • Measured cost at 1080p output on an RTX 5090 is 0.03–0.04 ms/frame — under 0.25% of the 16.7 ms budget at 60 fps. It scales with output resolution, not LED count.
  • The primary target is Windows (Direct3D 11), but the shaders avoid bit operations, so the OpenGL backend (macOS / Linux) is expected to work.

License

GPL-2.0-or-later (it links libobs) — see LICENSE. Scaffolding from obs-plugintemplate.

About

OBS filter that turns any source into a WS2812B LED strip wall or transparent LED screen — real serial GRB encoding, wiring-accurate failures, 3D pop-out. LEDテープウォール/透明LEDスクリーン再現フィルタ

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages