본문으로 건너뛰기
cccskills
무료GitHub에 공개한국어 소개

VideoEssay

자료와 관점을 바탕으로 내레이션이 있는 영상 에세이를 만들거나, 게시물·아이디어·기능을 짧은 해설 영상으로 제작합니다. 블로그는 작성자의 녹음이나 음성 복제본으로 읽어 영상화하고, 결과를 검토한 뒤 받을 수 있습니다.

원문원문 설명 보기

Turns content plus a stance into a video essay narrated by the DA, any post, idea or feature plus a length into a short DA-narrated explainer video, or the author's own audio reading of their blog post (a recording or their voice clone) into a finished video of that post, with scripted visuals rendered on HyperFrames, presence layer, rendered and read back. USE WHEN video essay, explainer video, short video about this post, N-minute video of my blog post, make a video about this, respond to this video, argue against this in a video, debate this, video response, DA video, narrated video, turn this essay into a video, react to this interview, make a video from my audio, I recorded myself reading the post, turn this post into a video, video from my voice clone, audio to video. NOT FOR the user's camera footage or clips (Video), audio-only podcast cuts (Video), one-off animation (HyperFrames).

danielmiessler/LifeOS스타 19,635(GitHub 19,635 + cccskills 0)
연동 도구YouTube

실행 점수 미검증

설치 방법 보기

이럴 때 유용합니다

  • 인터뷰에 답하는 영상 에세이를 만들 때
  • 기사나 기능을 짧은 영상으로 소개할 때
  • 녹음 음성으로 블로그를 영상화할 때
  • 음성 복제본으로 블로그를 읽는 영상을 만들 때

한국어 소개

할 수 있는 일

VideoEssay는 자료를 바탕으로 내레이션이 있는 영상을 제작합니다. 영상 에세이 모드에서는 먼저 관점에 따른 주장을 글로 정리하고, 확인을 거친 뒤 영상 구성과 대본을 만들고 렌더링합니다. 특정 입장을 내세우지 않고 게시물, 아이디어, 기능을 지정된 길이의 짧은 해설 영상으로 만드는 것도 가능합니다. 다른 제작 방식으로 블로그 글을 작성자의 녹음, 작성자 음성 복제본 또는 DA의 낭독으로 영상화할 수 있습니다. 블로그 페이지와 낭독 중인 부분에 맞춘 영상을 함께 구성합니다. 완성된 영상은 내용과 화면을 검토한 뒤 받을 수 있습니다.

이럴 때 유용합니다

인터뷰나 영상에 대한 의견을 영상으로 전하거나, 기사나 기능을 짧게 소개할 때 사용할 수 있습니다. 블로그 내용에 맞춘 영상을 만들고 싶거나, 글을 직접 읽어 녹음한 음성을 영상에 넣고 싶을 때도 적합합니다.

사용 예시

  • “이 인터뷰에 반박하는 영상 에세이를 만들어 줘.”
  • “최신 기사를 2분짜리 해설 영상으로 만들어 줘.”
  • “내가 녹음한 음성으로 이 블로그 글을 영상으로 만들어 줘.”

주의 사항

처음 사용할 때 설정이 필요합니다. 음성 합성에는 Fish Audio를 사용합니다. 작성자의 음성 복제본을 쓰려면 관련 음성 ID와 API 키도 필요합니다. 이 스킬은 영상을 공개하지 않으며, 공개는 별도의 절차로 진행합니다.

이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.

문서 점검

AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.

안전성전송·삭제·명령 실행 등을 명시하고 있는가
A양호작업은 검토 상태에서 멈추며 영상 업로드나 공개를 하지 않습니다.
도입의 용이성필요한 도구나 API 키가 적고 적혀 있는가
B일부 부족초기 설정과 Fish Audio가 필요하고 음성 복제에는 ID와 키도 필요하며 세부 사항은 Setup.md에 있습니다.

점수에는 넣지 않았습니다. 2026년 10월 28일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.

평가가 다르다고 생각되면 재검토를 요청하기

어느 항목이 왜 다르다고 생각하는지 적어 주세요. 로그인은 필요 없습니다. SKILL.md와 대조해 평가를 다시 만들고 이곳에 반영합니다.

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

