Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Bug report
description: Something doesn't work as expected
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to report this. Tracking behavior can vary a lot by device and
configuration, so the fields below help narrow it down quickly.

- type: input
id: device
attributes:
label: Phone model
placeholder: e.g. Pixel 8, Samsung Galaxy S23
validations:
required: true

- type: input
id: android-version
attributes:
label: Android version
validations:
required: true

- type: dropdown
id: tier
attributes:
label: Tracking tier (Settings > Advanced > Diagnostics)
options:
- COMPATIBLE
- STANDARD
- OPTIMAL
- Not sure
validations:
required: true

- type: dropdown
id: target
attributes:
label: Network target
options:
- Blender/Unity (VMC/OSC)
- VBridger (UDP)
- VTube Studio (Plugin API)
- Not applicable
validations:
required: true

- type: textarea
id: repro
attributes:
label: Steps to reproduce
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior

- type: textarea
id: logs
attributes:
label: Logs
description: >
Export logs from Settings > Advanced > Logging and attach the file here (drag & drop) --
more reliable than describing behavior from memory. IP addresses are masked automatically
outside debug builds, no face-tracking data is ever logged.

- type: checkboxes
id: security-confirmation
attributes:
label: Confirmation
options:
- label: This is not a security vulnerability report (those go through [private reporting](https://github.com/guyiome/AndroidMoCap/security/advisories/new) instead)
required: true
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Report a security vulnerability
url: https://github.com/guyiome/AndroidMoCap/security/advisories/new
about: Please do not report security vulnerabilities as public issues -- use GitHub's private reporting instead (see docs/SECURITY.md).
22 changes: 22 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Feature request
description: Suggest an idea for this project
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem would this solve?
validations:
required: true

- type: textarea
id: solution
attributes:
label: Proposed solution

- type: markdown
attributes:
value: |
Per `docs/CONTRIBUTING.md`, please open this issue before working on a pull request for
anything non-trivial -- this project is maintained by one person, and an upfront
discussion avoids duplicated work on either side.
11 changes: 11 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## Summary

<!-- What does this change do, and why? -->

## Checklist

- [ ] I agree to the terms of the project's [CLA](../docs/CLA.md) -- required for any contribution
- [ ] Tested on a real device (required for anything touching camera/tracking -- the emulator has
no usable camera feed)
- [ ] Updated `AndroidMoCap_revue_technique.md` / the relevant spec doc, if this touches something
already tracked there
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ competing product.
See `docs/CONTRIBUTING.md` before opening a pull request -- any contribution implies
acceptance of the contributor license agreement (`docs/CLA.md`).

## Security

Found a vulnerability? See `docs/SECURITY.md` -- please report it privately rather than as a
public issue.

## Publishing a release (maintainer)

Signing configured via environment variables (`RELEASE_KEYSTORE_BASE64`,
Expand Down
5 changes: 5 additions & 0 deletions README_FR.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,11 @@ mais pas librement redistribuable comme produit concurrent.
Voir `docs/CONTRIBUTING_FR.md` avant d'ouvrir une pull request -- toute contribution
suppose l'acceptation de l'accord de licence contributeur (`docs/CLA_FR.md`).

## Sécurité

Trouvé une faille ? Voir `docs/SECURITY_FR.md` -- merci de la signaler en privé plutôt que via une
issue publique.

## Publier une version (mainteneur)

Signature configurée via des variables d'environnement (`RELEASE_KEYSTORE_BASE64`,
Expand Down
33 changes: 33 additions & 0 deletions docs/SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Security Policy

*🇫🇷 Français : [SECURITY_FR.md](SECURITY_FR.md) · 🇨🇳 简体中文: [SECURITY_ZH.md](SECURITY_ZH.md) · 🇯🇵 日本語: [SECURITY_JA.md](SECURITY_JA.md)*

## Reporting a vulnerability

Please report security vulnerabilities privately through GitHub's
[private vulnerability reporting](https://github.com/guyiome/AndroidMoCap/security/advisories/new)
(Security tab → "Report a vulnerability"), not as a public issue.

This project is maintained by one person — expect a best-effort response, not a formal SLA. I'll
acknowledge reports as soon as I can and keep you updated while a fix is worked on.

## Scope

AndroidMoCap only communicates on the local network the phone is connected to (Wi-Fi). It never
talks to a remote server, and the app itself never initiates an outbound connection beyond an
optional GitHub Releases check for updates. Keep that in mind when assessing severity: exploiting
a network-facing issue here requires an attacker already present on the same local network.

Areas most relevant to a security review:

- `network/IFacialMocapSender.kt` — passive UDP listener (iFacialMocap/VBridger wire protocol),
unauthenticated by design, matching the third-party protocol it implements.
- `network/VTubeStudioSender.kt` / `VTubeStudioProtocol.kt` — WebSocket client with a token-based
auth handshake against VTube Studio's own Plugin API.
- `network/VmcOscSender.kt` — outbound-only OSC/UDP, no listening socket.
- `logging/AppLog.kt` / `LogFormatting.kt` — local log file; IP addresses are masked outside debug
builds, and no face-tracking data is ever logged above `DEBUG` level.

## Supported versions

Only the latest published release is supported — there is no long-term maintenance branch.
36 changes: 36 additions & 0 deletions docs/SECURITY_FR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Politique de sécurité

*🇬🇧 English: [SECURITY.md](SECURITY.md) · 🇨🇳 简体中文: [SECURITY_ZH.md](SECURITY_ZH.md) · 🇯🇵 日本語: [SECURITY_JA.md](SECURITY_JA.md)*

## Signaler une faille

Merci de signaler toute faille de sécurité en privé via la fonctionnalité GitHub de
[signalement privé de vulnérabilité](https://github.com/guyiome/AndroidMoCap/security/advisories/new)
(onglet Security → "Report a vulnerability"), et non via une issue publique.

Ce projet est maintenu par une seule personne — la réponse se fait au mieux, sans SLA formel.
J'accuserai réception dès que possible et tiendrai informé pendant la résolution.

## Portée

AndroidMoCap ne communique que sur le réseau local (Wi-Fi) auquel le téléphone est connecté. Il ne
parle jamais à un serveur distant, et l'app elle-même n'initie jamais de connexion sortante en
dehors d'une vérification optionnelle des Releases GitHub pour les mises à jour. À garder en tête
pour évaluer la sévérité : exploiter un problème réseau ici suppose un attaquant déjà présent sur
le même réseau local.

Zones les plus pertinentes pour une revue de sécurité :

- `network/IFacialMocapSender.kt` — écoute UDP passive (protocole iFacialMocap/VBridger), sans
authentification par conception, conformément au protocole tiers qu'il implémente.
- `network/VTubeStudioSender.kt` / `VTubeStudioProtocol.kt` — client WebSocket avec une poignée de
main d'authentification par token contre l'API Plugin propre à VTube Studio.
- `network/VmcOscSender.kt` — OSC/UDP sortant uniquement, aucun socket d'écoute.
- `logging/AppLog.kt` / `LogFormatting.kt` — fichier de log local ; les adresses IP sont masquées
hors build de développement, et aucune donnée de suivi du visage n'est jamais journalisée
au-dessus du niveau `DEBUG`.

## Versions supportées

Seule la dernière version publiée est supportée — il n'y a pas de branche de maintenance long
terme.
38 changes: 38 additions & 0 deletions docs/SECURITY_JA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# セキュリティポリシー

*🇬🇧 English: [SECURITY.md](SECURITY.md) · 🇫🇷 Français : [SECURITY_FR.md](SECURITY_FR.md) · 🇨🇳 简体中文: [SECURITY_ZH.md](SECURITY_ZH.md)*

> ⚠️ **機械翻訳について**:このドキュメントはAIによる自動翻訳であり、人間やネイティブスピーカーに
> よる校正は行われていません。参考情報としてのみご利用ください。法的効力を持つのは英語原文
> [SECURITY.md](SECURITY.md) です。

## 脆弱性の報告について

セキュリティ上の脆弱性は、公開の issue としてではなく、GitHub の
[プライベート脆弱性報告](https://github.com/guyiome/AndroidMoCap/security/advisories/new)
(Security タブ → "Report a vulnerability")を通じて非公開で報告してください。

本プロジェクトは一人のメンテナーによって管理されています——ベストエフォートでの対応となり、正式な
SLA はありません。可能な限り速やかに受領を確認し、修正の進捗をお伝えします。

## 対象範囲

AndroidMoCap は、スマートフォンが接続しているローカルネットワーク(Wi-Fi)上でのみ通信します。
リモートサーバーと通信することは一切なく、アプリ自体がアウトバウンド接続を開始することも、更新確認
のための GitHub Releases への任意アクセスを除いてありません。深刻度を評価する際はこの点にご留意
ください:ここでのネットワーク関連の問題を悪用するには、攻撃者が同じローカルネットワーク上に既に
存在している必要があります。

セキュリティレビューにおいて特に関連性の高い箇所:

- `network/IFacialMocapSender.kt` —— パッシブな UDP リスナー(iFacialMocap/VBridger のワイヤー
プロトコル)。実装元のサードパーティプロトコルに合わせ、設計上認証なし。
- `network/VTubeStudioSender.kt` / `VTubeStudioProtocol.kt` —— VTube Studio 自身の Plugin API に
対する、トークンベースの認証ハンドシェイクを伴う WebSocket クライアント。
- `network/VmcOscSender.kt` —— アウトバウンドのみの OSC/UDP、リスニングソケットなし。
- `logging/AppLog.kt` / `LogFormatting.kt` —— ローカルのログファイル。IP アドレスはデバッグビルド
以外ではマスクされ、`DEBUG` レベルより上で顔トラッキングデータがログに記録されることはありません。

## サポート対象バージョン

サポートされるのは最新の公開リリースのみです——長期メンテナンスブランチはありません。
35 changes: 35 additions & 0 deletions docs/SECURITY_ZH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 安全政策

*🇬🇧 English: [SECURITY.md](SECURITY.md) · 🇫🇷 Français : [SECURITY_FR.md](SECURITY_FR.md) · 🇯🇵 日本語: [SECURITY_JA.md](SECURITY_JA.md)*

> ⚠️ **机器翻译声明**:本文档由 AI 自动翻译生成,尚未经过人工或母语者校对,仅供参考。具有法律效力的
> 版本是英文原版 [SECURITY.md](SECURITY.md)。

## 报告漏洞

请通过 GitHub 的
[私密漏洞报告](https://github.com/guyiome/AndroidMoCap/security/advisories/new)
功能(Security 标签页 → "Report a vulnerability")私下报告安全漏洞,而不要提交公开 issue。

本项目由一人独立维护——响应为尽力而为,没有正式的 SLA。我会尽快确认收到报告,并在修复过程中及时
告知进展。

## 范围

AndroidMoCap 仅在手机所连接的本地网络(Wi-Fi)上通信。它从不与远程服务器通信,应用本身也从不主动
发起出站连接,唯一的例外是可选的 GitHub Releases 更新检查。评估严重程度时请留意这一点:利用此处
的网络相关问题需要攻击者已经处于同一本地网络中。

与安全审查最相关的部分:

- `network/IFacialMocapSender.kt` —— 被动 UDP 监听器(iFacialMocap/VBridger 线协议),按设计不带
身份验证,与其实现的第三方协议保持一致。
- `network/VTubeStudioSender.kt` / `VTubeStudioProtocol.kt` —— 针对 VTube Studio 自身 Plugin API
的 WebSocket 客户端,带有基于令牌的身份验证握手。
- `network/VmcOscSender.kt` —— 仅出站的 OSC/UDP,无监听套接字。
- `logging/AppLog.kt` / `LogFormatting.kt` —— 本地日志文件;IP 地址在非调试构建中会被掩码处理,
且面部追踪数据从不会以高于 `DEBUG` 的级别被记录。

## 支持的版本

仅支持最新发布的版本——没有长期维护分支。
Loading