Skip to the content
PCBKitNew board
2 layers40 × 100 mmSoftswitcher module master, the printed circuit board in 3D

Softswitcher module master

oldsheeep3/TheHack

HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

Size
40 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
6
Nets
42
Pads
79
Tracks, vias
41, 20
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
28 Jul 2026
Updated
15 Oct 2026

Overview

Softswitcher module master is an open-source printed circuit board by oldsheeep3, from the oldsheeep3/TheHack repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 40 × 100 mm with 6 parts on 42 nets, routed with 41 tracks and 20 vias.

Its parts include 3 connectors and 2 resistors. It belongs with the RP2040 boards of this library.

README

README.md

HybridSwitcher — ハイブリッドIP映像スイッチャー

CI

既存機材(ATEM Mini)と自作ハードウェア(自作スイッチングモジュール群 + Pico 2W)、 ネットワーク技術(SRT / NDI / WebAPI)を融合した、次世代のハイブリッドIP映像スイッチャーシステム。

PC上に常駐する制御アプリを「脳」とし、複数プロトコル(UVC / NDI / SRT)の映像入力・PiP合成・ 仮想カメラ出力・タリー送出・外部機材(ATEM)の遠隔制御を一元化する。DIYでありながらプロ用 スイッチャーに匹敵する多人数オペレーション(メイン/サブ分業)と拡張性を目指す。

全体仕様は docs/specs/00-system-overview.md(親仕様書)を参照。

システム構成

text
[ サブ ATEM Mini ] ──(SRT/HDMI/NDI)──→ [ メインPC (常駐App) ] ──(仮想WebCam/HDMI)──→ [ 配信/録画/OBS等 ]
        ▲                                    ▲        │
        │ (ATEM遠隔制御: UDP 9910)            │        │ (UDPタリー: 9999 ブロードキャスト)
        └────────────────────────────────────┘        ▼
                                             ▲   [ ワイヤレスタリー子機(ESP32) ]  [ 赤/緑 LED ]
                                             │ (WebSocket / WebAPI: 8080)
                                    (USB/HID/Serial)
[ 自作コントローラー: Pico 2W ] ──┬── (USB直結) ──→ メインPC
        │                         └── (USB-OTG) ──→ [ スマホ (Web App) ] ──(Wi-Fi/WebSocket)──→ メインPC
        │
        ├─(内部制御: 後日詳細化)──→ [ 各スイッチングモジュール内マイコン ]
        └─(HDMI DDC/I2Cスニッフィング)──→ [ 物理タリー抽出 ]

コンポーネント

コンポーネント場所技術責務個別README / 仕様書
PC常駐アプリsrc/C# / .NET 9 + libobs(P/Invoke)映像入力デコード・PiP合成・仮想カメラ/HDMI出力・WebAPI/WebSocket・UDPタリー送出・ATEM制御App / 仕様 / 移行
ネイティブ映像エンジンnative/switcher-engine/C/C++ + libobs (GPLv2)libobs を駆動する IVideoEngine の実体(デュアルM/E=obs_view×2・ソース共有・出力・マルチビュー)switcher-engine
Pico 2W コントローラーfirmware/pico2w-controller/Pico SDK (C/C++)物理ボタン入力→PC/スマホ送信・モジュール統括・HDMI DDCタリー抽出Firmware / 仕様
スマホWebブリッジapps/phone-bridge/React / TypeScriptWeb Serial/WebUSBでPico 2Wを中継・ブラウザ設定UIphone-bridge / 仕様
ワイヤレスタリー子機(未着手)ESP32 (Arduino/ESP-IDF)UDPブロードキャスト受信→赤/緑LED点灯仕様

PC常駐アプリの .NET プロジェクト構成(src/)

プロジェクト役割
Switcher.Contracts共通インターフェース・DTO(IVideoEngine 抽象を含む契約層)
Switcher.EngineIVideoEngine の実体。ネイティブ switcher-engine(libobs) への P/Invoke + テスト用 FakeVideoEngine
Switcher.AtemATEM遠隔制御クライアント(UDP 9910)
Switcher.WebWebAPI/WebSocketサーバ・UDPタリーブロードキャスト
Switcher.AppWPFホスト。上記を1つの常駐プロセスに結線するDI合成ルート

