---
# System prepended metadata

title: PixelPouch

---

# 概要
[PixelPouch](https://github.com/RyotaUnzai/PixelPouch) は、Houdini や Maya などの DCC 向け Python ツールを開発する Technical Artist（TA） のためのツール開発・デバッグ・運用を支援するパイプラインツールです。

ポータブルのVSCode を中心とした開発フローを前提に、

- VSCode からの Python コード送信
- debugpy を用いた DCC プロセスへのデバッグアタッチ
- 開発・検証を効率化するユーティリティツール群

を提供し、DCC ツール開発を「書きやすく・試しやすく・壊れにくく」することを目的としています。

ポータブルを使用することでローカルにあるVSCodeを壊すことなく、PixelPouch専用のVSCodeとして使用できます。



# 環境
## 動作保証しているもの
Houdini 21.0.512

バージョンが異なる場合は`../PixelPouch/bin/houdini`をメモ帳で編集し、インストールしているHoudiniのバージョンに書き換えてください
マイナーバージョンが異なる程度であれば問題なく動作すると思います。ただし、Python3.11.7を基準に環境を構築するようにしているため、使用するHoudiniのメインバージョンが異なる場合は動作しない可能性もあります。

## セットアップ
1. [PixelPouch](https://github.com/RyotaUnzai/PixelPouch) からローカルにクローンしてください。

:::info
おすすめはドライブ直下になります。
フォルダ以下にクローンしてもいいですが空白がある場合、VSCodeがうまく動きません。
:::

2. `../PixelPouch/setup.bat`を実行する
3. `../PixelPouch/launch_vscode.bat`でVSCodeを立ち上げる


## VSCode上での操作
VSCodeにはいくつか便利な拡張機能を入れていますがVSCodeの操作を前提としているものが2つあります。

### Task Explorer
![image](https://hackmd.io/_uploads/rJKfqT8vZx.png =200x)

特にTask Exploererはツール開発する際に頻繁に使うものになるかと思います。

### Qt UI
![image](https://hackmd.io/_uploads/rk2a96LDbg.png =200x)
.uiファイルを編集する際にQt Designerを立ち上げることができます


## Houdiniの立ち上げ方
### Debugで起動する
![image](https://hackmd.io/_uploads/S116oaUP-g.png =200x)
ツール開発する際は必ず`RUN AND DEBUG > [Debug] Houdini: Launch + Auto Attach`から実行してください
コンボボックスを`[Debug] Houdini: Launch + Auto Attach`に変更後はF5で起動できるようになります。
ただし、DebugモードでのHoudiniは多重起動できませんので注意してください。
ReleaseモードのHoudiniや通常のHoudiniは起動できます。
:::info
多重起動やHoudiniを閉じた直後（内部的にはまだ起動している状態)に再度Debug起動すると正しく動作しないことがあります。
そういった場合はhython.exeがプロセスに残ってしまうことがあります。
その場合はタスクマネージャーから強制終了してください。
:::

### Releaseで起動する
![image](https://hackmd.io/_uploads/HyD_opIP-x.png =200x)
`Task Exploerer > PixelPouch > vscode > [Release] Houdini`



## DebugモードのHoudiniでのツール開発方法
![image](https://hackmd.io/_uploads/SkO7TpUPbx.png)

DebugモードでHoudiniを立ち上げるとHoudiniとVSCodeがアタッチされている状態で立ち上がります。

![image](https://hackmd.io/_uploads/SJSq6TLP-x.png =300x)

`..\PixelPouch\python\pixelpouch\houdini\tools\nodepalette\run.py`を開き、好きな場所にブレークポイントを付けてください。

![image](https://hackmd.io/_uploads/S1026aLDZx.png =200x)
シェルフにある`PixelPouch > NodePalette`を実行

![image](https://hackmd.io/_uploads/SkC1ApUwZe.png =200x)
ブレークポイントで実行が止まります。あとは通常通り操作ができます。


### シンプルに雑多なコードを書いて実行したい場合
![Screenshot 2026-02-08 212142](https://hackmd.io/_uploads/S1OpxALw-g.png)

シンプルに雑多なコードを書いて実行したい場合は、実行したいファイルを開いた状態で`Task Exploerer > PixelPouch > vscode > Send Python to Houdini`を実行してください。
プリントやエラーはターミナルに表示されます。



### アタッチを止めて再度アタッチする場合
デバックモード中に通常のPythonの実行やデバッグをしたいことがあると思いますがその際はアタッチを解除し、通常のコーディングをしても問題ありません。
通常のコーディングでの実行は`RUN AND DEBUG > Python Debugger: Current File (PixelPouch)`でできます

再度アタッチしたい場合は`RUN AND DEBUG > [Debug] Auto Attach to Houdini`を実行してください


![image](https://hackmd.io/_uploads/ByzLyAUwbx.png)


## 階層構造について
```
├── houdini
│   ├── python: こちらでツール開発して下さい。
│   ├── scripts:　起動スクリプトを定義する場所、現状は123.pyを使用しています。
│   └── toolbar: PixelPouch.shelfを保存しています。カスタムシェルフを登録したい場合はここに入れてください。
├── python
│   ├── pixelpouch: pixelpouchに関連するpythonコードが含まれています。
│   │   ├── houdini: houdiniに依存するコードが含まれています。
│   │   │   ├── ops
│   │   │   └── tools: pixelpouchのツールは通常こちらで記述していますがhoudini/pythonで開発することをお勧めします。
│   │   │　　　　　　　　こちらで開発する場合は`pytest`などが使用できます。
│   │   └── libs
│   │       ├── core
│   │       │   ├── app
│   │       │   ├── data
│   │       │   ├── debug
│   │       │   ├── houdini
│   │       │   ├── parsing
│   │       │   │   └── qss
│   │       │   └── qt
│   │       │       └── widgets
│   │       └── worker
│   └── third_party: Houdiniのみに依存する外部モジュールのインストール先です。
│　　　　　　　　　　　　追加したいモジュールはこちらにインストールしてください
├── rez
└── tests: テストコードはこちらに入れています。テストしたい場合はこちらに入れてください。Qtもテストできます。
```


## 便利なモジュール
### logger
```=python
from pixelpouch.libs.core.logging_factory import PixelPouchLoggerFactory
logger = PixelPouchLoggerFactory.get_logger(__name__)
logger.info("logger test")
```
loggerはPixelPouchLoggerFactoryで使用できます。

### EnvironmentVariables
```=python
from pixelpouch.libs.core.environment_variable_key import PixelPouchEnvironmentVariables
from pixelpouch.libs.core.houdini import HoudiniEnvironmentVariables
PP_ENV = PixelPouchEnvironmentVariables()
PP_ENV.PIXELPOUCH_LOCATION # PixelPouchのロケーションを取得できます

HOU_ENV = HoudiniEnvironmentVariables()
HOU_ENV.HOUDINI_LOCATION # Houdiniのロケーションを取得できます
HOU_ENV.HOUDINI_PATH　# HOUDINI_PATHを取得できます
```
環境変数を取得するときにpixelpouchで使用している環境変数はこちらで取れます。


### QssLoader
```=python
DATA_DIR = Path(__file__).resolve().parents[1] / "data"
QSS_FILE = DATA_DIR / "main.qss"

from pixelpouch.libs.core.parsing.qss import loader
QSSLOADER = loader.QssLoader(DATA_DIR)

QSS_FILE = DATA_DIR / "main.qss"
widget..setStyleSheet(QSSLOADER.load(QSS_FILE))
```
こちらを使うことでcssのrootや@importが使用できます。

```=html
:root {
    --list-item-selected-bg: #d93535;
    --list-item-hover-bg: #b75252;
    --list-item-radius: 4px;
}

@import ("color.qss")
```


## pytest
![image](https://hackmd.io/_uploads/rJq6BCIw-g.png)
テストコードを`../PixelPouch/tests`以下に記述することでテスト実行することができます。


