Skip to main content

neuroskill-sleep

NeuroSkill `sleep` and `umap` commands — EXG-based sleep stage classification (Wake/N1/N2/N3/REM) with efficiency and bout analysis, and 3D UMAP projection of session embeddings for spatial comparison. Use when analysing sleep quality or visualising neural state separation between sessions.

설치로 이동

소스 정보

저장소
NeuroSkill-com/neuroloop-py
최근 소스 활동
2026년 3월 4일 18:31
감지된 SKILL.md 언어
영어
스타
4
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
neuroskill-sleep
description
NeuroSkill `sleep` and `umap` commands — EXG-based sleep stage classification (Wake/N1/N2/N3/REM) with efficiency and bout analysis, and 3D UMAP projection of session embeddings for spatial comparison. Use when analysing sleep quality or visualising neural state separation between sessions.
# NeuroSkill `sleep` and `umap` Commands --- ## `sleep` — Sleep Stage Classification Classify EXG epochs into sleep stages (Wake / N1 / N2 / N3 / REM) using relative band-power ratios and simplified AASM heuristics. Auto-range: all sessions from the last 24 hours. By index: `sleep 0` = most recent session, `sleep 1` = previous, etc. ```bash npx neuroskill sleep # auto: last 24h of sessions npx neuroskill sleep 0 # most recent session's sleep data npx neuroskill sleep 1 # previous session npx neuroskill sleep --start 1740380100 --end 1740415510 npx neuroskill sleep --json | jq '.summary' npx neuroskill sleep --json | jq '.analysis' npx neuroskill sleep --json | jq '.summary | {n3: .n3_epochs, rem: .rem_epochs}' ``` **HTTP:** ```bash curl -s -X POST http://127.0.0.1:8375/ \ -H "Content-Type: application/json" \ -d '{"command":"sleep","start_utc":1740380100,"end_utc":1740415510}' | jq '.summary' ``` ### JSON Response ```jsonc { "command": "sleep", "ok": true, "summary": { "total_epochs": 1054, "wake_epochs": 134, "n1_epochs": 89, "n2_epochs": 421, "n3_epochs": 298, "rem_epochs": 112, "epoch_secs": 5 }, "analysis": { "efficiency_pct": 85.2, "onset_latency_min": 12.5, "rem_latency_min": 62.0, "transitions": 38, "awakenings": 11, "stage_minutes": { "wake": 11, "n1": 7, "n2": 35, "n3": 25, "rem": 9 }, "bouts": { "WAKE": { "count": 11, "mean_min": 1.0, "max_min": 3.5 }, "N3": { "count": 6, "mean_min": 4.2, "max_min": 9.0 }, "REM": { "count": 4, "mean_min": 2.3, "max_min": 4.5 } } }, "epochs": [ { "utc": 1740380100, "stage": 0, "rel_delta": 0.18, "rel_theta": 0.21, "rel_alpha": 0.38, "rel_beta": 0.17 } // ... one entry per 5-second epoch ] } ``` > **Stage codes:** `0` = Wake, `1` = N1, `2` = N2, `3` = N3, `4` = REM. ### Hidden Fields (visible only with `--full` or `--json`) | Hidden field | Contents | |---|---| | `epochs[]` | Per-epoch classification for every 5-second window — can be thousands of entries | ```bash npx neuroskill sleep --json | jq '.epochs | length' npx neuroskill sleep --json | jq '.epochs[0]' npx neuroskill sleep --json | jq '[.epochs[] | select(.stage == 3)] | length' # N3 epoch count npx neuroskill sleep --json | jq '[.epochs[] | {utc: .utc, stage: .stage}]' # hypnogram data ``` ### Good Sleep Targets (healthy adult, ~8h) - N3 (slow-wave): 15–25% of total sleep - REM: 20–25% - Sleep efficiency: > 85% - Sleep onset: < 20 min --- ## `umap` — 3D UMAP Projection Compute a 3D UMAP projection of EXG embedding vectors from two sessions. Runs GPU-accelerated UMAP; the CLI polls for progress and prints a live bar. Results are cached so re-running the same ranges is instant. Auto-range: last two sessions (same as `compare`). ```bash npx neuroskill umap # auto: last 2 sessions npx neuroskill umap --a-start 1740380100 --a-end 1740382665 \ --b-start 1740412800 --b-end 1740415510 npx neuroskill umap --json | jq '.result.points | length' npx neuroskill umap --json | jq '.result.points[0]' npx neuroskill umap --json | jq '[.result.points[] | select(.session == "A")] | length' npx neuroskill umap --json | jq '.result.analysis.separation_score' ``` **HTTP (two requests — enqueue then poll):** ```bash # Step 1 — enqueue: JOB=$(curl -s -X POST http://127.0.0.1:8375/ \ -H "Content-Type: application/json" \ -d '{"command":"umap","a_start_utc":1740380100,"a_end_utc":1740382665,"b_start_utc":1740412800,"b_end_utc":1740415510}') JOB_ID=$(echo $JOB | jq '.job_id') # Step 2 — poll until complete: until [ "$(curl -s -X POST http://127.0.0.1:8375/ \ -H "Content-Type: application/json" \ -d "{\"command\":\"umap_poll\",\"job_id\":$JOB_ID}" | jq -r '.status')" = "complete" ]; do sleep 2 done ``` ### JSON Response ```jsonc { "status": "complete", "elapsed_ms": 8432, "result": { "points": [ { "x": 1.23, "y": -0.45, "z": 2.01, "session": "A", "utc": 1740380105, "label": null }, { "x": 1.31, "y": -0.38, "z": 1.94, "session": "A", "utc": 1740380110, "label": "eyes closed" }, { "x": -0.87, "y": 1.34, "z": -1.22, "session": "B", "utc": 1740412805 } ], "n_a": 513, "n_b": 541, "dim": 3, "analysis": { "separation_score": 1.84, // higher = better A/B separation "inter_cluster_distance": 2.31, "intra_spread_a": 0.82, "intra_spread_b": 0.94, "centroid_a": [1.23, -0.45, 2.01], "centroid_b": [-0.87, 1.34, -1.22], "n_outliers_a": 3, "n_outliers_b": 5 } } } ``` ### Hidden Fields | Hidden field | Contents | |---|---| | `result.points[]` | 3D coordinates for every embedding epoch — typically 500–2000+ entries | ```bash npx neuroskill umap --json | jq '.result.points | length' npx neuroskill umap --json | jq '[.result.points[] | select(.session == "B")]' npx neuroskill umap --json | jq '[.result.points[] | select(.label != null)]' # labeled points only ``` > **Interpreting separation score:** > - `> 1.5` — sessions are neurally distinct (different brain states) > - `< 0.5` — similar brain state across both sessions
GitHub에서 보기