libobs 移行: 旧 Switcher.Media(GStreamer/DirectX 合成) / Switcher.VirtualCam(自作仮想カメラ) は廃止し、映像パスは libobs に一本化した(docs/specs/libobs-engine-migration.md)。ネイティブ switcher-engine.dll は Windows + OBS でのみビルド/実行し、.sln には含まない(テストは FakeVideoEngine 注入でヘッドレス実行)。

リポジトリ構成

text
.
├── src/                       # PC常駐アプリ (.NET 9) — HybridSwitcher.sln
├── native/switcher-engine/    # ネイティブ映像エンジン (C/C++ + libobs, CMake, .sln外)
├── tests/                     # 上記各プロジェクトのユニットテスト
├── apps/phone-bridge/         # スマホWebブリッジ & 設定UI (React/TS)
├── firmware/pico2w-controller/# Pico 2W コントローラー / タリー抽出ファーム
├── docs/
│   ├── specs/                 # 仕様書(親仕様書 + コンポーネント別)
│   └── tasks/                 # マルチエージェント実装計画・タスク指示書
├── softswitcher*/             # 既存KiCadハードウェア設計(参考資産)
└── HybridSwitcher.sln         # .NET ソリューション

セットアップ(clone 直後に一度)

sh
./setup.sh          # 共通(.NET / phone-bridge / firmware)
powershell
.\setup.ps1         # Windows で映像エンジンまで動かす場合(追加で実行)

clone しただけの状態では、次の理由で初回ビルドが必ず落ちる。setup.sh がこれを一括で潰す。

落ちる理由setup.sh の対応
dotnet / node が ~/.bashrc 経由でしか PATH に乗らない(非ログインシェル・CI では不在)DOTNET_ROOT と nvm を解決して検証。--install-missing で .NET SDK を ~/.dotnet に導入
firmware/switcher-module/ch32v003fun サブモジュールが未初期化git submodule update --init --recursive
scripts → .claude/scripts のリンク切れ(.claude は gitignore).claude を取得してリンクを復旧(失敗しても警告のみ。ビルドには不要)
NuGet / npm の依存が未取得dotnet restore と npm ci(CI と同じ lock 厳守)

主なオプション(何度実行しても同じ結果になる):

オプション用途
--check検証のみ。取得も生成もせず状態を報告する
--ci対話なし。.env を作らず、サブモジュールと .claude を触らない
--install-missing.NET SDK が無ければ dotnet-install.sh で導入する
--skip-submodules / --skip-restore / --skip-npm / --skip-agent-scripts個別スキップ

未解決の問題が残ると終了コード 1 で終わるので、CI からそのまま呼べる(./setup.sh --ci)。

Windows でネイティブ映像エンジンまで用意する(setup.ps1)

Visual Studio で F5 したときの DllNotFoundException / 0x8007007E は、ネイティブの switcher-engine.dll が未ビルドなことが原因。この DLL は .sln 外の CMake ビルドで、さらにその手前に libobs の import lib obs.lib が要る。obs.lib は OBS のインストーラには含まれず、OBS 本体をソースからビルドしないと手に入らない。

setup.ps1 はその依存の連鎖を通しで面倒を見る。

text
インストール済み OBS を検出 → 同じ版の obs-studio を clone
  → libobs だけビルド → obs.lib
    → .env に LIBOBS_* を記録
      → build.bat → switcher-engine.dll
        → Switcher.App.csproj が App 出力へ自動コピー(既存の仕組み)
オプション用途
-Check検証のみ。clone もビルドも .env の書き換えもしない
-ObsVersion <version>使う OBS の版を明示する
-Forceobs-studio\ を作り直す(版を切り替えるとき)
-Bundletools/bundle-obs-runtime.ps1 を呼び、App 出力に obs-runtime\ を同梱する
-SkipLibobs / -SkipEngine個別スキップ

初回は数十分かかる(obs-studio の clone が数 GB、libobs のビルドがその後)。2 回目以降は済んだ工程を飛ばす。

バージョンは固定していない。 マネージド側(ObsRuntime.cs)は libobs 30.0〜32.99 を受け入れ、範囲外でも警告を出すだけで拒否しない。setup.ps1 もそれに合わせ、インストール済み OBS の版を検出してその版のソースをビルドする。OBS が入っていない場合だけ既定の 32.0.4(実機検証済み)を使う。

⚠️ obs.lib(ビルド時)と obs.dll(実行時)の版が食い違うと起動失敗・クラッシュする。バージョンを検出に任せるのはこの事故を避けるため。手動で -ObsVersion を指定してインストール済みの版と食い違う場合は警告が出る。

