Not in the top 1,000 by GitHub stars

imraywang/rayskills

Ray 制作的中文 AI Skills:写长文和口播稿、做封面和解说视频、存公众号和 X 草稿。支持 Claude Code、Codex、WorkBuddy。

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

docs/archive/2026-09-22-风格规则旧版/ray-kb/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Local scripts

d2982dd08bca → b57a106e5263

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

docs/archive/2026-09-22-风格规则旧版/ray-writer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Local scripts

d2982dd08bca → b57a106e5263

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

d2982dd08bca → b57a106e5263

A local comparison is unavailable. You can inspect the recorded versions on GitHub.

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-cover/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

d2982dd08bca → b57a106e5263

A local comparison is unavailable. You can inspect the recorded versions on GitHub.

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-explainer/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

d2982dd08bca → b57a106e5263

A local comparison is unavailable. You can inspect the recorded versions on GitHub.

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-kb/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Local scripts

d2982dd08bca → b57a106e5263

A local comparison is unavailable. You can inspect the recorded versions on GitHub.

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-kepu/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Local scripts

First observation → b57a106e5263

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-obsidian/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Local scripts

d2982dd08bca → b57a106e5263

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-wechat/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

d2982dd08bca → b57a106e5263

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-writer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Local scripts

d2982dd08bca → b57a106e5263

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

skills/ray-x-article/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Local scripts

d2982dd08bca → b57a106e5263

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → d2982dd08bca

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit b57a106e52639d74cf05ce420a5f6030d2ac49eb

382GitHub stars
8stars in 7 days
11skills in this repository
98commits in 30 days

Heat

6.7
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 6, 2026382

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

ray-kb

When your agent uses it

把灵感、现场观察或已核验长文变成可直接录制的中文口播:原生快速口播只保留一份母稿,先检索本地知识、再核对近期事实;长文再分发则绑定母稿路径与内容指纹并生成完整口播内容包。也按“停下、听下去、记住、传播”四关审读口播,或对照生成稿与 Ray 的实际录制稿,把稳定差异回写到下一次。用于“这个想法直接做成口播”“把这篇文章改成口播”“审一下这篇口播稿”“对比我录的和你写的”时;不自行增加事实,不自动发布。

What it loads into context

Frontmatter

172 tokens

Always available to the agent

SKILL.md

3,330 tokens

When the skill is activated

Reference documents

3,800 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 固定原则
  2. 选择工作模式
  3. 长文再分发输入门
  4. 先选视频角度
  5. 重写为口播
  6. 口播语气
  7. 长文再分发输出文件
  8. 图片长文接口
  9. 验证与交接
  10. 口播稿审读
  11. 录后对照与学习
  12. 交付要求

Scripts executed separately

  • oral_script_check.py

Files

  • SKILL.mdcore12,084 bytes
  • SKILL.mdcore12,084 bytes
  • SKILL.mdcore12,084 bytes
  • fast-oral.mddoc4,560 bytes
  • oral_script_check.pyruns8,876 bytes
  • recording-feedback.mddoc9,717 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills included

  • ray-kb
  • ray-writer
  • ray
  • ray-cover
  • ray-explainer
  • ray-kb
  • ray-kepu
  • ray-obsidian
  • ray-wechat
  • ray-writer
  • ray-x-article

Repository facts

License
No license detected
Created
Jul 13, 2026
Last pushed
Nov 5, 2026
Forks
50
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 45 notes
  • docs/archive/2026-09-22-风格规则旧版/ray-kb/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • docs/archive/2026-09-22-风格规则旧版/ray-kb/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • docs/archive/2026-09-22-风格规则旧版/ray-writer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-cover/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ray-explainer/assets/styles/guandian/compositions/cta.html:28 Analysis incomplete: physical or joined line exceeds character limit
  • skills/ray-explainer/assets/styles/guandian/compositions/cta.html:29 Analysis incomplete: physical or joined line exceeds character limit
Show all 440 signals by file

docs/archive/2026-09-22-风格规则旧版/ray-kb/oral_script_check.py

  • Executable scriptline 1
    #!/usr/bin/env python3

docs/archive/2026-09-22-风格规则旧版/ray-writer/article_check.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-cover/SKILL.md

  • Access to secretsline 53
    [Credential-related source omitted]

