AI-Powered Mixed Reality Smart Whiteboard — draw in the air, let AI read and summarize your notes, and see the result rendered live on a Mixed Reality panel.
© 2026 piyush0049 — All Rights Reserved. See LICENSE for terms.
MX Ink Whiteboard is a Mixed Reality application built with Unity that turns freehand air-drawing into structured, AI-generated summaries. The user draws strokes in world space using the Logitech MX Ink stylus (or mouse in simulator mode). On demand, the whiteboard is captured as an image and sent through a two-stage Hugging Face Inference pipeline: first a vision model reads the content, then a language model condenses it into clean notes — displayed with a typewriter animation on a floating MR panel.
| Stage | Model | Role |
|---|---|---|
| 1 — Vision | Salesforce/blip-image-captioning-large | Reads the whiteboard image and generates a description |
| 2 — Language | facebook/bart-large-cnn | Summarizes the description into structured notes |
Both models are accessed via the Hugging Face Inference API (free tier).
mx_ink/ folder.unity-whiteboardhf_).Assets/Resources/ApiConfig.json and insert your token:{
"hf_api_token": "hf_YOUR_TOKEN_GOES_HERE"
}
Security note:
ApiConfig.jsonis listed in.gitignoreand will never be committed to source control.
DrawingManager.AirDrawWhiteboardCaptureAIWhiteboardManagerLinePrefab.0.01Assets/Materials/ → name it InkMat → set color to bright blue.InkMat to the Line Renderer's material slot.LinePrefab from the Hierarchy into Assets/Prefabs/, then delete it from the Hierarchy.DrawingManager → AirDraw, assign the LinePrefab prefab to the Line Prefab slot.800 × 600(0, 0, 2)(0.005, 0.005, 0.005)0.8).StatusText (anchor: top, size: 18).SummaryText (anchor: middle, size: 22, auto-size enabled).SummarizeBtn (label: AI Summarize).ClearBtn (label: Clear).WhiteboardUI → wire all six fields in the Inspector.Select DrawingManager → in the AIWhiteboardManager component, assign the Whiteboard UI field to the Canvas object.
| Action | Input |
|---|---|
| Draw stroke | Hold Left Mouse Button and move the mouse |
| Stop drawing | Release the mouse button |
| Move camera | W A S D |
| Look around | Right Mouse Button + drag |
| Trigger AI summary | Click AI Summarize in the scene UI |
| Clear the canvas | Click Clear in the scene UI |
User Input (stylus / mouse)
│
▼
AirDraw.cs
Captures pointer position and instantiates
LineRenderer strokes in world space.
│
▼
WhiteboardCapture.cs
Renders all strokes to a RenderTexture,
composites over a white background, and
exports raw PNG bytes.
│
▼
AIWhiteboardManager.cs
│
├─► Stage 1 — Hugging Face Inference API
│ Model : Salesforce/blip-image-captioning-large
│ Input : PNG bytes (octet-stream)
│ Output: "a whiteboard showing …"
│
└─► Stage 2 — Hugging Face Inference API
Model : facebook/bart-large-cnn
Input : BLIP caption as plain text
Output: Concise bullet-point summary
│
▼
WhiteboardUI.cs
Animates summary onto the
MR panel using a typewriter effect.
mx_ink/
├── Assets/
│ ├── Scripts/
│ │ ├── AirDraw.cs # Stroke input and LineRenderer management
│ │ ├── WhiteboardCapture.cs # RenderTexture → PNG byte array
│ │ ├── AIWhiteboardManager.cs # Hugging Face API orchestration (BLIP + BART)
│ │ └── WhiteboardUI.cs # MR panel UI and typewriter animation
│ ├── Resources/
│ │ └── ApiConfig.json # API token (git-ignored, never committed)
│ ├── Materials/ # InkMat material
│ └── Prefabs/ # LinePrefab
├── Packages/
│ └── manifest.json # XR Toolkit, OpenXR, TMP (auto-resolved)
├── .gitignore
├── LICENSE
└── README.md
| Symptom | Resolution |
|---|---|
| HTTP 503 — "Model loading" | The Hugging Face free tier cold-starts models. Wait ~20 seconds and retry. |
| Ink strokes not visible | Confirm LinePrefab is assigned in the AirDraw component inspector. |
| "No HF token" error in console | Verify ApiConfig.json contains the hf_api_token key with no surrounding spaces. |
| BART returns an empty summary | The BLIP caption may be too short (<30 characters). The BLIP caption is displayed as a fallback. Try drawing more content. |
TMP namespace errors on compile | Window → Package Manager → locate TextMeshPro → Install. |
This project is proprietary. Copying, redistribution, or modification of any kind is strictly prohibited without explicit written permission from the author. See LICENSE for full terms.
C#
74.8%
ShaderLab
21.5%
HLSL
3.7%
AI-Powered Mixed Reality Smart Whiteboard — draw in the air, let AI read and summarize your notes, and see the result rendered live on a Mixed Reality panel.
© 2026 piyush0049 — All Rights Reserved. See LICENSE for terms.
MX Ink Whiteboard is a Mixed Reality application built with Unity that turns freehand air-drawing into structured, AI-generated summaries. The user draws strokes in world space using the Logitech MX Ink stylus (or mouse in simulator mode). On demand, the whiteboard is captured as an image and sent through a two-stage Hugging Face Inference pipeline: first a vision model reads the content, then a language model condenses it into clean notes — displayed with a typewriter animation on a floating MR panel.
| Stage | Model | Role |
|---|---|---|
| 1 — Vision | Salesforce/blip-image-captioning-large | Reads the whiteboard image and generates a description |
| 2 — Language | facebook/bart-large-cnn | Summarizes the description into structured notes |
Both models are accessed via the Hugging Face Inference API (free tier).
mx_ink/ folder.unity-whiteboardhf_).Assets/Resources/ApiConfig.json and insert your token:{
"hf_api_token": "hf_YOUR_TOKEN_GOES_HERE"
}
Security note:
ApiConfig.jsonis listed in.gitignoreand will never be committed to source control.
DrawingManager.AirDrawWhiteboardCaptureAIWhiteboardManagerLinePrefab.0.01Assets/Materials/ → name it InkMat → set color to bright blue.InkMat to the Line Renderer's material slot.LinePrefab from the Hierarchy into Assets/Prefabs/, then delete it from the Hierarchy.DrawingManager → AirDraw, assign the LinePrefab prefab to the Line Prefab slot.800 × 600(0, 0, 2)(0.005, 0.005, 0.005)0.8).StatusText (anchor: top, size: 18).SummaryText (anchor: middle, size: 22, auto-size enabled).SummarizeBtn (label: AI Summarize).ClearBtn (label: Clear).WhiteboardUI → wire all six fields in the Inspector.Select DrawingManager → in the AIWhiteboardManager component, assign the Whiteboard UI field to the Canvas object.
| Action | Input |
|---|---|
| Draw stroke | Hold Left Mouse Button and move the mouse |
| Stop drawing | Release the mouse button |
| Move camera | W A S D |
| Look around | Right Mouse Button + drag |
| Trigger AI summary | Click AI Summarize in the scene UI |
| Clear the canvas | Click Clear in the scene UI |
User Input (stylus / mouse)
│
▼
AirDraw.cs
Captures pointer position and instantiates
LineRenderer strokes in world space.
│
▼
WhiteboardCapture.cs
Renders all strokes to a RenderTexture,
composites over a white background, and
exports raw PNG bytes.
│
▼
AIWhiteboardManager.cs
│
├─► Stage 1 — Hugging Face Inference API
│ Model : Salesforce/blip-image-captioning-large
│ Input : PNG bytes (octet-stream)
│ Output: "a whiteboard showing …"
│
└─► Stage 2 — Hugging Face Inference API
Model : facebook/bart-large-cnn
Input : BLIP caption as plain text
Output: Concise bullet-point summary
│
▼
WhiteboardUI.cs
Animates summary onto the
MR panel using a typewriter effect.
mx_ink/
├── Assets/
│ ├── Scripts/
│ │ ├── AirDraw.cs # Stroke input and LineRenderer management
│ │ ├── WhiteboardCapture.cs # RenderTexture → PNG byte array
│ │ ├── AIWhiteboardManager.cs # Hugging Face API orchestration (BLIP + BART)
│ │ └── WhiteboardUI.cs # MR panel UI and typewriter animation
│ ├── Resources/
│ │ └── ApiConfig.json # API token (git-ignored, never committed)
│ ├── Materials/ # InkMat material
│ └── Prefabs/ # LinePrefab
├── Packages/
│ └── manifest.json # XR Toolkit, OpenXR, TMP (auto-resolved)
├── .gitignore
├── LICENSE
└── README.md
| Symptom | Resolution |
|---|---|
| HTTP 503 — "Model loading" | The Hugging Face free tier cold-starts models. Wait ~20 seconds and retry. |
| Ink strokes not visible | Confirm LinePrefab is assigned in the AirDraw component inspector. |
| "No HF token" error in console | Verify ApiConfig.json contains the hf_api_token key with no surrounding spaces. |
| BART returns an empty summary | The BLIP caption may be too short (<30 characters). The BLIP caption is displayed as a fallback. Try drawing more content. |
TMP namespace errors on compile | Window → Package Manager → locate TextMeshPro → Install. |
This project is proprietary. Copying, redistribution, or modification of any kind is strictly prohibited without explicit written permission from the author. See LICENSE for full terms.
C#
74.8%
ShaderLab
21.5%
HLSL
3.7%