Transcribe
unlistedby teinam
Transcribe microphone audio in real time via AWS Transcribe and analyze results with AWS Bedrock.
Meeting Transcriber โ Obsidian plugin for real-time speech-to-text via AWS
Capture microphone audio, stream it to AWS Transcribe in real time, save the result as a Markdown note, and analyze it with AWS Bedrock โ all from the Obsidian sidebar.
- Plugin ID:
obsidian-transcribe-plugin - Platform: Desktop only (
isDesktopOnly: true) - License: MIT
๐ฐ๐ท ํ๊ตญ์ด
๊ฐ์
Obsidian ์ฌ์ด๋๋ฐ์์ ๋ง์ดํฌ ์ค๋์ค๋ฅผ ์ค์๊ฐ์ผ๋ก AWS Transcribe Streaming์ ์ ์กํด ํ ์คํธ๋ก ๋ฐ์ ์ ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋งํฌ๋ค์ด ๋ ธํธ๋ก ์ ์ฅํ ๋ค AWS Bedrock ๋ชจ๋ธ๋ก ์์ฝ/๋ถ์ํ ์ ์๋ ์ปค๋ฎค๋ํฐ ํ๋ฌ๊ทธ์ธ์ ๋๋ค.
โ ๏ธ ์ฌ์ฉ ์ ๋ฐ๋์ ํ์ธํ์ธ์ (์ค์ ๊ณ ์ง)
๋ณธ ํ๋ฌ๊ทธ์ธ์ ์ค์นยท์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์ ๋ค ๊ฐ์ง ์ฌํญ์ ๋ฐ๋์ ์ดํดํ๊ณ ๋์ํด์ผ ํฉ๋๋ค.
-
์ธ๋ถ ๋คํธ์ํฌ ์ฌ์ฉ ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋์์ ๋ค์ AWS ์๋น์ค์ ์ธ๋ถ ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํฉ๋๋ค.
- AWS Transcribe Streaming (
transcribestreaming.<region>.amazonaws.com) โ ๋ง์ดํฌ์์ ์บก์ฒํ PCM ์ค๋์ค ์ฒญํฌ๋ฅผ ์ค์๊ฐ ์ ์กํ์ฌ ์ ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ ํฉ๋๋ค. - AWS Bedrock Runtime (
bedrock-runtime.<region>.amazonaws.com) โ ์ ์ฌ๋ ํ ์คํธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ ํํ ํ์ด๋ฐ์ด์ ๋ชจ๋ธ์ ์ ๋ฌํ์ฌ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์์ ํฉ๋๋ค. - AWS Bedrock (
bedrock.<region>.amazonaws.com) โ ์ค์ ํ๋ฉด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
- AWS Transcribe Streaming (
-
AWS ๊ณ์ ๋ฐ ์๊ฒฉ ์ฆ๋ช ํ์ ๋ณธ ํ๋ฌ๊ทธ์ธ์ ๋ ์์ ์ธ AI ์๋ฒ๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ณธ์ธ์ AWS ๊ณ์ ์ ๋ง๋ค๊ณ , IAM access key ID ์ secret access key ๋ฅผ ์ง์ ๋ฐ๊ธยท์ ๋ ฅํด์ผ ํฉ๋๋ค. Transcribe ๋ฐ Bedrock ์๋น์ค ํ์ฑํ(๋ฆฌ์ ๋ณ ๋ชจ๋ธ ์ก์ธ์ค ์น์ธ ํฌํจ)๋ ์ฌ์ฉ์ ์ฑ ์์ ๋๋ค.
-
AWS ์ฌ์ฉ์ ๋ฐ๋ฅธ ๊ณผ๊ธ์ ์ฌ์ฉ์ ๋ถ๋ด AWS Transcribe Streaming ๊ณผ AWS Bedrock ์ ์ข ๋์ ์ ๋ฃ ์๋น์ค์ ๋๋ค. ๋ณธ ํ๋ฌ๊ทธ์ธ์ด ํธ์ถํ๋ ๋ชจ๋ API ์์ฒญ์ ๋ํ ์๊ธ์ ์ ์ ์ผ๋ก ์ฌ์ฉ์์ AWS ๊ณ์ ์ ์ฒญ๊ตฌ๋๋ฉฐ, ํ๋ฌ๊ทธ์ธ ์ ์์๋ ๊ณผ๊ธ ๊ธ์ก์ ๋ํด ์ด๋ ํ ์ฑ ์๋ ์ง์ง ์์ต๋๋ค. ๋น์ฉ ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ AWS Cost Explorer ๋ฐ Budgets ๋ฅผ ํตํด ์ง์ ๋ชจ๋ํฐ๋งํ์ธ์.
-
AWS ์๊ฒฉ ์ฆ๋ช ์ data.json ์ ํ๋ฌธ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค ์ ๋ ฅํ AWS access key ID ๋ฐ secret access key ๋ Obsidian ์ด ๊ด๋ฆฌํ๋ ํ๋ฌ๊ทธ์ธ ๋ฐ์ดํฐ ํ์ผ
<vault>/.obsidian/plugins/obsidian-transcribe-plugin/data.json์ ์ํธํ ์์ด ํ๋ฌธ(JSON) ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๋ค์ ์ฌํญ์ ์ ์ํ์ธ์.- vault ๋๋ ํฐ๋ฆฌ ์ ์ฒด๋ฅผ Git, iCloud, Dropbox, OneDrive, Obsidian Sync ๋ฑ์ผ๋ก ๋๊ธฐํํ๋ ๊ฒฝ์ฐ ์๊ฒฉ ์ฆ๋ช ์ด ํจ๊ป ์ ์กยท๋ฐฑ์ ๋ ์ ์์ต๋๋ค.
- vault ๋ฅผ ํ์ธ๊ณผ ๊ณต์ ํ๊ฑฐ๋ ์์ถํ์ฌ ์ ๋ฌํ ๋
data.json์ด ํฌํจ๋์ง ์๋๋ก ์ฃผ์ํ์ธ์. - AWS ๋ชจ๋ฒ ์ฌ๋ก์ ๋ฐ๋ผ ์ต์ ๊ถํ(least privilege) IAM ์ฌ์ฉ์ ๋๋ ์ญํ ์ ๋ณ๋๋ก ๋ง๋ค๊ณ , ์ ๊ธฐ์ ์ผ๋ก ํค๋ฅผ ๋กํ ์ด์ ํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ
- ์ฌ์ด๋๋ฐ์ ์์/์ค์ง ๋ฒํผ ํ๋๋ก ์ค์๊ฐ ์ ์ฌ ๊ฐ์ยท์ข ๋ฃ
- ์คํธ๋ฆฌ๋ฐ ์ค ๋นจ๊ฐ ํ์ค ๋ น์ ์ธ๋์ผ์ดํฐ + ๋นจ๊ฐ ์ค์ง ๋ฒํผ์ผ๋ก ์ํ ๋ช ํํ ํ์
- Partial result(์ ์ ) ์ Final result(ํ์ ) ๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํ์
- ์ ์ฌ ๋ณด๋์์ ํ ์คํธ ๋๋๊ทธ ์ ํ ๊ฐ๋ฅ (ํธ์ง ๋ชจ๋ ์ง์ ๋ถํ์)
- ์ ์ฌ ๋ณด๋ ์ฐ์๋จ ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ ์์ด์ฝ โ ํ ๋ฒ์ ํด๋ฆญ์ผ๋ก ์ ์ฒด ๋ณธ๋ฌธ ๋ณต์ฌ
- ์ ์ฌ ์ข
๋ฃ ์
YYYY-MM-DD HH-mm.mdํ์์ผ๋ก ๋งํฌ๋ค์ด ๋ ธํธ ์๋ ์ ์ฅ (ํ๋ก ํธ๋งคํฐ ํฌํจ) - ์ต๊ทผ ์ ์ฌ 5๊ฐ ๋ฆฌ์คํธ โ ์ฌ์ด๋๋ฐ ํ๋จ์ ํ์, ํด๋ฆญํ๋ฉด ์ฆ์ ๋ก๋ยทํธ์งยท๋ถ์ ๊ฐ๋ฅ
- ์ ์ฅ๋ ๋ ธํธ์ ์ง์ ํธ์ง(ํ๋ณด์ ) ์ง์
- AWS Bedrock ์ ํตํ ์์ฝยทํค์๋ยท์ฒดํฌ๋ฐ์ค ํ์ ์ก์ ์์ดํ ๋ถ์ ๊ฒฐ๊ณผ ๋ ธํธ์ ๋ถ์ฐฉ
- ์ฌ์ด๋๋ฐ ์ธ๋ผ์ธ ์ปจํธ๋กค โ ์ ์ฌ ์ธ์ด์ Bedrock ๋ชจ๋ธ์ ์ค์ ํญ์ ๊ฑฐ์น์ง ์๊ณ ์ฌ์ด๋๋ฐ์์ ์ฆ์ ์ ํ
- Bedrock ๋ชจ๋ธ ๋๋กญ๋ค์ด โ ์๋ก๊ณ ์นจ ๋ฒํผ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ/์ถ๋ก ํ๋กํ ์๋ ์กฐํ
- ์ปค์คํ ๋จ์ด์ฅ ์๋ ๋๊ธฐํ โ ์ค์ ์์ ๋จ์ด ์ ๋ ฅ ํ ๋๊ธฐํ ๋ฒํผ์ผ๋ก AWS Transcribe์ ์๋ ๋ฑ๋ก
- ์ปค์คํ ๋ถ์ ํ๋กฌํํธ โ ์์ ํ ์คํธ๋ก AI ๋ถ์์ ์ถ๊ฐ ์ง์ ์ ๋ฌ
- ์์ด / ํ๊ตญ์ด UI (์ค์ ์์ ์ ํ)
- ๋ณธ๋ฌธ ๊ธธ์ด ์ต๋ 200,000์(์ฝ 8~12์๊ฐ ํ์) ๋ถ์ ์ง์
์ค์น
์๋ ์ค์น (ํ์ฌ ๊ถ์ฅ)
- ์ด ์ ์ฅ์์ GitHub Releases ํ์ด์ง์์ ์ต์ ๋ฆด๋ฆฌ์ค์
main.js,manifest.json,styles.css๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. - Obsidian vault ๋ด๋ถ์ ๋ค์ ๊ฒฝ๋ก์ ์ธ ํ์ผ์ ๋ณต์ฌํฉ๋๋ค.
<vault>/.obsidian/plugins/obsidian-transcribe-plugin/ - Obsidian ์ ์ฌ์์ํ ๋ค
Settings โ Community plugins์์Transcribe๋ฅผ ํ์ฑํํฉ๋๋ค.
BRAT ์ ํตํ ๋ฒ ํ ์ค์น
- BRAT ํ๋ฌ๊ทธ์ธ์ ์ค์นยทํ์ฑํํฉ๋๋ค.
- BRAT ์ค์ ์์
Add Beta Plugin์ ์ ํํ๊ณ ๋ณธ ์ ์ฅ์ ์ฃผ์๋ฅผ ์ ๋ ฅํฉ๋๋ค.
AWS ์ฌ์ ์ค๋น
1. IAM ์ฌ์ฉ์ ์์ฑ ๋ฐ ์ต์ ๊ถํ ๋ถ์ฌ
AWS ์ฝ์ ๋๋ CLI ๋ก ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ก์ธ์ค(access key) ์ ์ฉ IAM ์ฌ์ฉ์๋ฅผ ์์ฑํ ๋ค ๋ค์ ์ต์ ๊ถํ ์ ์ฑ ์ ๋ถ์ฌํฉ๋๋ค.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TranscribeStreaming",
"Effect": "Allow",
"Action": [
"transcribe:StartStreamTranscription",
"transcribe:StartStreamTranscriptionWebSocket"
],
"Resource": "*"
},
{
"Sid": "BedrockInvokeModel",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel"
],
"Resource": "*"
},
{
"Sid": "BedrockModelDiscovery",
"Effect": "Allow",
"Action": [
"bedrock:ListFoundationModels",
"bedrock:ListInferenceProfiles"
],
"Resource": "*"
},
{
"Sid": "TranscribeVocabulary",
"Effect": "Allow",
"Action": [
"transcribe:CreateVocabulary",
"transcribe:UpdateVocabulary",
"transcribe:GetVocabulary",
"transcribe:DeleteVocabulary"
],
"Resource": "*"
}
]
}
์ค๋ฌด์์๋
Resource๋ฅผ ํน์ Bedrock ๋ชจ๋ธ ARN ์ผ๋ก ์ ํํ์ฌ ๊ถํ ๋ฒ์๋ฅผ ๋ ์ขํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
2. Bedrock ๋ชจ๋ธ ์ก์ธ์ค ์น์ธ
AWS ์ฝ์ โ Bedrock โ Model access ์์ ์ฌ์ฉํ๋ ค๋ ํ์ด๋ฐ์ด์
๋ชจ๋ธ(์: anthropic.claude-3-sonnet-*, anthropic.claude-3-haiku-* ๋ฑ) ์ ์ก์ธ์ค๋ฅผ ์์ฒญยท์น์ธ๋ฐ์์ผ ํฉ๋๋ค.
Claude 4.5 ๊ณ์ด ์ฐธ๊ณ : Claude Sonnet 4.5, Claude Haiku 4.5 ๊ฐ์ ์ต์ ๋ชจ๋ธ์ cross-Region inference profile ์ ํตํด์๋ง ํธ์ถ ๊ฐ๋ฅํฉ๋๋ค. ์ค์ ์ ๋ชจ๋ธ ๋๋กญ๋ค์ด์์ โก ์์ด์ฝ์ด ๋ถ์ ํญ๋ชฉ(์:
global.anthropic.claude-haiku-4-5-20251001-v1:0)์ ์ ํํ์ธ์.
3. ๋ฆฌ์ ์ ํ
Transcribe Streaming ๊ณผ Bedrock ์ด ๋์ผ ๋ฆฌ์ ์์ ๋ชจ๋ ์ง์๋๋ ๊ฐ์ ์ฌ์ฉํ์ธ์. ์ด๊ธฐ ๊ธฐ๋ณธ๊ฐ์ us-east-1 ์
๋๋ค.
์ค์ ๊ฐ์
Settings โ Community plugins โ Transcribe โ Options ์์ ๋ค์ ํญ๋ชฉ์ ๊ตฌ์ฑํฉ๋๋ค.
| ๊ตฌ๋ถ | ํญ๋ชฉ | ์ค๋ช |
|---|---|---|
| ์ธ์ด | Display language | UI ํ์ ์ธ์ด (English / ํ๊ตญ์ด). ์ฒซ ํญ๋ชฉ์ ๋ฐฐ์น๋ฉ๋๋ค. |
| AWS credentials | AWS access key ID | IAM ์ฌ์ฉ์์ access key ID (์ต๋ 128์) |
| AWS secret access key | IAM ์ฌ์ฉ์์ secret access key (์ต๋ 256์, ์ ๋ ฅ์ ๋ง์คํน ํ์) | |
| AWS region | Transcribe ๋ฐ Bedrock ํธ์ถ ๋ฆฌ์ (๊ธฐ๋ณธ๊ฐ us-east-1) | |
| Transcription | Transcription language | ์ ์ฌ ์ธ์ด ์ฝ๋ (ko-KR ๋๋ en-US). ์ฌ์ด๋๋ฐ์์๋ ์ฆ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ |
| Transcript folder | ์ ์ฌ ๋ ธํธ๋ฅผ ์ ์ฅํ vault ๋ด ํด๋ ๊ฒฝ๋ก. ๋น ๊ฐ์ด๋ฉด vault ๋ฃจํธ ์ฌ์ฉ. vault ํด๋ ์๋์์ฑ ์ ๊ณต | |
| Analysis | Bedrock model ID | ๋๋กญ๋ค์ด์์ ์ ํํ๊ฑฐ๋ ์ง์ ์ ๋ ฅ. ์๋ก๊ณ ์นจ ๋ฒํผ์ผ๋ก AWS์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ธ ์๋ ์กฐํ. ์ฌ์ด๋๋ฐ์์๋ ์ฆ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ |
| ๋ถ์ ์ถ๊ฐ ์ง์ | ๋ถ์ ๋ชจ๋ธ์ ์ ๋ฌํ ์ถ๊ฐ ์ง์์ฌํญ (์์ ํ ์คํธ) | |
| Vocabulary | ์ปค์คํ ๋จ์ด ๋ชฉ๋ก | AWS Transcribe๊ฐ ์ธ์ํ ๋จ์ด ๋ชฉ๋ก. ํ ์ค์ ํ๋. 'AWS์ ๋๊ธฐํ' ๋ฒํผ์ผ๋ก ๋ฑ๋ก |
์ฌ์ฉ ๋ฐฉ๋ฒ
- ๋ช
๋ น ํ๋ ํธ ๋๋ ๋ฆฌ๋ณธ ์์ด์ฝ์
Open transcribe view๋ช ๋ น์ผ๋ก ์ฌ์ด๋๋ฐ๋ฅผ ์ฝ๋๋ค. - ์ฌ์ด๋๋ฐ ์๋จ์ ์ธ๋ผ์ธ ๋๋กญ๋ค์ด์์ ์ ์ฌ ์ธ์ด ์ Bedrock ๋ชจ๋ธ ์ ์ ํํฉ๋๋ค. ์ค์ ํญ์ ์ ์ฅํ ๊ฐ์ด ๊ทธ๋๋ก ๋ฐ์๋๋ฉฐ, ์ฌ์ด๋๋ฐ์์ ๋ฐ๊พธ๋ฉด ์ค์ ํญ์๋ ์ฆ์ ๋๊ธฐํ๋ฉ๋๋ค.
- Start streaming ๋ฒํผ์ ๋๋ฌ ๋ง์ดํฌ ๊ถํ์ ํ์ฉํฉ๋๋ค.
- ๋ฐํ๋ฅผ ์์ํ๋ฉด ์ ์ (ํฌ๋ฏธํ ๊ธ์จ) โ ํ์ (์ผ๋ฐ ๊ธ์จ) ์์ผ๋ก ํ ์คํธ๊ฐ ๋์ ๋ฉ๋๋ค. ๋นจ๊ฐ ํ์ค ์ธ๋์ผ์ดํฐ๊ฐ ๋ น์ ์ค์์ ํ์ํฉ๋๋ค.
- Stop streaming (๋นจ๊ฐ ๋ฒํผ) ์ ๋๋ฅด๋ฉด ๋์ ๋ ๋ด์ฉ์ด
YYYY-MM-DD HH-mm.md๋ก ์ ์ฅ๋ฉ๋๋ค. - ์ ์ฌ ๋ณด๋์์ ํ ์คํธ๋ฅผ ๋๋๊ทธํด ์ ํํ๊ฑฐ๋, ์ฐ์๋จ ๐ ์์ด์ฝ์ผ๋ก ์ ์ฒด ๋ณต์ฌํ ์ ์์ต๋๋ค.
- Edit ๋ฒํผ์ผ๋ก ์คํ์๋ฅผ ๊ต์ ํ๊ฑฐ๋, Analyze ๋ฒํผ์ผ๋ก Bedrock ๋ถ์ ๊ฒฐ๊ณผ(์์ฝ, ํค์๋, ๊ฒฐ์ ์ฌํญ, ์ก์ ์์ดํ , ์ฐธ๊ณ ์ฌํญ ์น์ ์ ํ์๋ก ํ์)๋ฅผ ๋ ธํธ ๋์ ์ถ๊ฐํฉ๋๋ค.
- ํ๋จ ์ต๊ทผ ์ ์ฌ ๋ฆฌ์คํธ์์ ์ด์ ๋ ธํธ๋ฅผ ํด๋ฆญํ๋ฉด ์ฆ์ ๋ก๋๋์ด ํธ์งยท๋ณต์ฌยท๋ถ์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ณด์ ๊ถ์ฅ ์ฌํญ
- vault ๋ฅผ Git ์ด๋ ํด๋ผ์ฐ๋ ์๋น์ค๋ก ๋๊ธฐํํ๋ ๊ฒฝ์ฐ,
.obsidian/plugins/obsidian-transcribe-plugin/data.json์ ๋ณ๋๋ก ์ ์ธํ ์ ์๋ค๋ฉด ์ ์ฉ ์ ๊ถํ IAM ํค ์ฌ์ฉ + ์ ๊ธฐ ํค ๋กํ ์ด์ ์ ๋ฐ๋์ ๋ณํํ์ธ์. - access key ๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋์๋ค๊ณ ์์ฌ๋๋ ์ฆ์ AWS ์ฝ์์์ ํด๋น ํค๋ฅผ ๋นํ์ฑํยท์ญ์ ํ์ธ์.
- ๊ณต์ฉ ๋๋ ๊ณต์ ์ปดํจํฐ์์๋ ๋ณธ ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
๋ผ์ด์ ์ค
๊ฐ๋ฐ์ โ ๋ฆด๋ฆฌ์ค ์ ์ฐจ
๋ค์ ๋ฒ์ ์ ๋ฐฐํฌํ ๋๋ npm version ์ ์ฌ์ฉํด ์ธ ํ์ผ(package.json, manifest.json, versions.json)์ ํ ๋ฒ์ ๋๊ธฐํํ ๋ค ํ๊ทธ๋ฅผ ํธ์ํฉ๋๋ค. ํ๊ทธ ํธ์ ์ด๋ฒคํธ๊ฐ GitHub Actions Release ์ํฌํ๋ก์ฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํด ์๋์ผ๋ก ๋ฒ๋ค์ ๋น๋ํ๊ณ main.js, manifest.json, styles.css ๋ฅผ ๋ฆด๋ฆฌ์ค ์์ฐ์ผ๋ก ์
๋ก๋ํฉ๋๋ค.
# 1.0.1 ๋ฑ ๋ค์ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ธฐ (์ปค๋ฐ + ํ๊ทธ ์๋ ์์ฑ, v ์ ๋์ฌ ์์)
npm version 1.0.1 -m "chore(release): %s"
# ์ปค๋ฐ๊ณผ ํ๊ทธ๋ฅผ ํจ๊ป ํธ์
git push --follow-tags origin main
ํ๊ทธ ์ด๋ฆ์ manifest.json.version ๊ณผ ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค(์ํฌํ๋ก์ฐ๊ฐ ๊ฒ์ฆํฉ๋๋ค).
๐บ๐ธ English
Overview
Transcribe is an Obsidian community plugin that streams microphone audio to AWS Transcribe in real time, saves the result as a Markdown note, and lets you analyze the transcript with an AWS Bedrock foundation model โ all from a dedicated sidebar view.
โ ๏ธ Read Before Use โ Required Disclosures
Before installing or using this plugin, you must understand and agree to the following four points.
-
External network usage This plugin calls the following AWS service endpoints to operate:
- AWS Transcribe Streaming (
transcribestreaming.<region>.amazonaws.com) โ sends captured PCM audio chunks in real time and receives transcripts. - AWS Bedrock Runtime (
bedrock-runtime.<region>.amazonaws.com) โ sends the transcript text to a user-selected foundation model and receives the analysis. - AWS Bedrock (
bedrock.<region>.amazonaws.com) โ lists available models in the settings screen.
- AWS Transcribe Streaming (
-
Your own AWS account and credentials are required This plugin does not provide any hosted AI service. You must create your own AWS account, issue your own IAM access key ID and secret access key, and enable the Transcribe and Bedrock services (including per-region model access approval) yourself.
-
You are solely responsible for AWS usage charges AWS Transcribe Streaming and AWS Bedrock are paid, usage-based services. Every API call this plugin makes is billed to your AWS account. The plugin author assumes no responsibility for any charges incurred. Use AWS Cost Explorer and AWS Budgets to monitor spending.
-
AWS credentials are stored in plain text in
data.jsonThe AWS access key ID and secret access key you enter are stored unencrypted (plain JSON) in the plugin data file managed by Obsidian:<vault>/.obsidian/plugins/obsidian-transcribe-plugin/data.jsonBe aware of the following:- If you sync the vault directory via Git, iCloud, Dropbox, OneDrive, Obsidian Sync, etc., your credentials will be transmitted and backed up alongside the vault.
- When sharing or archiving the vault, make sure
data.jsonis excluded. - Following AWS best practices, use a dedicated least-privilege IAM user or role and rotate the keys regularly.
Features
- Start and stop real-time transcription with a single sidebar button
- Red pulsing recording indicator + red stop button for clear state feedback
- Partial and final results rendered with distinct visual styles
- Drag-select text directly on the transcript board (no edit mode needed)
- Clipboard copy icon floating on the transcript board โ one click to copy all
- Auto-save the transcript as
YYYY-MM-DD HH-mm.mdwith YAML front matter - Recent transcripts list (5 items) at the bottom of the sidebar โ click to load, edit, or analyze
- Post-edit the saved transcript directly from the sidebar
- Append AWS Bedrock analysis (summary, keywords, checkbox-style action items) to the note
- Sidebar inline controls โ pick transcription language and Bedrock model directly in the sidebar, no need to open Settings
- Bedrock model dropdown โ refresh button auto-discovers available models and inference profiles
- Custom vocabulary auto-sync โ enter words in settings, click sync to automatically register with AWS Transcribe
- Custom analysis prompt โ add free-form instructions to guide the AI analysis
- English / Korean UI (switch in settings)
- Supports transcripts up to 200,000 characters (~8โ12 hour meetings)
Installation
Manual install (recommended for now)
- Download
main.js,manifest.json, andstyles.cssfrom the latest GitHub Release. - Copy the three files into your vault at:
<vault>/.obsidian/plugins/obsidian-transcribe-plugin/ - Restart Obsidian, then enable Transcribe under
Settings โ Community plugins.
Beta install via BRAT
- Install and enable the BRAT plugin.
- In BRAT, choose
Add Beta Pluginand provide this repository URL.
AWS Prerequisites
1. Create an IAM user with least-privilege permissions
Create a programmatic-access IAM user and attach the following minimal policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "TranscribeStreaming",
"Effect": "Allow",
"Action": [
"transcribe:StartStreamTranscription",
"transcribe:StartStreamTranscriptionWebSocket"
],
"Resource": "*"
},
{
"Sid": "BedrockInvokeModel",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel"
],
"Resource": "*"
},
{
"Sid": "BedrockModelDiscovery",
"Effect": "Allow",
"Action": [
"bedrock:ListFoundationModels",
"bedrock:ListInferenceProfiles"
],
"Resource": "*"
},
{
"Sid": "TranscribeVocabulary",
"Effect": "Allow",
"Action": [
"transcribe:CreateVocabulary",
"transcribe:UpdateVocabulary",
"transcribe:GetVocabulary",
"transcribe:DeleteVocabulary"
],
"Resource": "*"
}
]
}
For production, scope
Resourcedown to specific Bedrock model ARNs.
2. Approve Bedrock model access
In the AWS console, go to Bedrock โ Model access and request/approve access to the foundation model you plan to use (for example anthropic.claude-3-sonnet-*, anthropic.claude-3-haiku-*).
Claude 4.5 note: Claude Sonnet 4.5 and Claude Haiku 4.5 are only available through cross-Region inference profiles. In the model dropdown, select items with the โก icon (e.g.
global.anthropic.claude-haiku-4-5-20251001-v1:0).
3. Pick a region
Choose a region where both Transcribe Streaming and Bedrock are available. The default is us-east-1.
Settings overview
Configure the following under Settings โ Community plugins โ Transcribe โ Options:
| Section | Field | Description |
|---|---|---|
| Language | Display language | UI language (English / ํ๊ตญ์ด). Always the first item. |
| AWS credentials | AWS access key ID | IAM access key ID (max 128 chars) |
| AWS secret access key | IAM secret access key (max 256 chars, masked input) | |
| AWS region | Region used for Transcribe and Bedrock (default us-east-1) | |
| Transcription | Transcription language | Transcription language code (ko-KR or en-US). Also switchable from the sidebar |
| Transcript folder | Folder path inside the vault where transcripts are saved. Empty means vault root. Vault folder autocompletion provided. | |
| Analysis | Bedrock model ID | Select from dropdown or keep custom value. Refresh button auto-discovers models from AWS. Also switchable from the sidebar |
| Custom analysis prompt | Additional instructions for the analysis model (free-form text) | |
| Vocabulary | Custom vocabulary words | Words for AWS Transcribe to recognize. One per line. Click 'Sync to AWS' to register. |
Usage
- Open the sidebar via the
Open transcribe viewcommand or the ribbon icon. - At the top of the sidebar, use the inline dropdowns to pick the transcription language and the Bedrock model. These reflect the values saved in Settings and stay in sync both ways โ changes in the sidebar update the settings tab and vice versa.
- Click Start streaming and grant microphone permission.
- As you speak, partial results appear in a muted style and are replaced by final results. A red pulsing indicator shows recording is active.
- Click Stop streaming (red button) to save the transcript as
YYYY-MM-DD HH-mm.md. - Drag-select text on the transcript board, or click the ๐ icon in the top-right corner to copy all.
- Use Edit to correct errors, or Analyze to append Bedrock-generated meeting minutes (Summary, Keywords, Decisions, Action items, and Notes sections).
- Click any item in the Recent transcripts list at the bottom to instantly load a previous note for editing, copying, or analysis.
Security recommendations
- If you sync your vault, prefer a dedicated low-privilege IAM key and rotate it regularly, because excluding a single file inside
.obsidian/plugins/from sync is often not possible. - If you suspect your access key has been exposed, deactivate and delete it immediately in the AWS console.
- Avoid using this plugin on shared or public computers.
License
Developer โ release flow
To cut a new version, use npm version so that package.json, manifest.json, and versions.json all move together in a single commit, then push the tag. The tag push triggers the GitHub Actions Release workflow, which builds the bundle and uploads main.js, manifest.json, and styles.css as release assets automatically.
# Bump to the next version (creates a commit and tag, no "v" prefix)
npm version 1.0.1 -m "chore(release): %s"
# Push the commit and tag together
git push --follow-tags origin main
The tag name must exactly match manifest.json.version โ the workflow verifies this.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.