Phomemo M02 Pro 向けのレイアウト生成(JSON)-> 画像合成 -> プレビュー/印刷を、MCPサーバ経由で提供します。
- Phomemo M02 Pro 向けのレイアウトを JSON で生成
- レイアウトを画像に変換してプレビュー/印刷
- MCP ツールで検証・レンダリング・印刷を提供
- OS: Linux(BlueZを使用)
- Python: 3.10+(動作確認は環境に依存)
- Bluetooth: プリンタと接続できること
sudo apt update
sudo apt install -y bluez libbluetooth-dev python3-venv python3-full補足: venv推奨、uv非推奨 OS環境にも依存しそうですが、Bluetoothを使うのに、BlueZが必要です。 bluezを入れた後に、pythonをインストールするとコンパイルされて、 bluetooth用のヘッダ周りが参照できるようになるようです。 uvでやると、コンパイル済みのpythonを使用されるためか、 bluetooth用のヘッダ周りが参照できないようでエラーが発生します。
cd /path/to/phomemo
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txtこのプロジェクトは起動時に.envを読み込みます(.envは.gitignoreに含まれておりコミットされません)。
cp env.example .env.envの例:
PHOMEMO_PRINTER_ADDRESS=B5:4B:B4:78:7B:C4
PHOMEMO_PRINTER_CHANNEL=1スキャン:
hcitool scan接続:
bluetoothctl connect XX:XX:XX:XX:XX:XXRFCOMM Channel 確認:
sudo sdptool records XX:XX:XX:XX:XX:XXphomemo_printer CLIで疎通できます(※-tのテキスト印刷は環境のフォント事情に依存します。レイアウト印刷は画像化するため日本語も印刷可能です)。
phomemo_printer -a XX:XX:XX:XX:XX:XX -c 1 -t "Hello world"
phomemo_printer -a XX:XX:XX:XX:XX:XX -c 1 -i ./image.jpgskills/phomemo-layout は、Phomemo M02 Pro 向けのレイアウトJSONの生成・検証・プレビュー・印刷までを扱う Agent Skills です。
Claude Codeや、Codex等のコーディングエージェントのSkillとして利用できます。
例えば、コーディングエージェント上でxxxxを印刷してくださいという依頼を出した場合に、
スキルを利用してレイアウトJSONを生成し、印刷を行うことができます。
以下のような流れで動作します。
- プリンタ仕様とスキーマを読む
- JSONのみを出力し、
skills/phomemo-layout/outputs/に配置する requirements.txtで依存を導入する- 検証:
PYTHONPATH=src python skills/phomemo-layout/scripts/validate_layout.py <layout.json> - プレビュー:
PYTHONPATH=src python skills/phomemo-layout/scripts/render_layout.py --dry-run <layout.json> - 印刷する場合:
PYTHONPATH=src python skills/phomemo-layout/scripts/render_layout.py --print <layout.json>
- 幅は常に 576px 固定。背景は白、文字は黒が基本。
- 印刷前に
output.thresholdで2値化される。 - 実寸換算(300dpi想定):
px = cm / 2.54 * 300。576px は約 4.88cm。 - 長尺は
output.slice_height(例: 1400)とoutput.chunk_rows(1-256)で分割送信する。 - 回転は
output.rotate(auto/none/cw90/ccw90)。長尺の定規は回転せずY方向で確保する。
ディレクトリphomemo-layoutを各コーディングエージェントのディレクトリskillsに配置します。
コーディングエージェントのSkillとして利用できます。
jsonファイルのサンプルです。
skills/phomemo-layout/references/layout.sample.json
このリポジトリは現状「インストール済みパッケージ」ではないため、python -m ...で動かす場合はPYTHONPATH=srcが必要です。
export PYTHONPATH="$PWD/src"# Streamable HTTP(推奨)
python -m phomemo_agent.cli.run_mcp_server --transport streamable-http --host 0.0.0.0 --port 8787
# Streamable HTTP(互換エイリアス: http)
python -m phomemo_agent.cli.run_mcp_server --transport http --host 0.0.0.0 --port 8787
# SSE
python -m phomemo_agent.cli.run_mcp_server --transport sse --host 0.0.0.0 --port 8787
# stdio
python -m phomemo_agent.cli.run_mcp_server --transport stdio- Streamable HTTP:
http://<host>:8787/mcp - SSE:
http://<host>:8787/sse
- Streamable HTTP:
streamable_http_client("http://<host>:8787/mcp") - SSE:
sse_client("http://<host>:8787/sse")
get_printer_specget_layout_schemaget_layout_examplesvalidate_layout(layout)render_layout_job(layout, dry_run=true|false, encoding="utf-8")
- まずプレビュー(既定
dry_run=true)を作る - 問題なければ
dry_run=falseで印刷する
注意: dry_runの既定はtrueなので、印刷したい場合は必ずdry_run=falseを指定してください。
- スクリプト実行時は
PYTHONPATH=srcを設定する。 - レイアウト印刷は画像化するため日本語も印刷可能です。
render_layout_jobの戻り値infoには、以下が入ります(サーバ再起動後に反映):
info.dry_runinfo.send_to_printerinfo.printer.address_present(MACアドレス本体は返さず存在有無のみ)info.printer.address_source(env/missingなど)info.reason_not_printed(例:"dry_run=true (preview only)")
典型原因:
dry_run=trueのまま(プレビューのみ)- レイアウトJSON側が
output.send_to_printer=false .envのPHOMEMO_PRINTER_ADDRESS未設定、またはBluetooth未接続
src/phomemo_agent/: 実装本体composer.py/printer.py/pipeline.py/validators.pymcp/layout_server.py: MCPサーバ本体(tools/resources/prompts)cli/run_mcp_server.py: MCPサーバ起動CLI
schemas/layout_job.schema.json: レイアウトJSON Schemaenv.example:.envの雛形