エンドユーザーは OBS のインストールが不要。 ObsRuntime.Locate() は実行ファイルの隣の obs-runtime\ を最優先で見る(ObsRuntime.cs:83-90)ので、-Bundle で同梱した配布物は自己完結する。OBS インストールが要るのはビルドする側だけ。

GPL: obs-runtime\ を同梱した配布物は GPL-2.0 になる。LICENSE / THIRD-PARTY-NOTICES.md 参照。

環境変数(.env)

ツールチェーン関連の変数は .env.example をひな形に .env へ書く(setup.sh が無ければ自動生成する)。.env は gitignore 済み。既に export 済みの環境変数が .env より優先されるので、CI の env: / secrets が上書きされることはない。

⚠️ .env に書けるのはビルド/ツールチェーンの変数だけ。アプリの動作設定(AtemIp / WebPort / ProjectorDisplayIndex 等)は src/Switcher.App/appsettings.json を System.Text.Json が直接読む実装で、環境変数は見ない(Configuration/AppConfigLoader.cs)。

ビルド & テスト

PC常駐アプリ(.NET 9)

./setup.sh 済みでも、dotnet が PATH に乗るのは setup.sh の中だけ。呼び出し元のシェルには以下を前置きする。

sh
export DOTNET_ROOT=$HOME/.dotnet PATH=$HOME/.dotnet:$PATH

dotnet build HybridSwitcher.sln     # 全プロジェクトのビルド
dotnet test  HybridSwitcher.sln     # 全ユニットテスト

Switcher.App は WPF (net9.0-windows) だが EnableWindowsTargeting によりLinuxでもCIでも コンパイルは可能。ただしネイティブ switcher-engine(libobs) ランタイムは Windows 限定で、 実行には Windows 10/11 と下記の起動順が必要。

ネイティブ映像エンジン(libobs)のビルド & Windows 実起動 — 起動順

switcher-engine.dll(native/switcher-engine/)は Windows + OBS 専用で .sln 外。以下が検証済みの順序 (詳細は switcher-engine README / L-002 タスク)。

以下は手順の内訳。通常は setup.ps1 が 1〜2 を自動でやるので、手で追う必要があるのは仕組みを確認したいときだけ。

前提: Windows / Visual Studio 2022(「C++によるデスクトップ開発」)/ CMake ≥ 3.24 / インストール済み OBS(版は問わない。libobs 30.0〜32.99 が対象)。 以下はすべて 「x64 Native Tools Command Prompt for VS 2022」 から実行する(cmake/cl に PATH が通る。通常の cmd/PowerShell 不可)。

  1. libobs dev files を用意(採用 OBS と同一版のソースをビルド。インストール済み OBS アプリだけではヘッダ/obs.lib が無い)

    bat
    git clone --recursive https://github.com/obsproject/obs-studio.git
    rem <version> はインストール済み OBS に合わせる(obs.dll のファイルバージョン)。
    cd obs-studio && git checkout <version> && git submodule update --init --recursive
    cmake --preset windows-x64
    cmake --build build_x64 --config Release --target libobs

    → build_x64\libobs\Release\{obs.lib,obs.dll}、生成ヘッダ build_x64\config\obsconfig.h、公開ヘッダ libobs\。

  2. switcher-engine.dll をビルド(リポジトリルートで。ヘッダは公開+生成の2フォルダを ; 区切りで渡す)

    bat
    set OBS=<obs-studio のパス>
    set LIBOBS_INCLUDE_DIR=%OBS%\libobs;%OBS%\build_x64\config
    set LIBOBS_LIB=%OBS%\build_x64\libobs\Release\obs.lib
    native\switcher-engine\build.bat

    Switcher.App.csproj がビルド時に switcher-engine.dll を App 出力へ自動コピーする(VS F5/Rebuild でも維持)。

  3. App を起動(obs.dll 等を PATH に通してから)

    • Visual Studio: 構成 Debug/x64 → Switcher.App をスタートアップに → プロパティ「デバッグ」→ デバッグ起動プロファイルUIで環境変数 PATH = C:\Program Files\obs-studio\bin\64bit;%PATH%(版一致のインストール済み OBS)→ F5。
    • コマンドライン:
      bat
      dotnet build src\Switcher.App\Switcher.App.csproj -c Release
      set PATH=%OBS%\build_x64\rundir\Release\bin\64bit;%PATH%
      src\Switcher.App\bin\x64\Release\net9.0-windows\Switcher.App.exe

