Add EchoFace module - #980
Conversation
There was a problem hiding this comment.
Pull request overview
Adds real-time MediaPipe facial tracking, UDP/network synchronization, avatar animation, and runtime controls.
Changes:
- Adds Unity facial animation and network bridge components.
- Adds the Python tracking client and setup documentation.
- Adds Python-related ignore rules and Unity metadata.
Reviewed changes
Copilot reviewed 10 out of 25 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
Assets/SEE/Tools/EchoFace/FaceData.cs |
Defines facial frame data. |
Assets/SEE/Tools/EchoFace/FaceData.cs.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/EchoFace.cs |
Applies facial animation to avatars. |
Assets/SEE/Tools/EchoFace/EchoFace.cs.meta |
Unity metadata and execution order. |
Assets/SEE/Tools/EchoFace/EchoFaceNetworkBridge.cs |
Synchronizes UDP data through Netcode. |
Assets/SEE/Tools/EchoFace/EchoFaceNetworkBridge.cs.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/EchoFaceToggleController.cs |
Adds runtime toggling and popup UI. |
Assets/SEE/Tools/EchoFace/EchoFaceToggleController.cs.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/client.py |
Orchestrates the tracking client. |
Assets/SEE/Tools/EchoFace/Client/client.py.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/face_analyzer.py |
Integrates MediaPipe detection. |
Assets/SEE/Tools/EchoFace/Client/face_analyzer.py.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/face_data_sender.py |
Serializes and sends tracking data. |
Assets/SEE/Tools/EchoFace/Client/face_data_sender.py.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/helpers.py |
Provides landmark drawing helpers. |
Assets/SEE/Tools/EchoFace/Client/helpers.py.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/video_io.py |
Handles capture, playback, and display. |
Assets/SEE/Tools/EchoFace/Client/video_io.py.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/README.md |
Documents Python client setup. |
Assets/SEE/Tools/EchoFace/Client/README.md.meta |
Unity metadata. |
Assets/SEE/Tools/EchoFace/Client/face_landmarker.task.meta |
Model asset metadata. |
Assets/SEE/Tools/EchoFace/Client.meta |
Client folder metadata. |
Assets/SEE/Tools/EchoFace.meta |
EchoFace folder metadata. |
.gitignore |
Adds Python environment exclusions. |
Files not reviewed (13)
- Assets/SEE/Tools/EchoFace.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/README.md.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/client.py.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/face_analyzer.py.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/face_data_sender.py.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/face_landmarker.task.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/helpers.py.meta: Generated file
- Assets/SEE/Tools/EchoFace/Client/video_io.py.meta: Generated file
- Assets/SEE/Tools/EchoFace/EchoFace.cs.meta: Generated file
- Assets/SEE/Tools/EchoFace/EchoFaceNetworkBridge.cs.meta: Generated file
- Assets/SEE/Tools/EchoFace/EchoFaceToggleController.cs.meta: Generated file
- Assets/SEE/Tools/EchoFace/FaceData.cs.meta: Generated file
Suppressed comments (1)
Assets/SEE/Tools/EchoFace/Client/README.md:57
- The repeated PowerShell activation command is also invalid; invoke the generated
Activate.ps1script explicitly.
venv\Scripts\Activate
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
In addition to Copilot, I also asked Claude Code for a review. Here is its response (which I hope are helpful): I reviewed the branch against its merge-base with Must fix — correctness1. Eye bones are never resolved when
2.
3.
4. The XML comment states 5.
6. The UDP listener accepts packets from the whole network and relays them to every client — [EchoFaceNetworkBridge.cs:291](Assets/SEE/Tools/EchoFace/EchoFaceNetworkBridge.cs:291)
Architecture and integration7. This duplicates SEE's existing blendshape replication and will fight it. [BlendshapeExpressionsSynchronizer](Assets/SEE/Game/Avatars/BlendshapeExpressionsSynchronizer.cs) already samples all weights off Relatedly, the new path also bypasses SEE's 8. Nothing is wired up. No prefab or scene in the diff references 9. Head pose is re-derived from three landmarks when MediaPipe can hand it over directly. 10. Duplicated helpers that SEE already provides. 11. The toggle key bypasses SEE's keybinding system and collides with an existing binding. 12. Toggling off leaves EchoFace's smoothing state stale, and mutates a shared Canvas. Python client13. The model path only resolves from one working directory — [face_analyzer.py:21](Assets/SEE/Tools/EchoFace/Client/face_analyzer.py:21)
14. Video-file playback can violate MediaPipe's monotonic-timestamp contract — [client.py:153](Assets/SEE/Tools/EchoFace/Client/client.py:153)
15. Smaller Python items. 16. README gaps. It covers only venv creation and Repo hygiene17. 18. Three 19. A 3.7 MB binary model is committed into Also note the project already ships Nits
The documentation quality throughout is genuinely above the repo average; almost every declaration carries a meaningful XML doc or docstring, and the compact-payload contract is explained well on both sides. The problems are concentrated in lifecycle wiring, the two-writers-to-one-mesh conflict with SEE's existing avatar replication, and reuse of what SEE already has. |
- Move the reset logic to EchoFace - Add the option to disable conflicting components when EchoFace is started
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
|
TODOs:
|
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Introduces
EchoFace, a real-time webcam-driven facial animation module for multiplayer sessions. It uses Google MediaPipe's Face Landmarker task to capture the local user's facial expressions (blendshapes, head rotation, and eye look) and synchronizes the resulting avatar animation across the network.For details on setup, architecture, and configuration, see the EchoFace Wiki Page.