Skip to main content

A Python capture library focused on new 3DS XL capture board frame acquisition.

Project description

ponkan-python

ponkan-python は、new 3DS XL capture board から USB 経由で映像フレームを取得するための Python ライブラリです。

このプロジェクトは cc3dsfs を参照しながら、個人用途で必要な N3DSXL 映像取得機能に絞って Python で再構成するものです。cc3dsfs 全体の代替や互換 API を提供することは目的にしていません。継続的なメンテナンスや対応 device の拡張は未定です。

Current Scope

  • new 3DS XL capture board の device 認識
  • raw frame 取得
  • raw frame の保存と metadata 記録
  • RGB8 numpy.ndarray への変換
  • Pillow 互換出力
  • libusb async transfer による streaming MVP

詳細は次の仕様書を参照してください。

  • spec/initial/cc3dsfs_python_rebuild_spec.md
  • spec/initial/cc3dsfs_python_n3dsxl_implementation_workflow.md

Installation

Python 3.12 / 3.13 を対象にしています。

pip install ponkan-python

PNG 変換には Pillow extra、FTDI D3XX backend には D3XX extra を追加します。

pip install "ponkan-python[image]"
pip install "ponkan-python[d3xx]"

Usage

高レベル API では、new 3DS XL capture board を開いて read() で RGB8 numpy.ndarray を取得できます。

from ponkan import CaptureOutput, open_capture

with open_capture(output=CaptureOutput.BOTH_VERTICAL) as cap:
    image = cap.read()
    if image is not None:
        print(image.shape)

上画面だけを読む場合は CaptureOutput.TOP を指定します。OpenCV へ渡す場合は colorspace="BGR" を指定できます。

from ponkan import CaptureOutput, open_capture

with open_capture(output=CaptureOutput.TOP, colorspace="BGR") as cap:
    top_bgr = cap.read()

3DS 固有の上画面・下画面・sequence などが必要な場合は read_frame() を使います。

from ponkan import open_capture

with open_capture() as cap:
    frame = cap.read_frame()
    if frame is not None:
        top = frame.top
        bottom = frame.bottom

API の詳細は API Reference を参照してください。

Command Line Tools

インストール後は次の console scripts を利用できます。

ponkan-list-devices
ponkan-capture-raw --out captures/n3dsxl/raw_2d_001.bin
ponkan-raw-to-png captures/n3dsxl/raw_2d_001.bin --metadata captures/n3dsxl/raw_2d_001.json --out captures/n3dsxl/png
ponkan-stream-n3dsxl --duration 10 --stats

実機へ N3DSXL command を送る操作は、事前に device identity と安全境界を確認してから実行してください。

Development

Python 実行と依存管理は uv を使います。

uv sync --dev
scripts/install-git-hooks.ps1
uv run ruff format --check .
uv run ruff check .
uv run ty check --no-progress
uv run pytest tests/unit

実機 new 3DS XL capture board を使うテストは通常 CI では実行しません。

$env:PONKAN_RUN_N3DSXL = "1"
uv run pytest -m requires_n3dsxl tests/e2e

Safety

N3DSXL command は、VID/PID と product string が仕様で許可された device にだけ送ります。未知の FTDI device を N3DSXL として扱わないでください。

Git hooks は .githooks/ に配置しています。clone 後に scripts/install-git-hooks.ps1 または sh scripts/install-git-hooks.sh を実行すると、core.hooksPath.githooks に設定されます。

Codex project-local policy は .codex/ に配置しています。Codex で有効にするには、この project layer を trust し、/hooks で hook を review/trust してください。

License and Attribution

This project is licensed under the MIT License.

This project references cc3dsfs by Lorenzooone, which is also licensed under the MIT License. The upstream copyright notice is preserved in LICENSE and NOTICE.md.

Release and publishing notes are kept in Publishing.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ponkan_python-0.1.1.tar.gz (73.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ponkan_python-0.1.1-py3-none-any.whl (63.3 kB view details)

Uploaded Python 3

File details

Details for the file ponkan_python-0.1.1.tar.gz.

File metadata

  • Download URL: ponkan_python-0.1.1.tar.gz
  • Upload date:
  • Size: 73.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ponkan_python-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b990ce84a86048fa621490506db06bd92bc2436cf7426cd0c701368f36978168
MD5 b272479216080786277c66b86824ff18
BLAKE2b-256 ecebefc47dfa77d3b8ea6a488ebd962d15b547dff8ee587a492daf9e0065fff2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ponkan_python-0.1.1.tar.gz:

Publisher: publish.yml on niart120/ponkan-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ponkan_python-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ponkan_python-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 63.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ponkan_python-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5efda578598c4947eca9db20f8dc15bf6d29d430a8705990d4602bf9370a4ec9
MD5 ea6de57db01af7d638f92c72fb68a4e5
BLAKE2b-256 2e10c3d227df6a7732ad656a2282e527e7d68491fe524aaa85368bc2311bacef

See more details on using hashes here.

Provenance

The following attestation bundles were made for ponkan_python-0.1.1-py3-none-any.whl:

Publisher: publish.yml on niart120/ponkan-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page