前提/注意

  • obs.dll + data\ + プラグイン + libobs-d3d11.dll が PATH 上で到達可能、かつ import lib(obs.lib) と同一版であること(不一致は起動失敗/クラッシュ)。
  • L-002 未完のうちは engine_startup が obs_reset_video で失敗する(libobs データパス未配線。L-002 タスクの「実機検証で判明した実装ポイント」参照)。
  • ネイティブ抜きで App を動かすなら DI(src/Switcher.App/Composition/ServiceCollectionExtensions.cs)を FakeVideoEngine に差し替える。

スマホWebブリッジ(React/TS)

sh
cd apps/phone-bridge
npm install
npm run dev      # 開発サーバ
npm run build    # プロダクションビルド
npm test         # vitest

Pico 2W ファームウェア

I/Oに依存しないロジックはホストの gcc でユニットテスト可能(Pico SDK不要)。

sh
cd firmware/pico2w-controller/test
make             # ビルド + 実行(全テスト green で終了コード0)

実機向けクロスビルド(Pico SDK / arm-none-eabi ツールチェーン必要)は firmware/pico2w-controller/README.md を参照。

CI(GitHub Actions)

.github/workflows/ci.yml が 全 PR(タスク → 親Epic の PR も含む)と main / develop への push で走る。すべて ubuntu-latest。

ジョブ内容
.NETdotnet build -c Release -warnaserror → dotnet format --verify-no-changes → dotnet test(結果 .trx をアーティファクト化)
phone-bridgenpm ci → npm run lint(eslint) → npm run build(tsc -b 型チェック + vite) → npm test(vitest)、dist/ をアーティファクト化
firmwarefirmware/pico2w-controller/test と firmware/switcher-module/test のホストテスト(gcc、-Werror)

ブランチ保護の必須チェックには集約ジョブ All checks 1つを指定すればよい。

CI が走るのは個人リポジトリ(public)だけ。 ミラー先の NxTEND-THE-HACK/2026-Team-38 は Free org の private リポジトリで Actions のランナーが割り当てられず、どのジョブも 0 ステップの まま即座に失敗する(ワークフロー側の問題ではなく org の Actions 枠の問題で、修正には org 管理者 による支払い設定・repo の public 化・セルフホストランナー登録のいずれかが要る)。そのため全ジョブに if: github.repository_owner != 'NxTEND-THE-HACK' を付けて向こうでは skip させている。ジョブレベルの if はランナー要求より前に評価されるので、skip されたジョブは失敗扱いにならない。

CI 対象外(ローカル/Windows でのみ検証可能):

  • native/switcher-engine(libobs 依存・Windows + OBS 専用・.sln 外)と、それを要する App の実起動
  • web/build-preview.ps1(Windows PowerShell 前提のパス処理)
  • apps/phone-bridge の Prettier 整形チェック(既存ファイルが未整形のため未導入。npm run format で一括整形後に追加可能)

ミラー(個人リポジトリ → ハッカソン用リポジトリ)

開発を個人アカウントの public リポジトリ(oldsheeep3/TheHack)で行い、ハッカソン用 private リポジトリ(NxTEND-THE-HACK/2026-Team-38)へ push のたびに反映する。片方向(個人 → ハッカソン用)。

ミラー先へ書けるトークンは GitHub に預けない。 実際に push するのは tailnet 上の VPS(gh ログイン済み)で、自分の資格情報を使う。GitHub Actions はその VPS に SSH して起動をかけるだけ なので、この public リポジトリに置く secret は tailnet への参加情報と SSH 鍵だけで済む。

.github/ を含め、履歴をそのまま送る(コミット SHA も個人リポジトリ側と一致する)。ミラー先では CI を走らせないよう、ci.yml と mirror.yml の両方がリポジトリのオーナーを見てジョブを skip する。

text
手元 ── git push origin ──→ oldsheeep3/TheHack (public)
                              ├ Actions: ci.yml(green になったら↓を起動)
                              └ Actions: mirror.yml
                                  ├ tailscale/github-action で tailnet に参加
                                  └ ssh ──→ VPS: mirror-sync <branch>
                                              ├ 個人リポジトリから fetch(~/mirror/TheHack.git)
                                              └ mirror.sh  … mirror/X を push + PR 作成 + マージ
                                                              ↓
                                              NxTEND-THE-HACK/2026-Team-38 (private)