포함된 파일(43)

  • SKILL.md14.3 KB
  • Intents/Argue.md5.2 KB
  • Intents/Explainer.md7.3 KB
  • Intents/Full.md1.4 KB
  • Intents/Produce.md6.9 KB
  • Intents/Script.md3.8 KB
  • Intents/Voice.md10.1 KB
  • References/ScriptSchema.md4.3 KB
  • References/Style.md18.7 KB
  • References/Tools.md5.5 KB
  • Setup.md14.5 KB
  • Tools/.gitignore30 B
  • Tools/Align.ts6.6 KB
  • Tools/Build.ts20.8 KB
  • Tools/Capture.ts65.3 KB
  • Tools/Clean.ts21.7 KB
  • Tools/Compose.ts14.9 KB
  • Tools/CompositionTypes.ts5.5 KB
  • Tools/Describe.ts8.4 KB
  • Tools/DesignAudit.ts132.0 KB
  • Tools/DiagramLayout.ts29.0 KB
  • Tools/EssayLint.ts6.3 KB
  • Tools/Ingest.ts51.3 KB
  • Tools/Intake.ts3.4 KB
  • Tools/Lib.ts28.3 KB
  • Tools/Meaning.ts20.7 KB
  • Tools/Motion.ts12.1 KB
  • Tools/Narrate.ts24.4 KB
  • Tools/package.json418 B
  • Tools/Page.ts26.1 KB
  • Tools/PagePresence.ts31.8 KB
  • Tools/PageVisuals.ts88.9 KB
  • Tools/PlanBeats.ts4.0 KB
  • Tools/ReadCamera.ts11.2 KB
  • Tools/ReadSync.ts13.3 KB
  • Tools/Run.ts21.0 KB
  • Tools/Score.ts14.6 KB
  • Tools/ScriptLint.ts9.4 KB
  • Tools/Setup.ts11.1 KB
  • Tools/Theme.ts21.9 KB
  • Tools/Thumbnail.ts6.8 KB
  • Tools/tsconfig.json420 B
  • Tools/Verify.ts31.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

VideoEssay

Contents: Ideal State · Intent Routing · Tools · Data & Config · Quality loop · Gotchas · Examples

The DA's own video format, in two modes, each a fully automated production that proves itself before the user sees it. Essay mode argues first, then renders. Voice mode (run.json mode: "voice") turns the author's post, read by their recording, their voice clone or the DA reading their exact words (run.json narrator recorded | clone | da), into a video of the real post page scrolling with the spoken sentence highlighted, inserts directed from what the post argues (LIFEOS/TOOLS/VideoMeaning: MeaningMap, Direction, a two-vendor plan review), and the reader's portrait in the corner badge (the author's, or the DA's on a DA-read run).

Ideal State

  • An essay run argues before it renders: a linted, steelmanned Essay.md with verbatim, correctly attributed quotes reaches the user at the checkpoint (unless the ask skips it), and only then becomes Script.json and a render.
  • A voice run narrates only the author's own words, its page reads like the live post, and every page highlight and insert is timed to the paragraph being spoken.
  • Every render reads itself back before anyone sees it: Out/verify.json all green, and the frames and the Out/review/ studio pass read.
  • The mp4 and thumbnail reach ~/Downloads/<slug>/ only through Deliver.ts, after a passing ArtDirection critique and Proof receipt on those exact bytes.
  • Every run stops in review state; nothing uploads from this skill. Publishing is the user's separate call through Video.

Intent Routing

IntentTriggerFile
Argue"write the argument", "essay first", "what's our take on this", the first step of every new runIntents/Argue.md
Script"script it", "turn the essay into beats", "plan the visuals"Intents/Script.md
Produce"produce it", "render the essay", "make the video from the script", re-renders after an editIntents/Produce.md
Full"respond to this video", "video essay on this", "argue X in a video", raw content plus a stance to argueIntents/Full.md
Voice"make a video from my audio", "I recorded the post", "use my clone to read the post", a post plus a recordingIntents/Voice.md
Explainer"make an explainer video", "a short video about this post / idea / feature", "a 2-minute video of my latest post", any source plus a length with no stance to argueIntents/Explainer.md

