An open API service indexing awesome lists of open source software.

https://github.com/nomadamas/lovable-eastsidegunn

πŸ™ ν™”λ©΄ μ½”λ„ˆμ—μ„œ 혼λ°₯ν•˜λŠ” 동건이 β€” Hammerspoon-based microphone-reactive desktop overlay for macOS
https://github.com/nomadamas/lovable-eastsidegunn

desktop-overlay hammerspoon korean lua macos mascot webview

Last synced: about 21 hours ago
JSON representation

πŸ™ ν™”λ©΄ μ½”λ„ˆμ—μ„œ 혼λ°₯ν•˜λŠ” 동건이 β€” Hammerspoon-based microphone-reactive desktop overlay for macOS

Awesome Lists containing this project

README

          

# πŸ™ donggun β€” Hammerspoon Desktop Overlay

[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Platform: macOS](https://img.shields.io/badge/platform-macOS-blue.svg)](https://www.apple.com/macos/)
[![Runtime: Hammerspoon](https://img.shields.io/badge/runtime-Hammerspoon-orange.svg)](https://www.hammerspoon.org/)
[![Lang: Korean primary](https://img.shields.io/badge/lang-ν•œκ΅­μ–΄-red.svg)](#)

> ν™”λ©΄ μ½”λ„ˆμ—μ„œ 쑰용히 혼λ°₯ν•˜λŠ” 동건이. λˆ„κ°€ λ‹€κ°€μ˜€λ©΄ λ“€ν‚¬κΉŒλ΄ ꡳ어버린닀.
> **A microphone-reactive macOS desktop character, built on Hammerspoon + WebView.**


동건이가 μ†ŒμŒμ— 놀라 κ΅³μ—ˆλ‹€κ°€ 천천히 μ§„μ •ν•˜λŠ” 데λͺ¨


🎀 μΌœλ‘” λ§ˆμ΄ν¬μ— μ†ŒμŒμ΄ λ“€μ–΄μ˜€λ©΄ 즉각 κ΅³κ³ , μ‘°μš©ν•΄μ§€λ©΄ 천천히 λ‹€μ‹œ λ¨ΉλŠ”λ‹€ (asymmetric smoothing)


donggun in context: ν™”μž₯μ‹€ μΉΈμ—μ„œ λ„μ‹œλ½ λ¨Ήλ‹€ 듀킨 동건이


ν™”μž₯μ‹€ μΉΈμ—μ„œ 듀킨 동건이 β€” paused μƒνƒœ / λ„μ‹œλ½ / "μ—°μ°¨ = 점심값 μ ˆμ•½"

---

## πŸ“‹ At a glance

| | |
|---|---|
| **Type** | Hammerspoon module β€” Lua entrypoint + WebView |
| **Platform** | macOS (Apple Silicon + Intel) |
| **Dependencies** | [Hammerspoon](https://www.hammerspoon.org/) β‰₯ 1.0, `python3` (Xcode CLT κΈ°λ³Έ 포함) |
| **Permissions** | Accessibility (ν•„μˆ˜), Microphone (μ˜΅μ…˜ β€” μ†ŒμŒ λ°˜μ‘μš©) |
| **Window** | 360 Γ— 360 px, transparent, always-on-top, all Spaces |
| **Hotkeys** | `Cmd+Shift+ {D, R, H, M}` + `Cmd+Shift+Drag` |
| **Network** | `127.0.0.1:8765` localhost only β€” μ™ΈλΆ€ νŠΈλž˜ν”½ 0 |
| **Install** | `./install.sh` (idempotent, init.lua μžλ™ λ°±μ—…) |
| **License** | MIT |

---

## 🎯 What it does

λ™κ±΄μ΄λŠ” ν™”λ©΄ μ½”λ„ˆ(κΈ°λ³Έ: μš°ν•˜λ‹¨)에 λ–  μžˆλŠ” **투λͺ… λ°μŠ€ν¬νƒ‘ 캐릭터**λ‹€. μŒμ‹ 6쒅을 μ•½ 8.5μ΄ˆλ§ˆλ‹€ 랜덀으둜 λ°”κΏ” 먹으며, λ„ˆλ“œ 유머 말풍선을 λ„μš΄λ‹€. **λ§ˆμ΄ν¬κ°€ 켜져 있으면 μ£Όλ³€ μ†ŒμŒμ— 4λ‹¨κ³„λ‘œ λ°˜μ‘**ν•΄ 점점 κ΅³μ–΄κ°€λ‹€κ°€, μ‘°μš©ν•΄μ§€λ©΄ 천천히 λ‹€μ‹œ λ¨ΉκΈ° μ‹œμž‘ν•œλ‹€.

### 6 μŒμ‹ (랜덀 μˆœν™˜)
감자칩 Β· κΉ€λ°₯ Β· ν”Όμž Β· 햄버거 Β· λ„μ‹œλ½ Β· 라면

### 6 μƒνƒœ

| State | Trigger | Animation |
|---|---|---|
| `eating` | default | 1.8s bobble + 0.42s chew |
| `pausing1` | mic avg β‰₯ 7 | mid frame, 80 ms hold |
| `pausing2` | mic avg β‰₯ 13 | mid frame, 80 ms hold |
| `paused` | mic avg β‰₯ 20 | tense bobble + 1.2 s hang time |
| `choking` | ~40 %/8 s ν™•λ₯  | shake + rotate, 2 s lock |
| `changing` | ~35 %/5.5 s ν™•λ₯  | sway + food swap, 1.8 s |

**λΉ„λŒ€μΉ­ smoothing**: λ†€λΌλŠ” λ°©ν–₯은 즉각 (`SMOOTH_UP = 0.25`, μƒˆ κ°’ 75 %), μ§„μ • λ°©ν–₯은 천천히 (`SMOOTH_DN = 0.96`). μžμœ¨μ‹ κ²½κ³„ λ°˜μ‘ λͺ¨λ°©. PAUSED 도달 ν›„ **1.2 s hang time** (마리였 점프 정점 λͺ¨μ‚¬) λ™μ•ˆ κ΅³μ–΄ μžˆλ‹€κ°€ λ‹¨κ³„μ μœΌλ‘œ ν’€λ¦°λ‹€.

---

## πŸš€ Install

```bash
git clone https://github.com/NomaDamas/lovable-eastsidegunn.git
cd lovable-eastsidegunn
./install.sh
```

μ„€μΉ˜ μŠ€ν¬λ¦½νŠΈκ°€ ν•˜λŠ” 일 ([install.sh](install.sh)):

1. `Hammerspoon.app`, `python3` 쑴재 확인
2. `~/.hammerspoon/init.lua` κ°€ 있으면 νƒ€μž„μŠ€νƒ¬ν”„ λΆ™μ—¬ λ°±μ—…
3. `donggun/` β†’ `~/.hammerspoon/donggun/` 둜 볡사 (μžμ‚° 26 개 포함)
4. `~/.hammerspoon/init.lua` 끝에 `require("donggun")` μΆ”κ°€ (이미 있으면 skip β€” **idempotent**)
5. Hammerspoon 이 μ‹€ν–‰ 쀑이면 `hammerspoon://reload` 트리거

μ„€μΉ˜ ν›„ μ‹œμŠ€ν…œ κΆŒν•œ λΆ€μ—¬:

- **System Settings β†’ Privacy & Security β†’ Accessibility β†’ Hammerspoon βœ“** (ν•«ν‚€/λ“œλž˜κ·Έ)
- **System Settings β†’ Privacy & Security β†’ Microphone β†’ Hammerspoon βœ“** (μ†ŒμŒ λ°˜μ‘, μ˜΅μ…˜)

Hammerspoon μžμ²΄κ°€ 처음이라면 λ¨Όμ € μ„€μΉ˜ν•˜μ„Έμš”:

```bash
brew install --cask hammerspoon
open -a Hammerspoon
```

---

## ⌨️ Hotkeys

| Combo | Action |
|---|---|
| `Cmd+Shift+D` | 보이기 / 숨기기 ν† κΈ€ |
| `Cmd+Shift+R` | webview μƒˆλ‘œκ³ μΉ¨ (`donggun.html` μˆ˜μ • ν›„ μ¦‰μ‹œ 반영) |
| `Cmd+Shift+H` | μ½”λ„ˆ μˆœν™˜ β€” μš°ν•˜ β†’ μ’Œν•˜ β†’ μ’Œμƒ β†’ μš°μƒ |
| `Cmd+Shift+M` | 마이크 on / off (회의 μ‹œμž‘ μ „ μ–‘λ³΄μš©) |
| `Cmd+Shift+Drag` | 마우슀둜 동건이 자유 이동 |

ν•«ν‚€κ°€ λ‹€λ₯Έ μ•±κ³Ό μΆ©λŒν•˜λ©΄ [`donggun/init.lua`](donggun/init.lua) 의 `hs.hotkey.bind(...)` 쀄듀을 μˆ˜μ •ν•œ λ’€ 메뉴바 β†’ **Reload Config**.

---

## πŸ—‘οΈ Uninstall

```bash
./uninstall.sh
```

`~/.hammerspoon/donggun/` 디렉토리 μ‚­μ œ + `init.lua` μ—μ„œ `require("donggun")` 라인 제거. λ³€κ²½ μ „ init.lua λŠ” ν•œ 번 더 λ°±μ—…λ©λ‹ˆλ‹€. Hammerspoon.app μžμ²΄λŠ” κ±΄λ“œλ¦¬μ§€ μ•ŠμŒ.

---

## πŸ—‚οΈ Repo structure

```
lovable-eastsidegunn/
β”œβ”€β”€ README.md # μ‚¬μš©μžμš© (ν•œκ΅­μ–΄ primary)
β”œβ”€β”€ AGENTS.md # AI/도ꡬ μ—μ΄μ „νŠΈμš© κ°€μ΄λ“œ
β”œβ”€β”€ CONTRIBUTING.md # 🀝 κΈ°μ—¬ κ°€μ΄λ“œ (μŒμ‹ μΆ”κ°€, 버그 제보 λ“±)
β”œβ”€β”€ LICENSE # MIT
β”œβ”€β”€ .editorconfig # 에디터 whitespace κ·œμΉ™
β”œβ”€β”€ .github/
β”‚ └── ISSUE_TEMPLATE/
β”‚ └── bug_report.md # πŸ› 버그 리포트 ν…œν”Œλ¦Ώ
β”œβ”€β”€ install.sh # idempotent installer β†’ ~/.hammerspoon/donggun/
β”œβ”€β”€ uninstall.sh # safe uninstaller (creates backups)
β”œβ”€β”€ donggun/ # κ·ΈλŒ€λ‘œ ~/.hammerspoon/donggun/ 으둜 볡사됨
β”‚ β”œβ”€β”€ init.lua # Hammerspoon entrypoint (require("donggun"))
β”‚ β”œβ”€β”€ donggun.html # WebView 본체 β€” μƒνƒœ λ¨Έμ‹  + μ˜€λ””μ˜€ 뢄석 + μ• λ‹ˆλ©”μ΄μ…˜
β”‚ └── assets/ # 26 개 sprite PNG (v5)
└── docs/
β”œβ”€β”€ demo.gif # λΉ„λŒ€μΉ­ smoothing μ• λ‹ˆλ©”μ΄μ…˜ (1MB, 320Γ—320)
└── screenshot.png # μ»¨ν…μŠ€νŠΈ μŠ€ν¬λ¦°μƒ·
```
lovable-eastsidegunn/
β”œβ”€β”€ README.md # this file
β”œβ”€β”€ AGENTS.md # AI/도ꡬ μ—μ΄μ „νŠΈμš© κ°€μ΄λ“œ (ν…ŒμŠ€νŠΈΒ·ν™•μž₯·금기)
β”œβ”€β”€ LICENSE # MIT
β”œβ”€β”€ install.sh # idempotent installer β†’ ~/.hammerspoon/donggun/
β”œβ”€β”€ uninstall.sh # safe uninstaller (creates backups)
β”œβ”€β”€ donggun/ # κ·ΈλŒ€λ‘œ ~/.hammerspoon/donggun/ 으둜 볡사됨
β”‚ β”œβ”€β”€ init.lua # Hammerspoon entrypoint (require("donggun") κ°€ 이 파일 λ‘œλ“œ)
β”‚ β”œβ”€β”€ donggun.html # WebView 본체 β€” μƒνƒœ λ¨Έμ‹  + μ˜€λ””μ˜€ 뢄석 + μ• λ‹ˆλ©”μ΄μ…˜
β”‚ └── assets/ # 26 개 sprite PNG (v5)
└── docs/
└── screenshot.png # README 데λͺ¨
```

---

## 🧠 How it works

**μ™œ localhost HTTP μ„œλ²„λ₯Ό μ“°λ‚˜?** WebKit 은 `file://` μ»¨ν…μŠ€νŠΈμ—μ„œ `getUserMedia` λ₯Ό μ°¨λ‹¨ν•œλ‹€. `http://127.0.0.1:*` μ—μ„œ λ„μ›Œμ•Ό 마이크 κΆŒν•œ prompt κ°€ 뜨고 음ν–₯ 뢄석이 κ°€λŠ₯ν•˜λ‹€.

**μ™œ `donggun` λ³€μˆ˜κ°€ global 인가?** Hammerspoon Console μ—μ„œ `donggun:reload()` 같이 라이브 λ””λ²„κΉ…ν•˜λ €λ©΄ global 이어야 ν•œλ‹€. local 둜 두면 webview κ°€ stale HTML 을 작고 놓지 μ•Šμ•„ 디버깅 μ§€μ˜₯에 λΉ μ§„λ‹€.

**`scriptDir()` κ°€ ν•˜λŠ” 일.** `debug.getinfo(1, "S").source` 둜 자기 μžμ‹  파일 경둜λ₯Ό μ•Œμ•„λ‚΄, Python http.server 의 working directory 와 webview 의 μžμ‚° base λ₯Ό 같은 곳에 λ°•λŠ”λ‹€. 덕뢄에 λͺ¨λ“ˆμ΄ `~/.hammerspoon/donggun/` μ™Έ λ‹€λ₯Έ 곳에 깔렀도 λ™μž‘ν•œλ‹€.

---

## πŸ§ͺ Troubleshooting

| 증상 | ν•΄κ²° |
|---|---|
| 동건이가 μ•ˆ λ³΄μž„ | Hammerspoon 메뉴바 β†’ **Console** μ—μ„œ 둜그 확인 |
| `EADDRINUSE :8765` | `lsof -ti:8765 \| xargs kill` 둜 점유 ν”„λ‘œμ„ΈμŠ€ 정리 |
| ν•«ν‚€ μž‘λ™ μ•ˆ 함 | Accessibility κΆŒν•œ λ―ΈλΆ€μ—¬. μ‹œμŠ€ν…œ μ„€μ •μ—μ„œ 켜고 Hammerspoon μž¬μ‹œμž‘ |
| 마이크 prompt μ•ˆ 뜸 | webview κ°€ `file://` 둜 μ—΄λ¦° μƒνƒœ. `./install.sh` λ‹€μ‹œ μ‹€ν–‰ |
| ν’€μŠ€ν¬λ¦° μ•± μœ„μ— μ•ˆ 뜸 | macOS λ³΄μ•ˆ 정책상 일뢀 μ•±(킀체인 λ“±) μœ„μ—λŠ” λͺ» 뜸 β€” 정상 |
| Hammerspoon 이 자꾸 hide 됨 | `application.watcher` κ°€ 0.1 s ν›„ unhide 함. 이게 μ‹«μœΌλ©΄ init.lua 의 ν•΄λ‹Ή watcher μ‚­μ œ |
| ν•œκ΅­μ–΄ 폰트 깨짐 | "Apple SD Gothic Neo" κ°€ μ‹œμŠ€ν…œ 폰트둜 μžˆμ–΄μ•Ό. fallback: Pretendard / Segoe UI |

[`donggun.html`](donggun/donggun.html) 의 webview 우클릭 β†’ **Inspect Element** 둜 JS μ½˜μ†”λ„ μ—΄ 수 있음 (`developerExtrasEnabled = true`).

---

## 🎭 Tone & concept

λ™κ±΄μ΄λŠ” **'ν™”μž₯μ‹€ μΉΈμ—μ„œ λͺ°λž˜ 혼λ°₯ν•˜λŠ” λ„ˆλ“œ'** μ»¨μ…‰μ˜ μžμΊλ‹€. 말풍선은 μ˜λ„μ μœΌλ‘œ:

- **λ„ˆλ“œ 유머** β€” `P = NP 풀리면 인생 풀리지`, `monad = a monoid in the category of endofunctors`, `Tractatus 7번 λͺ…μ œ μ‹€μ²œ 쀑`
- **혼λ°₯ ν˜„μ‹€** β€” `5λΆ„λ§Œ... 5λΆ„λ§Œ`, `λ“€ν‚€λ©΄ 끝μž₯`, `ꡬ급차 λΆ€λ₯Ό μ‚¬λžŒλ„ μ—†μ–΄`
- **개발자 μ½”μ–΄** β€” `PR 리뷰 = μ‚¬νšŒμƒν™œ`, `μž¬νƒμ΄ μΈμƒμ˜ 평화`, `tmux 5λΆ„ν•  = 평화`

말풍선 풀을 손보고 μ‹ΆμœΌλ©΄ [`donggun/donggun.html`](donggun/donggun.html) 의 `THOUGHTS` 객체λ₯Ό νŽΈμ§‘ν•˜λ©΄ 끝. webview 만 reload (`Cmd+Shift+R`) ν•˜λ©΄ μ¦‰μ‹œ 반영.

μƒˆ μŒμ‹ 좔가·버그 제보·PR 등은 [CONTRIBUTING.md](CONTRIBUTING.md) μ°Έκ³ . AI μ—μ΄μ „νŠΈκ°€ 이 repo λ₯Ό 만질 λ•ŒλŠ” [AGENTS.md](AGENTS.md) κ°€ μ§„μ‹€μ˜ μ›μ²œ.

---

## πŸ† μΆœν’ˆ

ν•΄λ‹Ή μž‘ν’ˆμ€ **[NomaDamas](https://github.com/NomaDamas)** μ—μ„œ **[Markr AI](https://makr.ai)** 의 후원을 λ°›μ•„ **변기톀** 에 μΆœν’ˆλœ μž‘ν’ˆμž…λ‹ˆλ‹€. 🚽

---

## πŸ“œ License

[MIT](LICENSE). 캐릭터 μΌλŸ¬μŠ€νŠΈλ„ 자유 μ‚¬μš© β€” 단 동건이 ν‘œμ •μ€ λ³΄μ‘΄ν•΄μ£Όμ„Έμš”.