ブランチ X を push すると:

  1. まず CI が走り、green で終わったときだけミラーが起動する(workflow_run トリガー)。 赤い場合・CI が走らないブランチは、直さない限りミラーされない
  2. .github/workflows/mirror.yml が tailnet に ephemeral ノードとして参加し、 VPS へ SSH して mirror-sync X を実行する(CI が通った X だけが対象)
  3. VPS が個人リポジトリから X を fetch し、tools/mirror/mirror.sh を呼ぶ
  4. ミラー先の mirror/X(ミラー専用ブランチ)へ push
  5. mirror/X → X の PR を作成(既にオープンならそれを使う)し、マージコミットでマージする

起点が GitHub 側にあるので、どのマシンから push しても(GitHub 上で直接編集しても)ミラーされる。 同期するのは CI が通ったそのブランチだけ。全ブランチ + 全タグをまとめて送るのは手動実行のとき。

ミラー先の main / develop へ直接 push も force push もしない。force は「手元で rebase / amend して mirror/X が fast-forward できなくなった」場合のフォールバックとして mirror/* に対してのみ使う。 ミラー先の ref を削除することはないので、ブランチ削除は同期されない。

Actions が使えないとき(ワークフローの失敗、tailnet の不調、初回の一括コピー)は VPS 側で mirror-sync を直接実行すれば追いつく。

場所もの役割
GitHub.github/workflows/mirror.ymltailnet に参加して VPS へ SSH し mirror-sync を起動
VPS~/mirror/TheHack.git中継用の bare リポジトリ(remote: personal / hackathon)
VPS~/mirror/mirror.shmirror/X の push・PR 作成・マージ(tools/mirror/mirror.sh)
VPS~/.local/bin/mirror-sync個人リポジトリから取り込んで同期(tools/mirror/mirror-sync)

セットアップ:

sh
# VPS 側(gh でログイン済み・gh auth setup-git 済みであること)
scp -r tools/mirror <vps>:~/mirror-install
ssh <vps> 'bash ~/mirror-install/install-vps.sh'

# CI 用の SSH 鍵を作って公開鍵を VPS に置く
ssh-keygen -t ed25519 -N '' -f mirror_ci
ssh-copy-id -i mirror_ci.pub <vps>

# 手動同期(全ブランチ + 全タグ / ブランチ指定)
ssh sheep 'bash -lc mirror-sync'
ssh sheep 'bash -lc "mirror-sync develop"'

個人リポジトリの Settings → Secrets and variables → Actions に登録する secret:

secret中身
TS_CLIENT / TS_SECRETTailscale の OAuth クライアント ID / シークレット(scope auth_keys write / tag tag:ci)
SSH_HOST / SSH_USERVPS の tailnet アドレス(100.x or MagicDNS 名)とログインユーザー名
SSH_KEYログインに使う秘密鍵(mirror_ci の中身。公開鍵は VPS の authorized_keys へ)
SSH_KNOWN_HOSTSVPS のホスト鍵(ssh-keyscan <host> の出力)。任意だが推奨

tailnet の ACL で tag:ci から VPS の 22/tcp を許可しておくこと。

  • マージは マージコミットで行う(squash / rebase merge だと merge-base が進まず、次回の PR に同じコミットが再び載る)。ブランチ保護で弾かれた場合は gh pr merge --admin で通す。
  • ミラー先に同名ブランチが無いと PR は作れない(mirror/X の push だけ行い notice を出す)。 その場合はミラー先で mirror/X からブランチを作る。
  • 手動で mirror-sync を叩くときは Actions の実行と重ならないようにする(作業リポジトリを共有 していて、排他はしていない)。
  • workflow_run はデフォルトブランチにあるワークフローファイルしか起動しない。mirror.yml は main にも入っている必要がある(develop だけに置いても発火しない)。
  • CI の push トリガーは main / develop だけなので、作業ブランチを直接 push してもミラーは 起動しない(PR を出せば CI は走るが、pull_request 由来の実行はミラーの対象外)。作業ブランチを 今すぐミラーしたいときは VPS で mirror-sync <branch> を叩くか、Actions から手動実行する。
  • ミラーの実行は concurrency で 1 本に絞っている。実行中 + 待機中がいる状態でさらに CI が green になると待機中が追い出され、そのブランチは次の CI green まで待つ。
  • .github/workflows/ も同期するので、VPS の gh ログインには workflow スコープが要る (gh auth refresh -h github.com -s workflow)。無いと push が拒否される。
  • タグは手動同期(引数なしの mirror-sync)のときにまとめて送る。ミラー先で既に別のコミットを 指しているタグは上書きしない。

共通プロトコル / ポート

各コンポーネントは親仕様書 §4 の共通定義に準拠する。

ポートプロトコル用途
8080HTTP/WebSocket設定WebAPI・コントローラー入力受信
9000SRT (Listener)映像入力(ATEM PGM等)
9999UDP broadcastタリー配信(255.255.255.255:9999)
9910UDPATEM遠隔制御(ATEM純正プロトコル)

詳細(イベントペイロード・設定変更API・タリーペイロード)は docs/specs/00-system-overview.md §4 を参照。

ドキュメント

Parts

6
QtyValueFootprintReferences
25.1kResistor_THT:R_Axial_DIN0309_L9.0mm_D3.2mm_P12.70mm_HorizontalR1, R2
1Conn_01x07_SocketConnector_PinSocket_2.54mm:PinSocket_1x07_P2.54mm_HorizontalJ3
1Conn_02x06_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_VerticalJ1
1Conn_02x08_Odd_EvenConnector_PinSocket_2.54mm:PinSocket_2x08_P2.54mm_HorizontalJ4
1RaspberryPi_PicoModule:RaspberryPi_Pico_Common_THTA1

Questions

How big is the Softswitcher module master PCB?

It measures 40 × 100 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Softswitcher module master use?

6 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Softswitcher module master KiCad files?

From the oldsheeep3/TheHack repository on GitHub, at the commit this page was made from: the board is softswitcher_module_master/softswitcher_module_master.kicad_pcb and its schematic softswitcher/softswitcher.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Softswitcher module master design in my own project?

Its repository publishes it under the GPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from oldsheeep3/TheHack

5
  • 2 layers78 × 78 mmSoftswitcher rp2040, the printed circuit board in 3D

    Softswitcher rp2040

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    76 partsGPL-2.0
  • 2 layers78 × 78 mmSoftswitcher rp2040 v2, the printed circuit board in 3D

    Softswitcher rp2040 v2

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    50 partsGPL-2.0
  • 2 layers78 × 78 mmSoftswitcher hdmi v1, the printed circuit board in 3D

    Softswitcher hdmi v1

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    33 partsGPL-2.0
  • 2 layers78 × 78 mmSoftswitcher, the printed circuit board in 3D

    Softswitcher

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    33 partsGPL-2.0
  • 2 layers40 × 100 mmSoftswitcher module sw4, the printed circuit board in 3D

    Softswitcher module sw4

    oldsheeep3/TheHack

    HybridSwitcher — ハイブリッドIP映像スイッチャー(開発用リポジトリ)

    21 partsGPL-2.0

Similar boards

  • 2 layers18.5 × 11.1 mmSwitch, the printed circuit board in 3D

    Switch

    byrantech/laptop

    anyon_e, a highly integrated, high end, open source laptop. Attempt the impossible.

    6 parts4.3kMIT
  • 2 layers14.6 × 33 mmBrain board SD Card 1, the printed circuit board in 3D

    Brain board SD Card 1

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    6 parts1.2k
  • 2 layers9 × 9 mmDpoint, the printed circuit board in 3D

    Dpoint

    Jcparkyn/dpoint

    Open-source digital stylus using camera tracking and inertial measurements

    6 parts1.1kMIT
  • 2 layers51.5 × 16.6 mmMicroswitchXY Endstop, the printed circuit board in 3D

    MicroswitchXY Endstop

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    6 parts1.1kGPL-3.0
  • 2 layers21.9 × 76.7 mmAmiga External, the printed circuit board in 3D

    Amiga External

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    6 parts1kGPL-3.0
  • 2 layers88.9 × 50.8 mmBusinesscard, the printed circuit board in 3D

    Businesscard

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    6 parts915
  • 2 layers20.3 × 15.2 mmL0 RGB led, the printed circuit board in 3D

    L0 RGB led

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    6 parts546MIT
  • 2 layers9 × 3.6 mmOpticalEncoder, the printed circuit board in 3D

    OpticalEncoder

    adamb314/ServoProject

    Getting the most out of your hobby servo

    6 parts545