Full is Argue → review checkpoint → Script → Produce. The checkpoint after the essay is the default: text is cheap to change and a render is not. The user skips it by saying so in the ask ("straight through", "no review, just make it"). Voice has no essay and no DA-written narration; its narration rule, stages and inserts are in Intents/Voice.md. Explainer writes an Essay.md with kind: explainer (narration only, no opposing quotes) at the length asked for, then runs Script and Produce straight through; its optional YouTube leg (thumbnail on the post's header image, full description, private upload) runs through Video, never this skill.

FileRead when
References/ScriptSchema.mdwriting or linting Script.json
References/Style.mdcomposing frames, the thumbnail, or running DesignAudit (the house design system)
References/Tools.mdrunning or debugging one stage tool directly, choosing a flag, or finding a run's files
Setup.mdfirst run on a machine, any tool stops naming Setup.md, or a Config.json field's meaning or default

Tools

Tools/Run.ts drives every run; the other stage tools, the run layout and the composition files are in References/Tools.md.

ToolContract
Tools/Run.ts --run <slug> [--from stage] [--to stage] [--force] [--music ambient|pulse] [--accept-review-shortfall] [--polish]essay: lint, then narrate → score beside capture, then build, then verify beside thumbnail, then describe once verify passes (other stages wait only for what they read); after any failure no stage starts; voice: clean → align → plan → meaning → lint → capture → build → verify → describe

Data & Config

Everything personal lives in the user zone. First-time setup is Setup.md, and bun skills/VideoEssay/Tools/Setup.ts --check reports what is still missing. With no config file every tool stops and names Setup.md.

  • LIFEOS/USER/CUSTOMIZATIONS/SKILLS/VideoEssay/Config.json: fonts (a missing face is an error, never a fallback), fontFamilies, avatar, runsRoot, blogBaseUrl, possessive, presenter, narrators.da, colors, badge, skipParagraphs and styleFile; each field's meaning and default is in the Setup.md field table, the face roles and colour keys in Setup.md § Faces and colours. Relative paths resolve against the config dir. Never change narrators.da.label for one run; pass --label at ingest instead.
  • LIFEOS/USER/CUSTOMIZATIONS/SKILLS/VideoEssay/public/: created by Setup.ts and linked from Tools/public. It holds the avatar cut-out and staged runs, never the skill tree.
  • Voices: narration is synthesized on Fish Audio (LIFEOS/TOOLS/FishTTS.ts). The DA reads with its one voice, LIFEOS_CONFIG.toml [da.voices.main]: its fish_reference_id names the Fish voice and its fish_speed is the pace (no separate presenter voice since 2026-10-24). The author's clone uses [principal.voice] plus two env ids: FISH_PRINCIPAL_VOICE_ID, the Fish clone itself, and ELEVENLABS_PRINCIPAL_VOICE_ID, the id narration recognizes as a clone read. Key: FISH_API_KEY. Fish applies the pace itself, so no chunk is stretched afterward. Setup.md § LIFEOS_CONFIG.toml and § Accounts and secrets have the details.
  • Names: the badge label defaults to the first word of principal.name and the reader to the DA display name, both from LIFEOS_CONFIG.toml. A DA-read badge shows READ BY <READER> · <POSSESSIVE> AI (THEIR AI unless Config.json possessive says otherwise); a post the DA wrote itself (--label <DA NAME> at ingest) reads WRITTEN AND READ BY <READER>. Neither ever carries a voice-vendor logo or a clone credit.
  • Pronunciations (optional): LIFEOS/USER/PRINCIPAL/PRONUNCIATIONS.json when present, plus a per-run pronunciations.json, applied to spoken text only.
  • Capture (required for voice runs and capture inserts) drives the Interceptor test profile whose context id is INTERCEPTOR_TEST_CONTEXT_ID in LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Interceptor/preferences.env; Capture.ts stops naming that file when it is missing.
  • Run.ts refuses a run dir under the config root or the user-data repo.

Quality loop

Before the critique, every render passes the Assay video eval set (video-eval, skills/Assay/Tools/VideoEval.ts) in Run.ts's eval stage, as each intent's ## Evals section declares it; a blocking result fails the run.

Nothing this skill produces reaches the user as a first draft. The artifact goes through Skill("ArtDirection"): a direction council before new or large work, then the cross-vendor critique panel (skills/ArtDirection/Tools/Critique.ts) scores it against the rubric and names defects (for a run with a Meaning/Direction.rendered.json, pass --direction <run>/Meaning/Direction.rendered.json so each beat is also judged against its own rationale), then this skill iterates on those defects until the bar or reports the shortfall. Record the user's verdict with skills/ArtDirection/Tools/Calibrate.ts.

Hand-over is skills/ArtDirection/Tools/Deliver.ts. It refuses without a passing critique of those exact bytes and a passing Proof receipt (skills/Assay/Tools/Proof.ts run --artifact <file>), and it writes the delivery receipt the gate reads. Critique Out/essay.mp4 with --out <run> so Critique.json sits one level above it, then run Deliver.ts --artifact <run>/Out/essay.mp4 --critique <run>/Critique.json --to ~/Downloads/<slug>/. The thumbnail ships as the ≤ 2 MB q85 JPEG (Intents/Produce.md), critiqued and delivered the same way.

Gotchas

These change what a run does. Failures the tools already handle are documented at their fix sites in Tools/ (the Capture.ts header, Ingest.ts, Clean.ts, Narrate.ts, Build.ts, Page.ts, Verify.ts); read those when debugging that tool.

  • Tools/public must be the symlink into the USER store, never a real directory. A stray empty public/ dir (left behind by moving the store, for one) makes every Build and Setup fail on the publicDir invariant; delete it and let Setup.ts recreate the link.
  • Writing the skill's own files from a Bash heredoc trips the taint guard when the session has read outside content. Use the file tool for intent files in a session that has ingested a transcript.
  • HyperFrames check fails on text layered under a chapter card (content_overlap) unless both card text blocks carry data-layout-allow-overlap; the attribute is not inherited.
  • Narration's word timings come from Fish Audio's timestamped speech (FishTTS.ts) on the model TTS_MODEL names (CROSS_VENDOR.fishVoice). Do not switch TTS_MODEL without re-probing that the new model still returns word timings; captions and beat timing depend on them.
  • Interceptor's default screenshot is a DOM render that draws every web font in Times. Capture.ts embeds the page's loaded faces and replaces post.png only once a marker pass proves the web fonts drew. DOM renders still miss ::before/::after content and mask-image icons (a nav's arrow glyphs, say). --pixel shows all of it, but through Capture.sh it is JPEG quality 50, which breaks the exact-colour marker pass (Capture.test.ts covers the fallback-face judgment).
  • HyperFrames' own pre-render check measures text contrast (WCAG AA 4.5:1) and text overlap at sampled times, and refuses the render (white text on a mid-tone coloured header can fall under 4.5:1; a result wider than the space past its stop can overlap a lane label mid-build). Text colours come through readableOn() against the run's own ground, and DesignAudit measures at settle only, so run the seam check on the staged project when a render is refused; its raw JSON (hyperframes check <dir> --json) names the element, colours and time.
  • The rendered mp4 comes out quieter than the staged narration.wav, inside the HyperFrames render seam. Build.ts replaces the mp4's audio with exactly what the composition plays; voice renders fail Verify's −14 ± 1 LUFS if that replacement is skipped (Build.test.ts "delivered loudness").
  • Embedded frames (tweets, videos, widgets) never draw in the DOM-render capture, and never lay out in a hidden tab (they read "LOADING TWEET…" for the whole video). Capture.ts shoots each embed in a headless copy of the pinned browser and pastes the pixels in; loading markers must clear within 30 s or the capture fails, and it never writes a loading state. A link card taller than the reading band is never whole at reading zoom; show it with a screenshot insert of the post itself, selected by the card's own link.

Examples

Example 1: respond to an interview

User: "Make a video essay answering this interview — I disagree with most of it: <youtube url>"
→ Full: Intake pulls the transcript; Argue writes Essay.md (quotes lint-verified, steelman, disagreement, argument), adversarial read, plus the optional writing audits when installed
→ checkpoint: the essay is shown; on "go", Script.json is written and linted
→ Produce: verify.json green, frames read; mp4 and thumbnail delivered through Deliver.ts and the description copied, all in ~/Downloads/<slug>/

Example 2: the DA reads a new post

User: "DA-read video of my new post on composting"
→ Voice: Ingest --narrator da; the post's own words narrated, its page scrolling with the spoken sentence highlighted, embeds and link cards as on the live page
→ meaning-directed inserts on the paragraphs they illustrate; verify.json green; critiqued and delivered to ~/Downloads/<slug>/

Example 3: edit one paragraph after review

User: "Change the ending — softer on the delete-everything advice"
→ Edit Essay.md and the affected beats in Script.json
→ Run.ts --from narrate: only the changed beats re-synthesize; captures stay cached; re-render, re-verify

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

AnnualReports

무료요약 있음

여러 업체와 공공기관의 사이버 보안 보고서를 검색하고 가져와 위협, 랜섬웨어, 침해 통계 등의 추세를 비교합니다. 분석에는 출처별 업체, 연도, 보고서를 표시하고 자료 간 차이도 따로 다룹니다.

  • 분류별 위협 보고서를 찾을 때
  • 특정 업체의 보고서를 가져올 때
  • 여러 업체의 랜섬웨어 동향을 비교할 때
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ApertureOscillation

무료요약 있음

기능이나 구성 요소 자체의 설계 요구와 시스템 전체의 목표를 세 단계로 비교합니다. 설계상의 충돌과 적절한 구현 범위를 정리하고, 제안한 설계가 전체 방향과 맞는지 평가합니다.

  • 서비스나 라이브러리를 분리할지 판단하기
  • 기능 요구와 제품 방향 비교하기
  • 새 구성 요소와 기존 시스템의 정합성 확인하기
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

Aphorisms

무료요약 있음

글의 주제에 맞는 격언과 인용문을 찾아 저자와 선정 이유를 함께 제안합니다. 출처가 있는 인용문을 추가하고, 사상가의 말을 주제별로 조사하며, 사용 기록을 관리해 같은 인용문을 반복하지 않도록 돕습니다.

  • 뉴스레터에 어울리는 인용문 찾기
  • 출처와 함께 중복 없이 인용문 저장하기
  • 주제별로 사상가의 말 조사하기
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

Art

무료요약 있음

블로그 삽화, 기술 도표, 비교 그림, 만화, 아이콘 등을 용도에 맞는 절차로 제작합니다. 구도와 색상, 이미지 모델을 정하고 검토용 이미지를 출력합니다.

  • 블로그 제목 이미지를 만들 때
  • 시스템 구조를 그림으로 설명할 때
  • 비교나 연대표를 시각화할 때
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ArtDirection

무료요약 있음

브리프와 제작 기준에 따라 이미지, 영상, 슬라이드, 사이트 화면 캡처의 시각 품질을 평가합니다. 두 비전 심사자가 점수와 결함 우선순위를 제시하고, 정해진 횟수 안에서 수정을 돕습니다. 평가를 통과한 결과물만 전달할 수 있으며, 사람의 점수와 의견은 별도 기록해 심사 보정에 활용합니다.

  • 이미지 수정 항목의 우선순위 정리
  • 기준에 따라 영상이나 슬라이드 평가
  • 공개 전 시각 품질 점검
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

ArXiv

무료요약 있음

주제, 연구 분야, 논문 ID로 arXiv 논문을 찾고 제목, 저자, 초록, 링크를 정리합니다. 새 논문을 확인하고, 제공되는 경우 AlphaXiv의 AI 생성 개요도 가져옵니다.

  • AI·머신러닝 분야의 새 논문 확인
  • 특정 주제의 논문 검색
  • 논문 ID나 arXiv 주소로 조회
danielmiessler/LifeOS2만2026년 10월 28일 업데이트

danielmiessler의 스킬 모두 보기

이 스킬의 문제 신고