个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Glyph Cast: screen videos, cleaned up. Record your Mac's screen, get a clean MP4: voice cleaned, ums cut, framed and zoomed. Free, part of the Glyph family by fru.dev.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Screen videos, cleaned up. Record your screen on a Mac and get back a clean MP4: the voice cleaned and leveled, the ums and dead air cut, the screen framed on a background with zooms where you click, an intro and outro attached if you want them. Screen recording and framing plus transcript editing, in one free Mac app.
Its page is glyph.fru.dev/cast. Part of the Glyph family by fru.dev: Glyph Studio, Glyph Jot, Glyph Ibis and Glyph Rig, plus two tools, Glyph Arena and Glyph Cast. Formerly called Capture.
brew install ffmpeg whisper-cppThe first recording downloads the models (about 180 MB) to
~/Library/Application Support/Capture/models: whisper base.en, the Silero voice detector,
DeepFilterNet's deep-filter and an RNNoise model.
Needs macOS 15 or later on Apple silicon.
Pick the display and microphone (the meter beside it moves when you speak) and press
Start recording, or Option-Command-R from anywhere. A 3-2-1 countdown runs and the window
gets out of the way. While you record, a bar at the top of the screen shows REC, the time, your
mic live, a mic picker (switch mid-recording), Pause and Resume (Option-Command-P), Restart
(the take goes to the Trash and the countdown runs again) and Stop. A thin red edge runs round
the recorded screen. Neither the bar nor the edge is in the video, and paused time is left out.
Press Option-Command-R again (or Stop). Glyph Cast prepares the recording on its own, about a
minute for every ten recorded:
Clean up with the buttons above the transcript. Each is one click, and a second click undoes it:
Cuts follow the voice's loudness, not only whisper's word times (which run about 0.1 s late): a removed filler goes from its first sound to its last, leaving a natural 0.25 s pause. The waveform under the player shows what is cut in red; click it to play from there. Right-click a word to cut or keep it, or every "uh" at once. "Clean up new recordings automatically" in the inspector does all of it as soon as a recording is ready.
Fine-tune in the transcript if you want: click a word to play from there; Option-click a word
to cut it or bring it back; click one word, Shift-click another, then Cut (or Delete) or
Restore; click a pause chip (2.4s) to cut or keep that pause; Reset edits goes back to
the automatic cut.
The inspector on the right is remembered for every recording after: export size (1080p, 1440p, 4K), the background (18 wave wallpapers drawn for the app, your desktop picture, any image, or no frame), padding, corners, shadow, zoom on clicks and how far, click rings, and intro and outro clips. The preview updates as you change them.
Export MP4. The file goes to ~/Movies/Capture/Exports/<recording>.mp4 with a matching
.srt of the kept words: H.264 High, 60 fps, 12 Mbps at 1080p (24 at 1440p, 45 at 4K), AAC
192 kbps stereo.
Recordings live in ~/Movies/Capture/<date time>/: screen.mov (HEVC, full Retina resolution),
mic.caf, system.caf (if you turned on system sound), events.json (cursor, clicks, screen
activity), edit.json (your cuts and cleanup switches) and work/ (cleaned voice, original voice
for the Studio Sound blend, transcript). Nothing leaves your Mac.
The wallpapers are drawn by scripts/make_wallpapers.py (layered silk waves in gradients) into
assets/wallpapers/. Edit a palette and run it again to change them.
brew install ffmpeg whisper-cpp
./scripts/build.sh --install --run # builds "Glyph Cast.app", signs it, copies it to /Applications, opens it
The bundle id is dev.fru.capture and the data folders keep the Capture name, so an install of
the older Capture keeps its permissions, settings and recordings.
swift build
.build/debug/Capture --selftest # a fake recording with ums and pauses, through process + export
.build/debug/Capture --record-test 8 --speak # records the real screen and mic for 8 s, speaks a line
CAPTURE_ROOT=<folder of recordings> .build/debug/Capture --open "<recording>" --uitest <out dir> [--record-flow] [--appearance dark]
.build/release/Capture --process "<recording>" [--export-only] [--height 1080] [--out <folder>]
--selftest checks the transcript, filler kinds (um, repeats, tics), that nothing is cut until you
clean up, that fillers and a dead pause are then cut and a pause with a click is kept, -14 LUFS,
the export size and length (intro + kept + outro), the frame on its background, captions, the
Studio Sound blend and that system sound reaches the edit, and then transcribes the export to
confirm no filler is left and no real word was clipped.
--uitest drives the real window: it finds each control through the app's own accessibility tree
and presses it. It covers the cleanup buttons, Option-click, Shift-select + Cut, Reset, pause
chips, the waveform, wallpapers and a pixel check of the redrawn preview, toggles, the size picker,
Export, the record page and the shortcut. --record-flow adds the whole loop: Record button,
countdown, recording, stop, processing, editor. Screenshots of each step go to the out dir.
Swift, no packages. ScreenCaptureKit for screen, mic and system sound; AVFoundation to write and to compose; Core Image for every frame; ffmpeg, deep-filter and whisper-cli as tools.
| File | What it does |
|---|---|
Recorder.swift | SCStream to HEVC screen.mov + float mic.caf/system.caf; cursor, clicks, changed-screen area |
Processor.swift | align, denoise, voice chain, loudness, transcribe, find fillers and pauses, edit.json |
Project.swift | the files, the edit model, the cut rules, Style (settings) |
Composer.swift | cuts into an AVComposition, the per-frame renderer (background, shadow, corners, zoom, rings), export, SRT |
App.swift, Views.swift, HUD.swift | window, menu bar, record page, editor, transcript, inspector, recording bar |
SelfTest.swift, UITest.swift | the tests above |
Not built yet: camera bubble, captions burned into the video, a re-rendered smooth cursor, a music bed.
MIT. See LICENSE.