skills/ray-cover/assets/punk/NOTICE.md

  • Network accessline 3
    本目录取自 [adrianpunk/Punk-Skill](https://github.com/adrianpunk/Punk-Skill) 的 `v1.0.0-mit` 标签(commit `0380629`,2026-09-07),遵循 MIT 许可,原文见同目录 `LICENSE`。提示词设计与风格方向:Adrian Punk([@AdrianPunk115](https://x.com/AdrianPunk115))。

skills/ray-cover/scripts/erase_text.py

  • Executable scriptline 1
    Executable file

skills/ray-cover/scripts/gen_cover.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 51
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Network accessline 61
    [Credential-related source omitted]
  • Access to secretsline 61
    [Credential-related source omitted]
  • Network accessline 62
    [Credential-related source omitted]
  • Access to secretsline 62
    [Credential-related source omitted]
  • Network accessline 63
    [Credential-related source omitted]
  • Possible obfuscationline 82
    open(os.path.join(cover_dir, f"raw-{plat}.png"), "wb").write(base64.b64decode(d["data"][0]["b64_json"]))
  • Access to secretsline 167
    [Credential-related source omitted]
  • Access to secretsline 170
    [Credential-related source omitted]

skills/ray-explainer/SKILL.md

  • Access to secretsline 47
    [Credential-related source omitted]

skills/ray-explainer/assets/hf-template/build.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 20
    [Credential-related source omitted]
  • Network accessline 209
    <meta charset="UTF-8" />     <meta name="viewport" content="width={CW}, height={CH}" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 210
    <meta name="viewport" content="width={CW}, height={CH}" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <script src="assets/beats.js"></script>
  • Network accessline 211
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

skills/ray-explainer/assets/hf-template/figures/designer.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 420">

skills/ray-explainer/assets/hf-template/figures/engineer.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 420">

skills/ray-explainer/assets/hf-template/figures/hand.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 270">

skills/ray-explainer/assets/hf-template/host_build.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/assets/hf-template/make_beats.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/assets/huashu/NOTICE.md

  • Network accessline 3
    本目录是 [alchaincyf/huashu-art-motion](https://github.com/alchaincyf/huashu-art-motion) 中“参数化解说片段”部分的拷贝,取自 commit `64cb272`(2026-10-13,上游 v1.0.0;上一次同步是 `f178bd7`,2026-10-08),遵循 MIT 许可,原文见同目录 `LICENSE`。字体各自遵循 SIL OFL 1.1,清单见 `lib/fonts/LICENSES

skills/ray-explainer/assets/huashu/clip.js

  • Executable scriptline 1
    Executable file
  • Network accessline 33
    const u = new URLSearchParams(location.search).get('spec');     if (!u) return fail('没有 spec:render.py --spec 会注入 window.CLIP_SPEC;预览用 clip.html?spec=examples/<名>.json');     spec = await (await fetch(u)).json();
  • Network accessline 34
    if (!u) return fail('没有 spec:render.py --spec 会注入 window.CLIP_SPEC;预览用 clip.html?spec=examples/<名>.json');     spec = await (await fetch(u)).json();     const base = u.replace(/[^/]*$/, '');
  • Network accessline 35
    spec = await (await fetch(u)).json();

skills/ray-explainer/assets/huashu/clips/t1_3b1b.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/clips/t2_keynote_ui.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/clips/t3_finance_chart.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/clips/y1_kurzgesagt.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/clips/y2_vox.js

  • Executable scriptline 1
    Executable file
  • Network accessline 50
    items.forEach((it, i) => {       if (it.kind === 'image') { it.done = it.q.at + 0.6; return; }       const nC = [...(it.q.text || '')].length, next = items[i + 1] ? items[i + 1].q.at : ctx.dur;
  • Network accessline 51
    if (it.kind === 'image') { it.done = it.q.at + 0.6; return; }       const nC = [...(it.q.text || '')].length, next = items[i + 1] ? items[i + 1].q.at : ctx.dur;       it.cps = clamp(nC / Math.max(0.3, next - it.q.at - 0.95 - 0.5), 13, 40);
  • Network accessline 52
    const nC = [...(it.q.text || '')].length, next = items[i + 1] ? items[i + 1].q.at : ctx.dur;
  • Network accessline 53
    it.cps = clamp(nC / Math.max(0.3, next - it.q.at - 0.95 - 0.5), 13, 40);
  • Network accessline 54
    it.done = it.q.at + nC / it.cps + 0.5;

skills/ray-explainer/assets/huashu/clips/y3_whiteboard.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/clips/y4_storytime.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/clips/y5_kinetic_type.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/camera.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/chart.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/collage.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/diagram.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/fonts.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/kit.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/media.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/motion.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/paint.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/palettes.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/toon.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/typo.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/ui.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/huashu/lib/util.js

  • Executable scriptline 1
    Executable file
  • Network accessline 46
    const inflate = async (buf) => new Uint8Array(await new Response(new Blob([buf]).stream().pipeThrough(new DecompressionStream('deflate'))).arrayBuffer()); async function readCmap(url) {   const ab = await (await fetch(url)).arrayBuffer(), d
  • Network accessline 47
    async function readCmap(url) {   const ab = await (await fetch(url)).arrayBuffer(), dv = new DataView(ab), sig = dv.getUint32(0);   let tab = null;
  • Network accessline 48
    const ab = await (await fetch(url)).arrayBuffer(), dv = new DataView(ab), sig = dv.getUint32(0);

skills/ray-explainer/assets/styles/ali/build.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/assets/styles/ali/make_fonts.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Network accessline 2
    # Subset Noto Sans SC Bold / Medium to the glyphs build.py wrote into chars.txt. # usage: bash make_fonts.sh <dir holding NotoSansSC-Bold.otf and NotoSansSC-Medium.otf> # Fonts (OFL): https://github.com/notofonts/noto-cjk/tree/main/Sans/Sub
  • Network accessline 4
    # Fonts (OFL): https://github.com/notofonts/noto-cjk/tree/main/Sans/SubsetOTF/SC

skills/ray-explainer/assets/styles/fenping/build.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/fenping/build_scenes.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/fenping/compositions/s-ent.html

  • Network accessline 20
    function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }     function makeGrid(svgId, 
  • Network accessline 21
    function makeGrid(svgId, C, R, seed, x0, y0, gap) {       const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);       const gE = document.createElementNS(NS, "g"), gN = document.createElement
  • Network accessline 22
    const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);

skills/ray-explainer/assets/styles/fenping/compositions/s-grid1.html

  • Network accessline 35
    function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }     function makeGrid(svgId, 
  • Network accessline 36
    function makeGrid(svgId, C, R, seed, x0, y0, gap) {       const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);       const gE = document.createElementNS(NS, "g"), gN = document.createElement
  • Network accessline 37
    const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);

skills/ray-explainer/assets/styles/fenping/compositions/s-hero.html

  • Network accessline 21
    function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }     function makeGrid(svgId, 
  • Network accessline 22
    function makeGrid(svgId, C, R, seed, x0, y0, gap) {       const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);       const gE = document.createElementNS(NS, "g"), gN = document.createElement
  • Network accessline 23
    const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);

skills/ray-explainer/assets/styles/fenping/compositions/s-mask.html

  • Network accessline 30
    <script>     // 场景从 70.1 秒开始。九条弯曲细管代表滤芯里的通道,固定几条中途被堵     const NS = "http://www.w3.org/2000/svg";
  • Network accessline 31
    // 场景从 70.1 秒开始。九条弯曲细管代表滤芯里的通道,固定几条中途被堵     const NS = "http://www.w3.org/2000/svg";     const paths = document.getElementById("mk-paths");
  • Network accessline 32
    const NS = "http://www.w3.org/2000/svg";

skills/ray-explainer/assets/styles/fenping/compositions/s-stuck.html

  • Network accessline 22
    function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }     function makeGrid(svgId, 
  • Network accessline 23
    function makeGrid(svgId, C, R, seed, x0, y0, gap) {       const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);       const gE = document.createElementNS(NS, "g"), gN = document.createElement
  • Network accessline 24
    const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);

skills/ray-explainer/assets/styles/fenping/compositions/s-term.html

  • Network accessline 13
    function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }     function makeGrid(svgId, 
  • Network accessline 14
    function makeGrid(svgId, C, R, seed, x0, y0, gap) {       const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);       const gE = document.createElementNS(NS, "g"), gN = document.createElement
  • Network accessline 15
    const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);

skills/ray-explainer/assets/styles/fenping/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

skills/ray-explainer/assets/styles/fenping/index.html

  • Network accessline 4
    <meta charset="UTF-8" />     <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

skills/ray-explainer/assets/styles/fenping/lib/perc.js

  • Executable scriptline 1
    Executable file
  • Network accessline 2
    function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }     function makeGrid(svgId, 
  • Network accessline 3
    function makeGrid(svgId, C, R, seed, x0, y0, gap) {       const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);       const gE = document.createElementNS(NS, "g"), gN = document.createElement
  • Network accessline 4
    const NS = "http://www.w3.org/2000/svg", svg = document.getElementById(svgId), rnd = mulberry32(seed);

skills/ray-explainer/assets/styles/fenping/package.json

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/fenping/prep.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/guandian/build.py

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 458
    body = f"""    <svg id="cta-burst" class="burst" viewBox="0 0 800 800" opacity="0"><line x1="400" y1="250" x2="400" y2="10" stroke="{GREEN}" stroke-width="10" stroke-linecap="round" transform="rotate(0 400 400)"/><line x1="400" y1="250" x2=
  • Network accessline 541
    <meta charset="UTF-8" />     <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 542
    <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 543
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

skills/ray-explainer/assets/styles/guandian/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

skills/ray-explainer/assets/styles/guandian/index.html

  • Network accessline 4
    <meta charset="UTF-8" />     <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

skills/ray-explainer/assets/styles/guandian/package.json

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/guandian/prep.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/qingdan/build.py

  • Executable scriptline 1
    Executable file
  • Network accessline 420
    <meta charset="UTF-8" />     <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 421
    <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 422
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

skills/ray-explainer/assets/styles/qingdan/hyperframes.json

  • Network accessline 1
    {   "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 2
    "$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
  • Network accessline 3
    "registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",

skills/ray-explainer/assets/styles/qingdan/index.html

  • Network accessline 4
    <meta charset="UTF-8" />     <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
  • Network accessline 5
    <meta name="viewport" content="width=1080, height=1920" />     <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>     <style>
  • Network accessline 6
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>

skills/ray-explainer/assets/styles/qingdan/package.json

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/qingdan/prep.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/styles/xiaolin/build.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/assets/styles/xiaolin/cut.sh

  • Executable scriptline 1
    #!/bin/bash

skills/ray-explainer/assets/styles/xiaolin/make_bg.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/assets/styles/xiaolin/make_fonts.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Network accessline 4
    set -euo pipefail mkdir -p fontdl assets/fonts B=https://raw.githubusercontent.com
  • Network accessline 5
    mkdir -p fontdl assets/fonts B=https://raw.githubusercontent.com [ -f fontdl/NotoSansSC-Black.otf ] || curl -sL -o fontdl/NotoSansSC-Black.otf $B/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-Black.otf
  • Network accessline 6
    B=https://raw.githubusercontent.com [ -f fontdl/NotoSansSC-Black.otf ] || curl -sL -o fontdl/NotoSansSC-Black.otf $B/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-Black.otf [ -f fontdl/MaShanZheng-Regular.ttf ] || curl -sL -o fontdl/
  • Network accessline 7
    [ -f fontdl/NotoSansSC-Black.otf ] || curl -sL -o fontdl/NotoSansSC-Black.otf $B/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-Black.otf
  • Network accessline 8
    [ -f fontdl/MaShanZheng-Regular.ttf ] || curl -sL -o fontdl/MaShanZheng-Regular.ttf $B/google/fonts/main/ofl/mashanzheng/MaShanZheng-Regular.ttf
  • Network accessline 9
    for w in Medium:500 Bold:700 Black:900; do   f=fontdl/NotoSansSC-${w%%:*}.otf   [ -f $f ] || curl -sL -o $f $B/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-${w%%:*}.otf
  • Network accessline 10
    f=fontdl/NotoSansSC-${w%%:*}.otf   [ -f $f ] || curl -sL -o $f $B/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-${w%%:*}.otf   [ -f assets/fonts/NotoSansSC-${w##*:}.woff ] || pyftsubset $f --unicodes="*" --flavor=woff --output-file=a
  • Network accessline 11
    [ -f $f ] || curl -sL -o $f $B/notofonts/noto-cjk/main/Sans/SubsetOTF/SC/NotoSansSC-${w%%:*}.otf

skills/ray-explainer/assets/styles/xiaolin/make_stamps.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/assets/template/kit.js

  • Executable scriptline 1
    Executable file
  • Network accessline 224
    await Promise.all(['bold 60px "Hannotate SC"', '60px "Hannotate SC"', 'bold 60px "HanziPen SC"'].map(f => document.fonts.load(f, '测试中文')));   if (window.RXO) await RXO.ready;   if (!window.SCRIPT) { try { window.SCRIPT = await (await fetch(
  • Network accessline 225
    if (window.RXO) await RXO.ready;   if (!window.SCRIPT) { try { window.SCRIPT = await (await fetch('script.json')).json(); } catch (e) { /* file:// preview: patterns need the http server (render.js serve) */ } }   paperTex = makePaper();
  • Network accessline 226
    if (!window.SCRIPT) { try { window.SCRIPT = await (await fetch('script.json')).json(); } catch (e) { /* file:// preview: patterns need the http server (render.js serve) */ } }

skills/ray-explainer/assets/template/overlay.js

  • Executable scriptline 1
    Executable file
  • Network accessline 55
    const loadImg = u => new Promise((res, rej) => { const im = new Image(); im.onload = () => res(im); im.onerror = () => rej(u); im.src = u; });   async function hostInit() {     try { const r = await fetch('/host/plan.json'); if (!r.ok) retu
  • Network accessline 56
    async function hostInit() {     try { const r = await fetch('/host/plan.json'); if (!r.ok) return; HOST = await r.json(); } catch (e) { return; }     const A = HOST.avatar; HIMG.base = await loadImg(A.dir + 'base.png');
  • Network accessline 57
    try { const r = await fetch('/host/plan.json'); if (!r.ok) return; HOST = await r.json(); } catch (e) { return; }

skills/ray-explainer/assets/template/patterns.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/assets/template/scenes.example.js

  • Executable scriptline 1
    Executable file

skills/ray-explainer/references/host.md

  • Access to secretsline 24
    [Credential-related source omitted]
  • Network accessline 59
    - **前提**:`heygen` CLI(官方安装脚本 `https://static.heygen.ai/cli/install.sh`,装到 `~/.local/bin`,脚本自带校验和),Ray 自己 `heygen auth login --oauth` 登录(订阅里的 premium credits,Creator 档每月 600)。账号里的头像组「Ray」:Digital Twin look `ce23779e68024ae2bec3482eba810404`(

skills/ray-explainer/references/hyperframes.md

  • Network accessline 31
    - **先列真实素材清单,再写画面**:分镜关之前,按[真实画面优先](real-footage.md)给每一幕找素材,写进 `footage`。找的顺序:   1. **动态**:Ray 自己的录屏 / 口播 / 已发视频;本机实跑(终端、网页操作用 `record_clip.mjs` 或 puppeteer 录屏);产品官方演示和发布会片段;新闻画面;被讨论的那条视频本身的片段。B 站视频 `yt-dlp` 不登录就能下到 1080p,**前提是版本够新**:报 HTTP
  • Network accessline 32
    1. **动态**:Ray 自己的录屏 / 口播 / 已发视频;本机实跑(终端、网页操作用 `record_clip.mjs` 或 puppeteer 录屏);产品官方演示和发布会片段;新闻画面;被讨论的那条视频本身的片段。B 站视频 `yt-dlp` 不登录就能下到 1080p,**前提是版本够新**:报 HTTP 412 就是 yt-dlp 太旧、被风控拦了,不是要登录(2026-10-15、10-17 旧版 2026.02.21 全部 412,2026.08.19 正常
  • Network accessline 39
    素材一律下到 `~/Movies/ray-explainer/<项目>/hf/assets/`(视频工程里),不进 Obsidian vault;来源(链接、作者、日期、授权)记进 `credits.json`;画面里标「来源 · 日期」。缺的素材在分镜表里写明,问 Ray 要(他手机里的截图、录屏常常就有)。 - **股价走势用真实日收盘价**:A 股、港股用东方财富 kline 接口(`push2his.eastmoney.com/api/qt/stock/kline/g
  • Network accessline 40
    - **股价走势用真实日收盘价**:A 股、港股用东方财富 kline 接口(`push2his.eastmoney.com/api/qt/stock/kline/get`,`secid` 沪市 `1.`、深市 `0.`、港股 `116.`),美股用 Yahoo `query1.finance.yahoo.com/v8/finance/chart/<代码>`,存成 `data/<公司>.csv`(`date,close`),抽两三天和另一家对一下。片中写「截至某日收盘」;稿子
  • Network accessline 41
    - **标题和钩子里的数字先核一手数据**:GitHub 星数用 OSS Insight `https://api.ossinsight.io/v1/repos/<owner>/<repo>/stargazers/history?per=day&from=YYYY-MM-DD&to=YYYY-MM-DD`(累计值,末日和 GitHub 实时值对得上就可信)。核出来和 Ray 的标题不一样(“三天 3w”实际是 8 万),在对话里提出并给替代标题,由 Ray 定。
  • Network accessline 45
    - **取材失败按固定顺序兜底**,不要每次现查(2026-10-15《AI 游客》一期四处卡住都是这几类):   - **视频**:先确认 yt-dlp 是新版(`yt-dlp --version` ≥ 2026.08,或直接 `uvx --from yt-dlp@latest yt-dlp`)→ 失败(412 / 403 / 要登录):B 站用 `web_clip.py --bili` 整段取流,其他站用 `web_clip.py --js` 在 Ray 的 Chrome
  • Network accessline 46
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Network accessline 47
    - **书封**:先按 ISBN 取 Amazon 图片 CDN `https://images-na.ssl-images-amazon.com/images/P/<ISBN-10>.01.L.jpg`(要 ISBN-10;拿到 1×1 的空图说明这一版没有,换版次的 ISBN)→ 再试出版社官网 → 最后 Open Library。archive.org、covers.openlibrary.org 在本机常被代理规则走直连后断开(`SSL_ERROR_SYSCALL`)
  • Network accessline 49
    - **带弹窗的新闻页**(广告拦截提示、订阅墙、Cookie 横幅):不要整页截图,改成对正文段落、图表的元素截图(`el.screenshot()`);只隐藏弹窗本身和 `body` 的滚动锁,不要按 class 批量隐藏,a16z 页面就因为隐藏过头把正文也藏没了。   - **每张截图存下来立刻用 Read 看一眼**:空白、只剩弹窗、被裁到半句的当场重截,别等到草图或成片才发现。 - **Wikimedia Commons**:用 API 查 `imageinfo&
  • Network accessline 50
    - **每张截图存下来立刻用 Read 看一眼**:空白、只剩弹窗、被裁到半句的当场重截,别等到草图或成片才发现。 - **Wikimedia Commons**:用 API 查 `imageinfo&iiurlwidth=1920` 拿 `thumburl`(只有标准尺寸能下),curl 必须带 User-Agent,否则返回 HTML 报错页。授权和作者写进项目的 `credits.json`,CC BY-SA 的发布时在简介里署名。 - **会动的网页(交互图解、Web
  • Network accessline 51
    - **Wikimedia Commons**:用 API 查 `imageinfo&iiurlwidth=1920` 拿 `thumburl`(只有标准尺寸能下),curl 必须带 User-Agent,否则返回 HTML 报错页。授权和作者写进项目的 `credits.json`,CC BY-SA 的发布时在简介里署名。
  • Network accessline 54
    - **原声**(采访、任务录音、档案音频):先 `python3 $SK/scripts/cut_clips.py --words <录音> --from <h:m:s> --to <h:m:s>` 拿词级时间戳找准起止,把来源文件和片段写进 `clips[].cut`(`file`、`base`、`segs`,见脚本文件头),再 `cut_clips.py <project>` 一次切好全部 `clips/<id>.wav`(淡入淡出、拼接、响度统一);改片段只改 `se
  • Network accessline 56
    - **配乐(ElevenLabs Music,2026-10-24 起 Ray 更偏好)**:本地配乐被 Ray 说过「盖过人声、节奏不对」,Lex 那期起改用 ElevenLabs Music 按章节作曲。`POST https://api.elevenlabs.io/v1/music`,`model_id: music_v1`,`composition_plan` 里写全片风格(`positive_global_styles` / `negative_global_st

skills/ray-explainer/references/style-refs.md

  • Network accessline 29
    - 来源:《AI巨头们之间的资本混战,到底是个什么情况?》https://www.youtube.com/watch?v=OcKl98ZQbMQ (2026-07,19:28)。抽帧 2026-10-14,12 帧,720p。
  • Network accessline 37
    - 来源:《收割世界20年后,英伟达的护城河没了》https://www.bilibili.com/video/BV1irhB6mEuX (2026-09,13:21)。抽帧 2026-10-14,12 帧,1080p。
  • Network accessline 45
    - 来源:《为什么AI生成视频的运动这么离谱?》https://www.bilibili.com/video/BV1PpkmYQE5b (2024-12,12:23);《AI怎么让NS方程爆炸的?》https://www.bilibili.com/video/BV1jWhD6mEwH (2026-09,41:00,帧文件名 `ns-` 开头)。抽帧 2026-10-14,1080p。
  • Network accessline 53
    - 来源:《Large Language Models explained briefly》https://www.youtube.com/watch?v=LPZh9BOjkQs 。抽帧 2026-10-14,12 帧,720p。
  • Network accessline 61
    - 来源:《The moment we stopped understanding AI [AlexNet]》https://www.youtube.com/watch?v=UZDiGooFs54 (2024-07,17:38)。抽帧 2026-10-14,12 帧,720p。
  • Network accessline 69
    - 来源:《Tragic mistake... Anthropic leaks Claude's source code》https://www.youtube.com/watch?v=mBHRPeg8zPU (2026-04,7:22)。抽帧 2026-10-14,12 帧,720p。
  • Network accessline 77
    - 来源:《連億萬富翁都在聽!他花 9 年讀 400 本傳記,把一人 Podcast 做到極致》 https://youtu.be/OVYhO19IThc (2026-10-19,9:54)。抽帧 2026-10-23,每 10 秒一帧共 57 帧,选 12 帧存档,720p。
  • Network accessline 97
    - `kurzgesagt` · Kurzgesagt《AI Slop Is Destroying The Internet》https://www.youtube.com/watch?v=_zfN9wnPvU0 :高饱和蓝紫扁平插画、一个视觉隐喻撑一镜。构图可学,配色和 IP 相反(成片检查 `qa_video.py` 也会对蓝紫报警)。
  • Network accessline 98
    - `polymatter` · PolyMatter《Why "Learn to Code" Failed》https://www.youtube.com/watch?v=bThPluSzlDU :以实拍素材为主;图表只用一种底色 + 白线,品牌 logo 直接当数据点。
  • Network accessline 99
    - `vox` · Vox《AI can do your homework. Now what?》https://www.youtube.com/watch?v=bEJ0_TVXh-I :拼贴、圆形抠像头像、人名小标签、右上角台标。

skills/ray-explainer/references/styles/ali.md

  • Network accessline 3
    学的是 Ali Abdaal 2026-10 的两期视频: - https://www.youtube.com/watch?v=szVXpM7VVMg
  • Network accessline 4
    - https://www.youtube.com/watch?v=szVXpM7VVMg
  • Network accessline 5
    - https://www.youtube.com/watch?v=BNRfzI6E1Es

skills/ray-explainer/references/styles/fenping.md

  • Network accessline 3
    学的是 Instagram reel https://www.instagram.com/reel/DPoXbzZjb8J/。做法是真人口播打底,按说的内容在三种版式之间切换,配逐词组字幕。

skills/ray-explainer/references/styles/qingdan.md

  • Network accessline 3
    学的是 Brock Mesarich 的 YouTube Shorts《5 个 GitHub 仓库》,https://www.youtube.com/shorts/rxOcBowQcS0 。拆解在知识库 `50-系统/10-文档/清单口播包装拆解.md`。

skills/ray-explainer/references/styles/xiaolin.md

  • Network accessline 3
    学的是小Lin说 2026-09 到 10 月的三期: - 史上最大现金收购案:https://www.youtube.com/watch?v=wu0zS1AuI_E
  • Network accessline 4
    - 史上最大现金收购案:https://www.youtube.com/watch?v=wu0zS1AuI_E
  • Network accessline 5
    - 俄乌打了四年多谁在买单:https://www.youtube.com/watch?v=R1-j8TFlqCo
  • Network accessline 6
    - 特朗普关税被判违法:https://www.youtube.com/watch?v=T7z71yENz94

skills/ray-explainer/references/voice.md

  • Network accessline 25
    | 值 | 是什么 | 要点 | |---|---|---| | `voices.json` 里注册过的名字,例如 `"ray"` | Ray 的复刻音色,直接调 MiniMax API 的 `speech-2.8-hd`(`scripts/minimax_api.py`) | 新项目模板的默认值,语速 1.1(Ray 2026-10-13 定)。需要 `MINIMAX_API_KEY`;国内平台的 key 另设 `MINIMAX_API_HOST=https://api.m
  • Network accessline 26
    |---|---|---| | `voices.json` 里注册过的名字,例如 `"ray"` | Ray 的复刻音色,直接调 MiniMax API 的 `speech-2.8-hd`(`scripts/minimax_api.py`) | 新项目模板的默认值,语速 1.1(Ray 2026-10-13 定)。需要 `MINIMAX_API_KEY`;国内平台的 key 另设 `MINIMAX_API_HOST=https://api.minimax.cn`。国内账号偶尔
  • Network accessline 27
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]

skills/ray-explainer/scripts/NOTICE-video-short.md

  • Network accessline 3
    `review_page.py` and `review.py` (review page), `qa_video.py` (render checks), `cut_retakes.py` (retake / dead-air cutting rules) and `capture_page.py` (page capture) adapt code and ideas from https://github.com/petergyang/video-short
  • Network accessline 4
    cutting rules) and `capture_page.py` (page capture) adapt code and ideas from https://github.com/petergyang/video-short

skills/ray-explainer/scripts/audio_check.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/cap_sheet.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/capture_page.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 2
    """Capture a web page as one tall PNG at the video's width, so its text reflows to fit and no line is cut off at the frame edge; the video then drifts slowly down one complete section of it (never a still screenshot cropped by hand). From P
  • Network accessline 4
    From Peter Yang's video-short capture.py (MIT, https://github.com/petergyang/video-short), with a landscape width.

skills/ray-explainer/scripts/check_clip_slots.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/scripts/check_numbers.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 36
    [Credential-related source omitted]
  • Network accessline 42
    subprocess.run(["ffmpeg", "-loglevel", "error", "-y", "-ss", str(t_from), "-t", str(dur), "-i", WAV, f.name], check=True)         body = {"contents": [{"parts": [{"inline_data": {"mime_type": "audio/mp3", "data": base64.b64encode(open(f.nam
  • Network accessline 43
    body = {"contents": [{"parts": [{"inline_data": {"mime_type": "audio/mp3", "data": base64.b64encode(open(f.name, "rb").read()).decode()}}, {"text": ASK}]}]}     req = urllib.request.Request(f"https://generativelanguage.googleapis.com/v1beta
  • Network accessline 44
    req = urllib.request.Request(f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key={key}",
  • Network accessline 46
    return json.load(urllib.request.urlopen(req, timeout=60))["candidates"][0]["content"]["parts"][0]["text"].strip()

skills/ray-explainer/scripts/check_setup.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 25
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]
  • Dangerous shell operationline 27
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Dangerous shell operationline 31
    [Credential-related source omitted]
  • Network accessline 31
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]
  • Network accessline 32
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Network accessline 33
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]

skills/ray-explainer/scripts/clone_voice.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 18
    [Credential-related source omitted]
  • Network accessline 48
    demo = minimax_api.clone(fid, vid, TEST, TTS_MODEL) print("voice_id", vid) if demo: urllib.request.urlretrieve(demo, os.path.join(SAMPLES, f"{a.name}_preview.mp3"))
  • Network accessline 50
    if demo: urllib.request.urlretrieve(demo, os.path.join(SAMPLES, f"{a.name}_preview.mp3"))

skills/ray-explainer/scripts/cost.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/cut_clips.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/cut_retakes.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 2
    """Tighten Ray's raw talking-head recording: drop retakes, false starts and dead air, cutting only between words. Approach from Peter Yang's video-short (MIT, https://github.com/petergyang/video-short): keep the last complete take of
  • Network accessline 3
    Approach from Peter Yang's video-short (MIT, https://github.com/petergyang/video-short): keep the last complete take of

skills/ray-explainer/scripts/gate_breaths.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/gen_bgm.py

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    (timeline.json duration + 6 s, so the tail can fade). Instrumental only. - Writes <project>/bgm/<name>_<seed>.wav plus listen/<...>.m4a for Ray to audition. ~4 min for 3 × 3-minute tracks on an M4 Pro. Install once: git clone https://github
  • Network accessline 9
    - Writes <project>/bgm/<name>_<seed>.wav plus listen/<...>.m4a for Ray to audition. ~4 min for 3 × 3-minute tracks on an M4 Pro. Install once: git clone https://github.com/ACE-Step/ACE-Step-1.5 ~/projects/ACE-Step-1.5 && cd there && uv sync
  • Network accessline 10
    Install once: git clone https://github.com/ACE-Step/ACE-Step-1.5 ~/projects/ACE-Step-1.5 && cd there && uv sync;
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 37
    [Credential-related source omitted]

skills/ray-explainer/scripts/heygen_host.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 53
    while (r := heygen("background-removal", "get", job_id)["data"])["status"] not in ("completed", "failed"): time.sleep(10)         url = r["layers"]["foreground"]; url = url if isinstance(url, str) else url.get("url")         subprocess.run(
  • Network accessline 54
    url = r["layers"]["foreground"]; url = url if isinstance(url, str) else url.get("url")         subprocess.run(["curl", "-sL", "-o", os.path.join(H, f"{name}-foreground.webm"), url], check=True)     return name, s, e
  • Network accessline 55
    subprocess.run(["curl", "-sL", "-o", os.path.join(H, f"{name}-foreground.webm"), url], check=True)

skills/ray-explainer/scripts/host.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 12
    [Credential-related source omitted]
  • Access to secretsline 36
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Network accessline 108
    def h3_call(method, path, body=None):     sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))); import minimax_api as mm     req = urllib.request.Request(mm.HOST + path, json.dumps(body).encode() if body else None, method=method,
  • Network accessline 109
    sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))); import minimax_api as mm     req = urllib.request.Request(mm.HOST + path, json.dumps(body).encode() if body else None, method=method,                                  headers={
  • Network accessline 110
    req = urllib.request.Request(mm.HOST + path, json.dumps(body).encode() if body else None, method=method,
  • Network accessline 111
    [Credential-related source omitted]
  • Access to secretsline 111
    [Credential-related source omitted]
  • Network accessline 112
    try: return json.load(urllib.request.urlopen(req, timeout=120))
  • Network accessline 120
    for _ in range(240):         time.sleep(10); t = h3_call("GET", f"/v2/query/video_generation/{tid}")["task"]         if t["status"] == "succeeded": urllib.request.urlretrieve(t["content"]["url"], out); return t.get("usage", {})
  • Network accessline 121
    time.sleep(10); t = h3_call("GET", f"/v2/query/video_generation/{tid}")["task"]         if t["status"] == "succeeded": urllib.request.urlretrieve(t["content"]["url"], out); return t.get("usage", {})         if t["status"] == "failed": sys.e
  • Network accessline 122
    if t["status"] == "succeeded": urllib.request.urlretrieve(t["content"]["url"], out); return t.get("usage", {})
  • Access to secretsline 154
    [Credential-related source omitted]
  • Network accessline 155
    print(f"Kling 生成段落 {i}({L:.1f}s)…", flush=True)             r = fal_client.subscribe(MODEL, arguments={"image_url": fal_client.upload_file(flat), "audio_url": fal_client.upload_file(wav), "prompt": PROMPT})             urllib.request.urlret
  • Network accessline 156
    r = fal_client.subscribe(MODEL, arguments={"image_url": fal_client.upload_file(flat), "audio_url": fal_client.upload_file(wav), "prompt": PROMPT})             urllib.request.urlretrieve(r["video"]["url"], mp4)             usage[key] = {"mod
  • Network accessline 157
    urllib.request.urlretrieve(r["video"]["url"], mp4)

skills/ray-explainer/scripts/lint_readings.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/make_avatar.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 31
    [Credential-related source omitted]
  • Network accessline 40
    paths = []     for i, im in enumerate(r["images"]):         p = out.format(i=i); urllib.request.urlretrieve(im["url"], p); paths.append(p)
  • Network accessline 41
    for i, im in enumerate(r["images"]):         p = out.format(i=i); urllib.request.urlretrieve(im["url"], p); paths.append(p)     return paths
  • Network accessline 42
    p = out.format(i=i); urllib.request.urlretrieve(im["url"], p); paths.append(p)
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]

skills/ray-explainer/scripts/minimax_api.py

  • Executable scriptline 1
    Executable file
  • Network accessline 3
    [Credential-related source omitted]
  • Access to secretsline 3
    [Credential-related source omitted]
  • Network accessline 4
    Host: MINIMAX_API_HOST (env or ~/.zshrc), default https://api.minimax.io (international). Keys from the
  • Network accessline 5
    mainland-China platform (platform.minimax.cn) only work on https://api.minimax.cn — same paths and fields.
  • Access to secretsline 12
    [Credential-related source omitted]
  • Network accessline 22
    HOST = _env("MINIMAX_API_HOST", "https://api.minimax.io").rstrip("/")
  • Network accessline 25
    def _call(path, body=None, data=None, ctype="application/json", timeout=180):     req = urllib.request.Request(HOST + path, data if data is not None else json.dumps(body).encode(),
  • Network accessline 26
    req = urllib.request.Request(HOST + path, data if data is not None else json.dumps(body).encode(),
  • Network accessline 27
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]
  • Network accessline 28
    r = json.load(urllib.request.urlopen(req, timeout=timeout))

skills/ray-explainer/scripts/mix_bgm.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 22
    [Credential-related source omitted]

skills/ray-explainer/scripts/new_project.sh

  • Executable scriptline 1
    #!/usr/bin/env bash

skills/ray-explainer/scripts/phone_export.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/publish.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 24
    [Credential-related source omitted]
  • Access to secretsline 45
    [Credential-related source omitted]
  • Access to secretsline 55
    [Credential-related source omitted]

skills/ray-explainer/scripts/qa_tts.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/qa_video.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 2
    """Measure a finished render and export frames to look at, before Ray sees it. One command after every render. Idea and the frame exports from Peter Yang's video-short qa.py (MIT, https://github.com/petergyang/video-short); the
  • Network accessline 3
    Idea and the frame exports from Peter Yang's video-short qa.py (MIT, https://github.com/petergyang/video-short); the

skills/ray-explainer/scripts/record_clip.mjs

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/ref_frames.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 17
    [Credential-related source omitted]
  • Network accessline 25
    const c=document.createElement('canvas');c.width=960;c.height=Math.round(960*v.videoHeight/v.videoWidth);c.getContext('2d').drawImage(v,0,0,c.width,c.height); const b=await new Promise(r=>c.toBlob(r,'image/jpeg',.85)); o.push(t.toFixed(0)+'
  • Network accessline 26
    const b=await new Promise(r=>c.toBlob(r,'image/jpeg',.85)); o.push(t.toFixed(0)+'s '+v.videoWidth+'x'+v.videoHeight+' '+await fetch('http://127.0.0.1:%d/save?name='+p+'-'+String(k).padStart(2,'0')+'.jpg',{method:'POST',body:b}).then(r=>r.te
  • Network accessline 27
    o.push(t.toFixed(0)+'s '+v.videoWidth+'x'+v.videoHeight+' '+await fetch('http://127.0.0.1:%d/save?name='+p+'-'+String(k).padStart(2,'0')+'.jpg',{method:'POST',body:b}).then(r=>r.text()).catch(e=>'ERR '+e.message))}return o};
  • Access to secretsline 35
    [Credential-related source omitted]

skills/ray-explainer/scripts/render.js

  • Executable scriptline 1
    Executable file
  • Network accessline 143
    if (mode === 'gate') return gate(path.join(PROJ, arg || 'out.mp4'));   for (const s of SCRIPT.scenes) if (s.grammar && !fs.existsSync(path.join(HUASHU, 'clips', s.grammar + '.js'))) throw new Error(`scene ${s.id}: unknown grammar ${s.gramma
  • Network accessline 144
    for (const s of SCRIPT.scenes) if (s.grammar && !fs.existsSync(path.join(HUASHU, 'clips', s.grammar + '.js'))) throw new Error(`scene ${s.id}: unknown grammar ${s.grammar}`);   const srv = await serve(), port = srv.address().port, base = `h
  • Network accessline 145
    const srv = await serve(), port = srv.address().port, base = `http://127.0.0.1:${port}`;

skills/ray-explainer/scripts/review.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-explainer/scripts/review_page.py

  • Network accessline 1
    """Review page: one player with a scene timeline. Ray pauses (or keeps playing), comments on any frame and clicks 发送. serve() saves the notes as markdown with a still of each commented frame, prints them, and exits. Adapted from Peter Yang'
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    serve() saves the notes as markdown with a still of each commented frame, prints them, and exits. Adapted from Peter Yang's video-short (MIT, https://github.com/petergyang/video-short, scripts/review_page.py): Chinese UI, optional Tailscale
  • Network accessline 3
    Adapted from Peter Yang's video-short (MIT, https://github.com/petergyang/video-short, scripts/review_page.py):
  • Network accessline 49
    .icon-btn:hover { border-color: var(--strong-border); color: var(--strong-txt); } .push { margin-left: auto; } .speed { padding: 3px 22px 3px 10px; border: 1px solid var(--strong-border); border-radius: 999px; background: var(--card) url("d
  • Network accessline 50
    .push { margin-left: auto; } .speed { padding: 3px 22px 3px 10px; border: 1px solid var(--strong-border); border-radius: 999px; background: var(--card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3
  • Network accessline 51
    .speed { padding: 3px 22px 3px 10px; border: 1px solid var(--strong-border); border-radius: 999px; background: var(--card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fi
  • Network accessline 203
    $("send").disabled = true; $("status").textContent = "发送中…";   try {     const r = await fetch("/api/feedback", { method: "POST", headers: { "Content-Type": "application/json" },
  • Network accessline 204
    try {     const r = await fetch("/api/feedback", { method: "POST", headers: { "Content-Type": "application/json" },       body: JSON.stringify({ video: v.getAttribute("src").split("?")[0], comments: state.comments, overall: state.overall.tr
  • Network accessline 205
    const r = await fetch("/api/feedback", { method: "POST", headers: { "Content-Type": "application/json" },
  • Network accessline 217
    setInterval(async () => {   try {     const { version: now } = await (await fetch("/api/version")).json();
  • Network accessline 218
    try {     const { version: now } = await (await fetch("/api/version")).json();     if (version === null) version = now;
  • Network accessline 219
    const { version: now } = await (await fetch("/api/version")).json();
  • Network accessline 372
    server, open_browser = ThreadingHTTPServer(("127.0.0.1", 0), Handler), True     rel = os.path.relpath(page, root)     url = f"http://127.0.0.1:{server.server_port}/" + rel
  • Network accessline 373
    rel = os.path.relpath(page, root)     url = f"http://127.0.0.1:{server.server_port}/" + rel     threading.Thread(target=server.serve_forever, daemon=True).start()
  • Network accessline 374
    url = f"http://127.0.0.1:{server.server_port}/" + rel
  • Network accessline 382
    threading.Thread(target=ts.serve_forever, daemon=True).start()                 servers.append(ts)                 print(f"手机审片(需连着 Tailscale):http://{ip}:{server.server_port}/{rel}", flush=True)
  • Network accessline 383
    servers.append(ts)                 print(f"手机审片(需连着 Tailscale):http://{ip}:{server.server_port}/{rel}", flush=True)             except OSError as e:
  • Network accessline 384
    print(f"手机审片(需连着 Tailscale):http://{ip}:{server.server_port}/{rel}", flush=True)

skills/ray-explainer/scripts/screen_text_check.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/splice_clips.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/storyboard.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/test_hf_anchors.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/test_hf_template.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/tts.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Access to secretsline 97
    [Credential-related source omitted]
  • Network accessline 99
    "generationConfig": {"responseModalities": ["AUDIO"], "speechConfig": {                            "voiceConfig": {"prebuiltVoiceConfig": {"voiceName": VOICE_ID}}}}}).encode()     url = f"https://generativelanguage.googleapis.com/v1beta/mod
  • Network accessline 100
    "voiceConfig": {"prebuiltVoiceConfig": {"voiceName": VOICE_ID}}}}}).encode()     url = f"https://generativelanguage.googleapis.com/v1beta/models/{MODEL}:generateContent?key={key}"     d = json.load(urllib.request.urlopen(urllib.request.Requ
  • Network accessline 101
    url = f"https://generativelanguage.googleapis.com/v1beta/models/{MODEL}:generateContent?key={key}"     d = json.load(urllib.request.urlopen(urllib.request.Request(url, body, {"Content-Type": "application/json"}), timeout=120))     to_wav24k
  • Network accessline 102
    d = json.load(urllib.request.urlopen(urllib.request.Request(url, body, {"Content-Type": "application/json"}), timeout=120))
  • Possible obfuscationline 103
    to_wav24k(base64.b64decode(d["candidates"][0]["content"]["parts"][0]["inlineData"]["data"]), out)
  • Access to secretsline 116
    [Credential-related source omitted]
  • Network accessline 120
    r = fal_client.subscribe(MODEL, arguments={"prompt": text, "voice_setting": vs, "language_boost": "Chinese",                                                "audio_setting": {"format": "mp3", "sample_rate": 32000, "channel": 1}, "output_form
  • Network accessline 121
    "audio_setting": {"format": "mp3", "sample_rate": 32000, "channel": 1}, "output_format": "url"})     to_wav24k(urllib.request.urlopen(r["audio"]["url"], timeout=120).read(), out)     return {"chars": len(text), "ms": r.get("duration_ms", 0)
  • Network accessline 122
    to_wav24k(urllib.request.urlopen(r["audio"]["url"], timeout=120).read(), out)

skills/ray-explainer/scripts/video_frames.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Dangerous shell operationline 10
    rm -rf "$out"; mkdir -p "$out"

skills/ray-explainer/scripts/voxcpm_worker.py

  • Executable scriptline 1
    Executable file

skills/ray-explainer/scripts/web_clip.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 45
    rec.stop();v.pause();await done;const t1=v.currentTime; const meta={url:location.href,title:document.title,start,duration:dur,recorded_from:t0,recorded_to:t1,size:[v.videoWidth,v.videoHeight],mime:mt}; const q='http://127.0.0.1:%d/save?name
  • Network accessline 46
    const meta={url:location.href,title:document.title,start,duration:dur,recorded_from:t0,recorded_to:t1,size:[v.videoWidth,v.videoHeight],mime:mt}; const q='http://127.0.0.1:%d/save?name='+encodeURIComponent(name)+'&meta='+encodeURIComponent(
  • Network accessline 47
    const q='http://127.0.0.1:%d/save?name='+encodeURIComponent(name)+'&meta='+encodeURIComponent(JSON.stringify(meta)); S('upload');return await fetch(q,{method:'POST',body:new Blob(ch,{type:mt})}).then(r=>r.text()).catch(e=>'ERR '+e.message)}
  • Network accessline 48
    S('upload');return await fetch(q,{method:'POST',body:new Blob(ch,{type:mt})}).then(r=>r.text()).catch(e=>'ERR '+e.message)};
  • Network accessline 51
    BILI_JS = r"""window.__clip={state:'wait'};(async()=>{const S=x=>window.__clip.state=x,name='%s',bv='%s',part=%d; const j=async u=>(await fetch(u,{credentials:'include'})).json();
  • Network accessline 52
    const j=async u=>(await fetch(u,{credentials:'include'})).json();
  • Network accessline 53
    const info=(await j('https://api.bilibili.com/x/web-interface/view?bvid='+bv)).data;const cid=(info.pages[part-1]||info.pages[0]).cid;
  • Network accessline 54
    const d=(await j(`https://api.bilibili.com/x/player/playurl?bvid=${bv}&cid=${cid}&qn=80&fnval=16`)).data.dash;
  • Network accessline 55
    const v=d.video.filter(x=>x.codecs.startsWith('avc')).sort((a,b)=>b.height-a.height||b.bandwidth-a.bandwidth)[0]; const a=d.audio.slice().sort((x,y)=>y.bandwidth-x.bandwidth)[0]; for(const [k,s] of [['v',v],['a',a]]){S('download '+k);const 
  • Network accessline 56
    const a=d.audio.slice().sort((x,y)=>y.bandwidth-x.bandwidth)[0]; for(const [k,s] of [['v',v],['a',a]]){S('download '+k);const r=await fetch(s.baseUrl||s.base_url);if(!r.ok)throw new Error(k+' HTTP '+r.status);  const tot=+r.headers.get('con
  • Network accessline 57
    for(const [k,s] of [['v',v],['a',a]]){S('download '+k);const r=await fetch(s.baseUrl||s.base_url);if(!r.ok)throw new Error(k+' HTTP '+r.status);
  • Network accessline 58
    const tot=+r.headers.get('content-length')||0,rd=r.body.getReader(),ch=[];let n=0;  for(;;){const {done,value}=await rd.read();if(done)break;ch.push(value);n+=value.length;window.__clip.progress=k+' '+(n/1048576).toFixed(1)+(tot?'/'+(tot/10
  • Network accessline 59
    for(;;){const {done,value}=await rd.read();if(done)break;ch.push(value);n+=value.length;window.__clip.progress=k+' '+(n/1048576).toFixed(1)+(tot?'/'+(tot/1048576).toFixed(1):'')+' MB'}  S('upload '+k);const t=await (await fetch('http://127.
  • Network accessline 60
    S('upload '+k);const t=await (await fetch('http://127.0.0.1:%d/part?name='+name+'&k='+k,{method:'POST',body:new Blob(ch)})).text();if(!t.startsWith('ok'))throw new Error(t)}
  • Network accessline 61
    const meta={url:'https://www.bilibili.com/video/'+bv+(part>1?'?p='+part:''),title:info.title,owner:info.owner.name,pubdate:new Date(info.pubdate*1000).toISOString().slice(0,10),  size:[v.width,v.height],codecs:[v.codecs,a.codecs],duration:d
  • Network accessline 62
    size:[v.width,v.height],codecs:[v.codecs,a.codecs],duration:d.duration}; S('mux');return (await fetch('http://127.0.0.1:%d/mux?name='+name+'&meta='+encodeURIComponent(JSON.stringify(meta)),{method:'POST'})).text()})() .then(r=>{window.__cli
  • Network accessline 63
    S('mux');return (await fetch('http://127.0.0.1:%d/mux?name='+name+'&meta='+encodeURIComponent(JSON.stringify(meta)),{method:'POST'})).text()})()

skills/ray-explainer/scripts/whole_tts.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 50
    import urllib.request     key = os.environ["ELEVENLABS_API_KEY"]     url = f"https://api.elevenlabs.io/v1/text-to-speech/{ELEVEN[0]}?output_format=mp3_44100_128"
  • Network accessline 51
    [Credential-related source omitted]
  • Access to secretsline 51
    [Credential-related source omitted]
  • Network accessline 52
    url = f"https://api.elevenlabs.io/v1/text-to-speech/{ELEVEN[0]}?output_format=mp3_44100_128"     req = urllib.request.Request(url, data=json.dumps({"text": (TAG + " " + text) if TAG else text, "model_id": ELEVEN[1]}).encode(),              
  • Network accessline 53
    req = urllib.request.Request(url, data=json.dumps({"text": (TAG + " " + text) if TAG else text, "model_id": ELEVEN[1]}).encode(),
  • Network accessline 54
    [Credential-related source omitted]
  • Network accessline 55
    for k in range(4):         try: return urllib.request.urlopen(req, timeout=300).read()         except Exception as e:
  • Network accessline 56
    try: return urllib.request.urlopen(req, timeout=300).read()

skills/ray-kb/references/voice.md

  • Network accessline 17
    (Ray 2026-10-20 定。来源:Kane Kallaway 2026-10-21(UTC)发在 X 上的竖屏口播《现代故事弧》,https://x.com/kanekallaway/status/2112720461453013095 ;拆解时只取结构,不搬他的话。)

skills/ray-kb/scripts/oral_script_check.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-kb/scripts/test_oral_script_check.py

  • Executable scriptline 1
    Executable file
  • Network accessline 137
    f"## 逐字稿\n\n{SPOKEN}\n\n"                 "## 待确认\n\n无\n\n"                 "## 素材与来源\n\n- https://example.com/source\n"
  • Network accessline 138
    "## 待确认\n\n无\n\n"                 "## 素材与来源\n\n- https://example.com/source\n"             )
  • Network accessline 139
    "## 素材与来源\n\n- https://example.com/source\n"

skills/ray-obsidian/assets/vault-template/30-资料/00-待抓取/链接收件箱.md

  • Network accessline 10
    - [ ] https://example.com 可选备注

skills/ray-obsidian/scripts/test_vault_setup.py

  • Executable scriptline 1
    Executable file

skills/ray-obsidian/scripts/vault_setup.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-wechat/scripts/prepare_article.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-wechat/scripts/render_article.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-wechat/scripts/wechat_draft.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 33
    DEFAULT_API_BASE = "https://api.weixin.qq.com/cgi-bin"
  • Access to secretsline 41
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 104
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 106
    [Credential-related source omitted]
  • Access to secretsline 142
    [Credential-related source omitted]
  • Access to secretsline 148
    [Credential-related source omitted]
  • Access to secretsline 150
    [Credential-related source omitted]
  • Access to secretsline 158
    [Credential-related source omitted]
  • Access to secretsline 190
    [Credential-related source omitted]
  • Access to secretsline 409
    [Credential-related source omitted]
  • Access to secretsline 454
    [Credential-related source omitted]
  • Access to secretsline 461
    [Credential-related source omitted]
  • Access to secretsline 527
    [Credential-related source omitted]

skills/ray-wechat/scripts/wechat_egress.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 11
    import time from contextlib import contextmanager from http.client import HTTPSConnection
  • Network accessline 12
    from contextlib import contextmanager from http.client import HTTPSConnection from pathlib import Path
  • Network accessline 13
    from http.client import HTTPSConnection
  • Network accessline 48
    timeout: float, ) -> socket.socket:     sock = socket.create_connection((proxy_host, proxy_port), timeout=timeout)
  • Network accessline 49
    ) -> socket.socket:     sock = socket.create_connection((proxy_host, proxy_port), timeout=timeout)     try:
  • Network accessline 50
    sock = socket.create_connection((proxy_host, proxy_port), timeout=timeout)
  • Possible obfuscationline 60
    b"\x05\x01\x00\x03"
  • Network accessline 145
    def _free_local_port() -> int:     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
  • Network accessline 146
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
  • Network accessline 155
    raise EgressError("fixed egress SSH tunnel exited before it was ready")         try:             with socket.create_connection(("127.0.0.1", port), timeout=0.2):
  • Network accessline 156
    try:             with socket.create_connection(("127.0.0.1", port), timeout=0.2):                 return
  • Network accessline 157
    with socket.create_connection(("127.0.0.1", port), timeout=0.2):
  • Access to secretsline 165
    [Credential-related source omitted]
  • Network accessline 177
    def _verify_public_ip(expected_ip: str, context: ssl.SSLContext) -> str:     request = Request("https://api.ipify.org", method="GET")
  • Network accessline 178
    request = Request("https://api.ipify.org", method="GET")
  • Access to secretsline 194
    [Credential-related source omitted]

skills/ray-wechat/scripts/wechat_images.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 93
    [Credential-related source omitted]
  • Access to secretsline 145
    [Credential-related source omitted]
  • Access to secretsline 148
    [Credential-related source omitted]

skills/ray-writer/references/translation.md

  • Network accessline 37
    source_title: "原文标题" source_author: "原作者署名" source_url: "https://原文地址"
  • Network accessline 38
    source_author: "原作者署名" source_url: "https://原文地址" source_published: 2026-06-30    # 原文发表日期
  • Network accessline 39
    source_url: "https://原文地址"
  • Network accessline 54
    > 本文译自《原文标题》,作者 原作者署名,发表于 2026-06-30。 > 原文地址:https://原文地址
  • Network accessline 55
    > 原文地址:https://原文地址

skills/ray-writer/scripts/article_check.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-x-article/SKILL.md

  • Network accessline 66
    - 状态为 `draft-needs-cover` 时,只补封面并重新验证;不要重写正文或建立第二份草稿。 - 状态已经是 `draft`、但用户提到过去失败时,以当前后台可见状态为准:先核验原草稿,封面确实缺失才补传,不能按旧叙述直接覆盖。 - 没有草稿 URL 时才打开 `https://x.com/compose/articles`,并确认页面存在 `Articles`、`Drafts`、`Published`,当前账号已登录且有 `Write` 入口;再检查 Draf
  • Network accessline 68
    - 没有草稿 URL 时才打开 `https://x.com/compose/articles`,并确认页面存在 `Articles`、`Drafts`、`Published`,当前账号已登录且有 `Write` 入口;再检查 Drafts 中是否有同名文章,有则打开原草稿,不新建。

skills/ray-x-article/references/x-editor-contract.md

  • Network accessline 7
    - 后台:`https://x.com/compose/articles`
  • Network accessline 93
    - https://help.x.com/en/using-x/articles
  • Network accessline 94
    - https://docs.x.com/x-api/posts/create-post

skills/ray-x-article/scripts/prepare_article.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/ray-x-article/scripts/record_draft.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 30
    article = Path(args.article).expanduser().resolve()     cover = Path(args.cover).expanduser().resolve()     if not re.fullmatch(r"https://x\.com/compose/articles/edit/\d+", args.url):
  • Network accessline 31
    cover = Path(args.cover).expanduser().resolve()     if not re.fullmatch(r"https://x\.com/compose/articles/edit/\d+", args.url):         raise ValueError("draft URL must match https://x.com/compose/articles/edit/<id>")
  • Network accessline 32
    if not re.fullmatch(r"https://x\.com/compose/articles/edit/\d+", args.url):
  • Network accessline 33
    raise ValueError("draft URL must match https://x.com/compose/articles/edit/<id>")

skills/ray-x-article/tests/test_prepare_article_tables.py

  • Executable scriptline 1
    Executable file

skills/ray/SKILL.md

  • Network accessline 21
    知识工作台(ray-dashboard,随 [rays-brain-kit](https://github.com/imraywang/rays-brain-kit) 安装,不在本仓库)会把用户排队的 AI 协作请求写进 vault 的 `50-系统/40-自动化/AI任务队列.md`(frontmatter `kind: ai-task-queue`,「## 待处理」下每行 `- [ ] 时间 · 动作 · [[目标笔记]]`)。`/ray` 读上下文时顺手看一眼这个文件;
  • Network accessline 64
    ### 独立仓库成员(ray-skills,装了才路由) 咨询、多模型协作、趋势调研和拼贴 B-roll 已按使用频率移到 [ray-skills](https://github.com/imraywang/ray-skills)。本机装了对应 skill 时照常分发;没装就直接说明并按普通任务处理,不假装调用。
  • Network accessline 65
    咨询、多模型协作、趋势调研和拼贴 B-roll 已按使用频率移到 [ray-skills](https://github.com/imraywang/ray-skills)。本机装了对应 skill 时照常分发;没装就直接说明并按普通任务处理,不假装调用。

skills/ray/references/content-pipeline.md

  • Network accessline 145
    它拒绝几类会让健康检查失明的写法:草稿编辑器地址 `https://x.com/compose/articles/edit/…` 不能当公开链接;没有时区的时间算不出 24 小时到期时间;同一篇稿子在同一平台已经记过另一个公开地址时报错停下,不覆盖。反馈卡只填空不覆盖,已完成的复盘不会被打回 `pending`。

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 16 facts
Signal confidence: 401 facts

and 351 more

Works with

  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.