Not in the top 1,000 by GitHub stars
JamesDimachkie/legible-film
Video editing for coding agents: cut interviews, podcasts and tutorials from their transcripts, make launch films, caption and mix, and check the delivered file before it ships.
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
skills/legible-film/SKILL.md
Week of Nov 2, 2026 · +61 / −311 lines
Before Not checked yet → After Network or broad shell
b0a206037b5b → 9b7b1cedbc5f
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
This preview is limited. See the complete change on GitHub.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → b0a206037b5b
No earlier version was observed for comparison.
Verified commit 9b7b1cedbc5f97cb163ec5138358aec67a5a73d1
git clone --filter=blob:none --no-checkout https://github.com/JamesDimachkie/legible-film.git .hotskills/jamesdimachkie-legible-film && git -C .hotskills/jamesdimachkie-legible-film checkout --detach 9b7b1cedbc5f97cb163ec5138358aec67a5a73d1
# Copy each selected skill directory from .hotskills/jamesdimachkie-legible-film into .claude/skills/<skill-name>/Heat
5.6- 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
30-day change not yet available: not enough history.
Individual skills in this repository
- legible-film
skills/legible-film
How it works
legible-film
When your agent uses it
Video with picture and sound on one clock: launch films and motion graphics drawn in an engine, social posts, inserts inside footage, sound for a finished picture, cuts and tightening of recordings, an editor's Premiere revisions, quick video conversions, and checking how an export looks or plays. Not for audio-only files, downloading, transcribing or metadata alone.
What it loads into context
Frontmatter
177 tokensAlways available to the agent
SKILL.md
1,536 tokensWhen the skill is activated
Reference documents
153,226 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Gates
- Start with the frame
- Pick the path
- Picture and sound on one clock
- Every path ends the same way
- Hard limits
- First run, commands, scripts
Scripts executed separately
assets/kit/blocks/caption.jsassets/kit/blocks/common.jsassets/kit/blocks/dither.jsassets/kit/blocks/endcard.jsassets/kit/blocks/index.jsassets/kit/blocks/name.jsassets/kit/blocks/number.jsassets/kit/blocks/still.jsassets/kit/blocks/terminal.jsassets/kit/blocks/thread.jsassets/kit/blocks/type.jsassets/kit/blocks/without.jsassets/kit/films/atlasfold/film.jsassets/kit/films/starter/film.jsassets/kit/lf/analyse.jsassets/kit/lf/color.jsassets/kit/lf/ease.jsassets/kit/lf/engine.jsassets/kit/lf/flashmap.jsassets/kit/lf/fx.jsassets/kit/lf/legacy.jsassets/kit/lf/main.jsassets/kit/lf/motion.jsassets/kit/lf/node.jsassets/kit/lf/rng.jsassets/kit/lf/svg.jsassets/kit/lf/text.jsassets/kit/lf/ui.jsscripts/NOTICEscripts/assemble.pyscripts/blank_scan.pyscripts/captions.pyscripts/check.pyscripts/compare_versions.pyscripts/conform.pyscripts/cue_list.pyscripts/cue_onsets.pyscripts/cut.pyscripts/delivery_check.pyscripts/dialogue_io.pyscripts/exchange.pyscripts/film_capture.mjsscripts/film_check.pyscripts/film_render.pyscripts/flash_scan.pyscripts/frame_sheet.pyscripts/grade.pyscripts/kit_selftest.pyscripts/listen.pyscripts/look.pyscripts/make_film.pyscripts/make_sound_kit.pyscripts/map.pyscripts/matte.pyscripts/mix_cues.pyscripts/motion_blur.pyscripts/motion_scan.pyscripts/new_film.pyscripts/onion_frames.pyscripts/project.pyscripts/qc_file.pyscripts/reframe.pyscripts/region_check.pyscripts/render_block.cjsscripts/render_common.pyscripts/screen.pyscripts/selftest.pyscripts/selftest_cases/_browser.pyscripts/selftest_cases/attach_mix.pyscripts/selftest_cases/captions.pyscripts/selftest_cases/chain.pyscripts/selftest_cases/check.pyscripts/selftest_cases/conform.pyscripts/selftest_cases/cue_export.pyscripts/selftest_cases/cues.pyscripts/selftest_cases/custody.pyscripts/selftest_cases/cut.pyscripts/selftest_cases/cut_record.pyscripts/selftest_cases/dialogue.pyscripts/selftest_cases/dialogue_baseline.txtscripts/selftest_cases/exchange.pyscripts/selftest_cases/exchange_write.pyscripts/selftest_cases/firstrun.pyscripts/selftest_cases/flash.pyscripts/selftest_cases/footage.pyscripts/selftest_cases/gaps.pyscripts/selftest_cases/grade.pyscripts/selftest_cases/identity.pyscripts/selftest_cases/library.pyscripts/selftest_cases/lock.pyscripts/selftest_cases/look.pyscripts/selftest_cases/make.pyscripts/selftest_cases/map.pyscripts/selftest_cases/matte.pyscripts/selftest_cases/outputs.pyscripts/selftest_cases/project.pyscripts/selftest_cases/qcfix.pyscripts/selftest_cases/readers.pyscripts/selftest_cases/record.pyscripts/selftest_cases/register.pyscripts/selftest_cases/render.pyscripts/selftest_cases/reviewfix.pyscripts/selftest_cases/roles.pyscripts/selftest_cases/runs.pyscripts/selftest_cases/screen.pyscripts/selftest_cases/setup.pyscripts/selftest_cases/sound.pyscripts/selftest_cases/sound_u4.pyscripts/selftest_cases/spatial.pyscripts/selftest_cases/stream.pyscripts/selftest_cases/taste.pyscripts/selftest_cases/tighten.pyscripts/selftest_cases/tracefix.pyscripts/selftest_cases/u5a.pyscripts/selftest_cases/u5a_media.pyscripts/selftest_cases/u5b.pyscripts/setup.pyscripts/sound_check.pyscripts/sound_io.pyscripts/sound_library.pyscripts/spatial.pyscripts/spot_cues.pyscripts/strip.pyscripts/sync_check.pyscripts/taste.pyscripts/tempo_map.pyscripts/testpages/identity/.hyperframesignorescripts/testpages/identity/film.jsscripts/tighten.pyscripts/track.pyscripts/transcribe.pyscripts/transcript_cut.pyscripts/voice_clean.pyscripts/with_lock.py
Files
../../.claude-plugin/marketplace.jsonasset583 bytes../../.claude-plugin/plugin.jsonasset892 bytesLICENSE.txtdoc11,358 bytesNOTICEasset1,098 bytesSKILL.mdcore6,319 bytesagents/openai.yamlasset172 bytesassets/caption-house-style.jsonasset258 bytesassets/examples/score-example.mddoc7,177 bytesassets/fonts/IBMPlexMono-LICENSE.txtdoc5,299 bytesassets/fonts/IBMPlexMono-Latin-400.woff2asset14,708 bytesassets/fonts/Inter-LICENSE.txtdoc4,477 bytesassets/fonts/Inter-Latin-400.woff2asset23,664 bytesassets/fonts/Inter-Latin-500.woff2asset24,272 bytesassets/fonts/Inter-Latin-600.woff2asset24,452 bytesassets/kit/BLOCKS.mddoc21,288 bytesassets/kit/blocks/caption.jsruns4,347 bytesassets/kit/blocks/common.jsruns4,687 bytesassets/kit/blocks/dither.jsruns6,724 bytesassets/kit/blocks/endcard.jsruns6,446 bytesassets/kit/blocks/index.jsruns1,265 bytesassets/kit/blocks/name.jsruns5,863 bytesassets/kit/blocks/number.jsruns4,404 bytesassets/kit/blocks/still.jsruns5,318 bytesassets/kit/blocks/terminal.jsruns11,170 bytesassets/kit/blocks/thread.jsruns7,569 bytesassets/kit/blocks/type.jsruns15,493 bytesassets/kit/blocks/without.jsruns4,675 bytesassets/kit/films/atlasfold/facts.jsonasset4,499 bytesassets/kit/films/atlasfold/film.jsruns20,112 bytesassets/kit/films/starter/facts.jsonasset2,565 bytesassets/kit/films/starter/film.jsruns2,967 bytesassets/kit/fonts/GeistMono-LICENSE.txtdoc4,383 bytesassets/kit/fonts/GeistMonoVF.woff2asset71,596 bytesassets/kit/fonts/MonaSans-LICENSE.txtdoc4,403 bytesassets/kit/fonts/MonaSansVF.woff2asset307,976 bytesassets/kit/fonts/NOTO-NOTICE.mddoc867 bytesassets/kit/fonts/NotoSansArabic-Bold.ttfasset194,520 bytesassets/kit/fonts/NotoSansArabic-LICENSE.txtdoc4,382 bytesassets/kit/fonts/NotoSansDevanagari-Bold.ttfasset218,796 bytesassets/kit/fonts/NotoSansDevanagari-LICENSE.txtdoc4,386 bytesassets/kit/fonts/NotoSansHebrew-Bold.ttfasset47,724 bytesassets/kit/fonts/NotoSansHebrew-LICENSE.txtdoc4,382 bytesassets/kit/fonts/NotoSansThai-Bold.ttfasset47,800 bytesassets/kit/fonts/NotoSansThai-LICENSE.txtdoc4,380 bytesassets/kit/index.htmlasset1,447 bytesassets/kit/lf/analyse.jsruns26,540 bytesassets/kit/lf/color.jsruns6,305 bytesassets/kit/lf/ease.jsruns3,594 bytesassets/kit/lf/engine.jsruns36,469 bytesassets/kit/lf/flashmap.jsruns19,432 bytesassets/kit/lf/fx.jsruns13,220 bytesassets/kit/lf/legacy.jsruns2,454 bytesassets/kit/lf/main.jsruns6,676 bytesassets/kit/lf/motion.jsruns7,330 bytesassets/kit/lf/node.jsruns5,366 bytesassets/kit/lf/rng.jsruns1,190 bytesassets/kit/lf/svg.jsruns1,984 bytesassets/kit/lf/text.jsruns22,589 bytesassets/kit/lf/ui.jsruns8,047 bytesassets/templates/assets.csvasset332 bytesassets/templates/brief.mddoc2,229 bytesassets/templates/budget.csvasset1,698 bytesassets/templates/conform-map.jsonasset822 bytesassets/templates/critic-brief.mddoc2,164 bytesassets/templates/cues.jsonasset1,580 bytesassets/templates/cut-review-brief.mddoc4,386 bytesassets/templates/delivery-report.mddoc2,174 bytesassets/templates/facts.jsonasset756 bytesassets/templates/look.mddoc2,252 bytesassets/templates/palette.jsonasset12,302 bytesassets/templates/plan-review-brief.mddoc3,871 bytesassets/templates/review-log.mddoc355 bytesassets/templates/score.csvasset255 bytesassets/templates/treatment.mddoc1,738 bytespaths/create.mddoc7,576 bytespaths/cut.mddoc6,074 bytespaths/editor.mddoc3,674 bytespaths/insert.mddoc4,758 bytespaths/quick.mddoc3,989 bytespaths/sound.mddoc4,435 bytesreferences/assets.mddoc28,787 bytesreferences/case-library.mddoc5,740 bytesreferences/claims-and-rights.mddoc8,803 bytesreferences/commands.mddoc5,884 bytesreferences/engines.mddoc34,564 bytesreferences/ffmpeg-cookbook.mddoc17,648 bytesreferences/finding-the-story.mddoc18,447 bytesreferences/finishing.mddoc13,031 bytesreferences/footage.mddoc23,748 bytesreferences/formats.mddoc10,729 bytesreferences/generation.mddoc21,765 bytesreferences/gotchas.mddoc2,799 bytesreferences/grading.mddoc34,314 bytesreferences/kinetic-type.mddoc16,846 bytesreferences/kit.mddoc11,461 bytesreferences/look.mddoc6,485 bytesreferences/loop.mddoc10,618 bytesreferences/paper-edit.mddoc31,572 bytesreferences/picture.mddoc24,183 bytesreferences/product-demos.mddoc7,054 bytesreferences/project.mddoc33,981 bytesreferences/qc.mddoc20,163 bytesreferences/recipes.mddoc1,774 bytesreferences/review.mddoc16,184 bytesreferences/scripts.mddoc9,593 bytesreferences/sound.mddoc26,188 bytesreferences/sources.mddoc6,807 bytesreferences/spatial.mddoc18,177 bytesreferences/story-and-score.mddoc14,184 bytesreferences/studio.mddoc36,945 bytesreferences/taste.mddoc7,973 bytesreferences/timing.mddoc15,138 bytesscripts/NOTICEruns1,124 bytesscripts/assemble.pyruns103,022 bytesscripts/blank_scan.pyruns11,005 bytesscripts/captions.pyruns137,714 bytesscripts/check.pyruns176,733 bytesscripts/compare_versions.pyruns28,941 bytesscripts/conform.pyruns18,502 bytesscripts/cue_list.pyruns69,294 bytesscripts/cue_onsets.pyruns32,870 bytesscripts/cut.pyruns306,052 bytesscripts/delivery_check.pyruns14,640 bytesscripts/dialogue_io.pyruns2,957 bytesscripts/exchange.pyruns105,531 bytesscripts/film_capture.mjsruns65,227 bytesscripts/film_check.pyruns32,025 bytesscripts/film_render.pyruns25,471 bytesscripts/flash_scan.pyruns28,518 bytesscripts/frame_sheet.pyruns25,150 bytesscripts/grade.pyruns176,919 bytesscripts/kit_selftest.pyruns15,938 bytesscripts/listen.pyruns57,352 bytesscripts/look.pyruns22,831 bytesscripts/make_film.pyruns152,866 bytesscripts/make_sound_kit.pyruns23,839 bytesscripts/map.pyruns73,142 bytesscripts/matte.pyruns25,964 bytesscripts/mix_cues.pyruns57,022 bytesscripts/motion_blur.pyruns23,069 bytesscripts/motion_scan.pyruns31,387 bytesscripts/new_film.pyruns7,392 bytesscripts/onion_frames.pyruns3,338 bytesscripts/project.pyruns115,569 bytesscripts/qc_file.pyruns43,518 bytesscripts/reframe.pyruns24,745 bytesscripts/region_check.pyruns14,135 bytesscripts/render_block.cjsruns3,595 bytesscripts/render_common.pyruns23,273 bytesscripts/screen.pyruns162,011 bytesscripts/selftest.pyruns53,029 bytesscripts/selftest_cases/_browser.pyruns5,592 bytesscripts/selftest_cases/attach_mix.pyruns37,437 bytesscripts/selftest_cases/captions.pyruns124,200 bytesscripts/selftest_cases/chain.pyruns18,392 bytesscripts/selftest_cases/check.pyruns117,682 bytesscripts/selftest_cases/conform.pyruns17,150 bytesscripts/selftest_cases/cue_export.pyruns23,037 bytesscripts/selftest_cases/cues.pyruns7,158 bytesscripts/selftest_cases/custody.pyruns3,977 bytesscripts/selftest_cases/cut.pyruns172,613 bytesscripts/selftest_cases/cut_record.pyruns3,860 bytesscripts/selftest_cases/dialogue.pyruns8,597 bytesscripts/selftest_cases/dialogue_baseline.txtruns29,763 bytesscripts/selftest_cases/exchange.pyruns50,305 bytesscripts/selftest_cases/exchange_write.pyruns26,152 bytesscripts/selftest_cases/firstrun.pyruns15,612 bytesscripts/selftest_cases/flash.pyruns17,612 bytesscripts/selftest_cases/footage.pyruns95,700 bytesscripts/selftest_cases/gaps.pyruns13,941 bytesscripts/selftest_cases/grade.pyruns73,281 bytesscripts/selftest_cases/identity.pyruns32,538 bytesscripts/selftest_cases/library.pyruns18,767 bytesscripts/selftest_cases/lock.pyruns6,911 bytesscripts/selftest_cases/look.pyruns10,909 bytesscripts/selftest_cases/make.pyruns60,483 bytesscripts/selftest_cases/map.pyruns76,137 bytesscripts/selftest_cases/matte.pyruns14,102 bytesscripts/selftest_cases/outputs.pyruns13,420 bytesscripts/selftest_cases/project.pyruns30,215 bytesscripts/selftest_cases/qcfix.pyruns14,345 bytesscripts/selftest_cases/readers.pyruns12,260 bytesscripts/selftest_cases/record.pyruns6,349 bytesscripts/selftest_cases/register.pyruns37,609 bytesscripts/selftest_cases/render.pyruns33,866 bytesscripts/selftest_cases/reviewfix.pyruns13,876 bytesscripts/selftest_cases/roles.pyruns2,260 bytesscripts/selftest_cases/runs.pyruns7,619 bytesscripts/selftest_cases/screen.pyruns100,624 bytesscripts/selftest_cases/setup.pyruns19,618 bytesscripts/selftest_cases/sound.pyruns24,844 bytesscripts/selftest_cases/sound_u4.pyruns22,838 bytesscripts/selftest_cases/spatial.pyruns51,753 bytesscripts/selftest_cases/stream.pyruns19,908 bytesscripts/selftest_cases/taste.pyruns21,995 bytesscripts/selftest_cases/tighten.pyruns39,461 bytesscripts/selftest_cases/tracefix.pyruns24,579 bytesscripts/selftest_cases/u5a.pyruns70,052 bytesscripts/selftest_cases/u5a_media.pyruns41,286 bytesscripts/selftest_cases/u5b.pyruns20,849 bytesscripts/setup.pyruns38,364 bytesscripts/sound_check.pyruns15,460 bytesscripts/sound_io.pyruns4,382 bytesscripts/sound_library.pyruns39,306 bytesscripts/spatial.pyruns38,007 bytesscripts/spot_cues.pyruns20,184 bytesscripts/strip.pyruns11,457 bytesscripts/sync_check.pyruns37,580 bytesscripts/taste.pyruns37,568 bytesscripts/tempo_map.pyruns17,329 bytesscripts/testpages/identity/.hyperframesignoreruns14 bytesscripts/testpages/identity/assets/dot.pngasset76 bytesscripts/testpages/identity/assets/logo.svgasset111 bytesscripts/testpages/identity/cues.jsonasset1,522 bytesscripts/testpages/identity/film.jsruns208 bytesscripts/testpages/identity/index.htmlasset251 bytesscripts/testpages/identity/style.cssasset104 bytesscripts/testpages/index.htmlasset1,810 bytesscripts/testpages/labels/assets/fonts/Inter-LICENSE.txtdoc4,477 bytesscripts/testpages/labels/assets/fonts/Inter-Latin-400.woff2asset23,664 bytesscripts/testpages/labels/compositions/inner.htmlasset690 bytesscripts/testpages/labels/index.htmlasset4,456 bytesscripts/tighten.pyruns60,588 bytesscripts/track.pyruns42,594 bytesscripts/transcribe.pyruns36,292 bytesscripts/transcript_cut.pyruns16,211 bytesscripts/voice_clean.pyruns8,625 bytesscripts/with_lock.pyruns9,064 bytes
Read SKILL.md
# Legible Film
An agentic video assistant for any kind of video. The film lives as text, every render is a **version** that never
changes, **checks** run on the file a viewer receives, and the person approves in the **Screening Room**. You read,
measure and listen by instrument; the person watches at speed and hears. A delivered file is **unwatched**
until a named person has watched it at normal speed, and **unheard** until they have listened. Report the two kinds
of evidence separately.
## Gates
- **Money.** Ask before any spend or paid generation; the cap is the person's.
- **Leaving the machine.** An upload, post, message, off-machine review packet or Cavalry script needs the person's
yes, once per project and destination.
- **Reviewers.** A fresh agent of your own provider, unless the person approves another.View the complete source on GitHubSkills included
- legible-film
Repository facts
- License
- Apache-2.0
- Created
- Oct 28, 2026
- Last pushed
- Nov 5, 2026
- Forks
- 1
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
- No broad tool permissions
- 8 dangerous shell commandsin 3 files: legible-film/scripts/setup.py:67 legible-film/scripts/make_film.py:309 legible-film/scripts/selftest_cases/u5b.py:137
- 547 network referencesin 53 files: legible-film/references/assets.md:64 legible-film/references/generation.md:65 legible-film/scripts/selftest_cases/screen.py:405 and 50 more
- 2 obfuscation signalsin 2 files: legible-film/scripts/captions.py:1852 legible-film/scripts/grade.py:746
- No instruction overrides
- 134 executable scriptsin 134 files: legible-film/assets/kit/blocks/caption.js:1 legible-film/assets/kit/blocks/common.js:1 legible-film/assets/kit/blocks/dither.js:1 and 131 more
- 82 references to secretsin 35 files: legible-film/scripts/setup.py:80 legible-film/scripts/film_check.py:133 legible-film/scripts/selftest_cases/_browser.py:16 and 32 more
- No requests to vote in Hot
Show all 773 signals by file
.claude-plugin/marketplace.json
.claude-plugin/plugin.json
- Network accessline 6
"author": { "name": "James Dimachkie", "url": "https://github.com/JamesDimachkie" - Network accessline 7
"name": "James Dimachkie", "url": "https://github.com/JamesDimachkie" }, - Network accessline 8
"url": "https://github.com/JamesDimachkie" - Network accessline 9
}, "homepage": "https://github.com/JamesDimachkie/legible-film", "repository": "https://github.com/JamesDimachkie/legible-film", - Network accessline 10
"homepage": "https://github.com/JamesDimachkie/legible-film", - Network accessline 11
"repository": "https://github.com/JamesDimachkie/legible-film",
skills/legible-film/LICENSE.txt
skills/legible-film/NOTICE
- Network accessline 15
Some of the Screening Room's colour and size values are adapted from Rune (https://github.com/anomalyco/rune,
skills/legible-film/assets/fonts/IBMPlexMono-LICENSE.txt
skills/legible-film/assets/fonts/Inter-LICENSE.txt
- Network accessline 1
Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - Network accessline 5
http://scripts.sil.org/OFL
skills/legible-film/assets/kit/blocks/caption.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/common.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/dither.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/endcard.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/index.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/name.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/number.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/still.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/terminal.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/thread.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/type.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/blocks/without.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/films/atlasfold/film.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/films/starter/film.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/fonts/GeistMono-LICENSE.txt
- Network accessline 1
Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://openfontlicense.org - Network accessline 5
https://openfontlicense.org
skills/legible-film/assets/kit/fonts/MonaSans-LICENSE.txt
- Network accessline 1
Copyright (c) 2023, GitHub https://github.com/github/mona-sans - Network accessline 4
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - Network accessline 6
http://scripts.sil.org/OFL
skills/legible-film/assets/kit/fonts/NOTO-NOTICE.md
- Network accessline 12
- Noto Sans Arabic: https://github.com/google/fonts/tree/main/ofl/notosansarabic - Network accessline 13
- Noto Sans Hebrew: https://github.com/google/fonts/tree/main/ofl/notosanshebrew - Network accessline 14
- Noto Sans Thai: https://github.com/google/fonts/tree/main/ofl/notosansthai - Network accessline 15
- Noto Sans Devanagari: https://github.com/google/fonts/tree/main/ofl/notosansdevanagari
skills/legible-film/assets/kit/fonts/NotoSansArabic-LICENSE.txt
- Network accessline 1
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/arabic) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL - Network accessline 5
https://scripts.sil.org/OFL
skills/legible-film/assets/kit/fonts/NotoSansDevanagari-LICENSE.txt
- Network accessline 1
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/devanagari) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL - Network accessline 5
https://scripts.sil.org/OFL
skills/legible-film/assets/kit/fonts/NotoSansHebrew-LICENSE.txt
- Network accessline 1
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/hebrew) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL - Network accessline 5
https://scripts.sil.org/OFL
skills/legible-film/assets/kit/fonts/NotoSansThai-LICENSE.txt
- Network accessline 1
Copyright 2022 The Noto Project Authors (https://github.com/notofonts/thai) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://scripts.sil.org/OFL - Network accessline 5
https://scripts.sil.org/OFL
skills/legible-film/assets/kit/lf/analyse.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/color.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/ease.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/engine.js
- Executable scriptline 1
Executable file - Network accessline 243
win.style.cssText = `position:absolute;left:${hole.mx}px;top:${hole.my}px;width:${hole.mw}px;height:${hole.mh}px;visibility:hidden;`; win.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${hole.vw} ${hole.vh}" width="${ - Network accessline 244
win.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${hole.vw} ${hole.vh}" width="${hole.mw}" height="${hole.mh}" style="display:block;overflow:visible"><path d="${hole.path}" fill="${nextGround}"/></svg>`; - Network accessline 254
const counterD = loopAround(outline, letter, hole.cx, hole.cy); const face = node.color || this.typeOn(this.groundAt(c - d)); vec.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${node.w} ${node.h}" width="${no - Network accessline 256
vec.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${node.w} ${node.h}" width="${node.w}" height="${node.h}" style="display:block;overflow:visible"><path fill-rule="evenodd" d="${outline.d}" fill="${face}"/></svg>`; - Network accessline 258
if (counterD) win.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${node.w} ${node.h}" width="${node.w}" height="${node.h}" style="display:block;overflow:visible"><path d="${counterD}" fill="${nextGround}" stroke="${nextGr
skills/legible-film/assets/kit/lf/flashmap.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/fx.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/legacy.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/main.js
- Executable scriptline 1
Executable file - Network accessline 88
let facts = null; if (spec.facts) { const r = await fetch(new URL(spec.facts, filmUrl)); // lf-lint-ok: build time, before __lf.ready - Network accessline 89
if (spec.facts) { const r = await fetch(new URL(spec.facts, filmUrl)); // lf-lint-ok: build time, before __lf.ready if (!r.ok) throw new Error(`facts file ${spec.facts} could not be read (${r.status})`); - Network accessline 90
const r = await fetch(new URL(spec.facts, filmUrl)); // lf-lint-ok: build time, before __lf.ready - Network accessline 98
const url = new URL(src, filmUrl).href; if (/\.svg(\?|$)/i.test(src) && sc.inlineSvg) { const r = await fetch(url); // lf-lint-ok: build time, before __lf.ready - Network accessline 99
if (/\.svg(\?|$)/i.test(src) && sc.inlineSvg) { const r = await fetch(url); // lf-lint-ok: build time, before __lf.ready images.set(src, { svgText: await r.text(), url }); - Network accessline 100
const r = await fetch(url); // lf-lint-ok: build time, before __lf.ready
skills/legible-film/assets/kit/lf/motion.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/node.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/rng.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/svg.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/text.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/kit/lf/ui.js
- Executable scriptline 1
Executable file
skills/legible-film/assets/templates/assets.csv
- Network accessline 1
asset_id,role,file,sha256,source_or_provider,model_or_version,created_on,plan_at_creation,licence_or_terms_url,permitted_use,cost,private_material_uploaded,approved_by,notes example-01,music,audio/music-take-b.wav,,provider name,model versi - Network accessline 2
example-01,music,audio/music-take-b.wav,,provider name,model version,YYYY-MM-DD,paid / free / owned,https://,commercial web and social,0,no,,replace this row
skills/legible-film/assets/templates/facts.json
- Network accessline 12
"label_beside_value": "batch 1", "footnote": "Measured by ___ on ___ (source, date)", "source": "https://example.com/benchmark", - Network accessline 13
"footnote": "Measured by ___ on ___ (source, date)", "source": "https://example.com/benchmark", "read_on": "YYYY-MM-DD", - Network accessline 14
"source": "https://example.com/benchmark",
skills/legible-film/references/assets.md
- Network accessline 64
Example: Adobe's editorial designation excludes advertising even with an Extended licence, and Pexels warns that its licence does not cover depicted brands ([Adobe Stock licence terms](https://stock.adobe.com/license-terms), - Network accessline 65
licence does not cover depicted brands ([Adobe Stock licence terms](https://stock.adobe.com/license-terms), [Pexels](https://help.pexels.com/hc/en-us/articles/360042295214-Can-I-use-the-photos-and-videos-for-a-commercial-project)). - Network accessline 66
([Adobe Stock licence terms](https://stock.adobe.com/license-terms), - Network accessline 67
[Pexels](https://help.pexels.com/hc/en-us/articles/360042295214-Can-I-use-the-photos-and-videos-for-a-commercial-project)). - Network accessline 79
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Pexels](https://www.pexels.com/license/) | atmospheric inserts and textures where release risk is low | free commercial use; no implied endorsement - Network accessline 80
|---|---|---|---| | [Pexels](https://www.pexels.com/license/) | atmospheric inserts and textures where release risk is low | free commercial use; no implied endorsement or trademark use | free | | [Artlist footage](https://artlist.io/help-c - Network accessline 81
| [Pexels](https://www.pexels.com/license/) | atmospheric inserts and textures where release risk is low | free commercial use; no implied endorsement or trademark use | free | - Network accessline 82
| [Artlist footage](https://artlist.io/help-center/privacy-terms/artlist-license) | repeated production from one consistent library | Pro covers an individual's client work and paid promotion; companies and agencies are pointed to Business - Network accessline 83
| [Stocksy](https://www.stocksy.com/legal/contentlicense) | a few naturalistic shots with a point of view | royalty-free, worldwide, perpetual; clip audio not licensed; AI/ML processing prohibited under the standard terms | $175 for 1080p, - Network accessline 84
| [Filmsupply](https://www.filmsupply.com/license-terms) | a hero sequence whose light, casting or camera must carry the film | rights-managed per project, client, use and territory | web and social from $219 a clip; wider media by quote ([ - Network accessline 102
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Unsplash](https://unsplash.com/license) | landscapes, objects and editorial-feeling atmosphere | free commercial use; releases not guaranteed ([rele - Network accessline 103
|---|---|---|---| | [Unsplash](https://unsplash.com/license) | landscapes, objects and editorial-feeling atmosphere | free commercial use; releases not guaranteed ([releases](https://help.unsplash.com/en/articles/2612329-releases-and-tradem - Network accessline 104
| [Unsplash](https://unsplash.com/license) | landscapes, objects and editorial-feeling atmosphere | free commercial use; releases not guaranteed ([releases](https://help.unsplash.com/en/articles/2612329-releases-and-trademarks)) | free | - Network accessline 105
| [Adobe Stock](https://stock.adobe.com/license-terms) | broad searches across photos, illustration and vectors | Standard licence covers social and web; audience limits and editorial restrictions apply | 10 credits for $29.99/month on an a - Network accessline 106
| [Stocksy](https://www.stocksy.com/pricing) | a small, coherent set with an individual point of view | Standard includes advertising, worldwide, unlimited term | $35 (2 MP) to $135 (12 MP and up) | - Network accessline 107
| [10M](https://www.10m.co/about) | public-domain art, maps, engravings, botanical plates and posters from 22 museums and archives, searchable by colour, mood, era, medium or artist | rights are stated per work: about 130,000 works carry re - Network accessline 120
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Incompetech](https://incompetech.com/music/royalty-free/licenses/) | a low-budget piece that can carry a credit | free with Creative Commons credit; - Network accessline 121
|---|---|---|---| | [Incompetech](https://incompetech.com/music/royalty-free/licenses/) | a low-budget piece that can carry a credit | free with Creative Commons credit; a paid licence removes the credit | free with credit | | [Epidemic Sou - Network accessline 122
| [Incompetech](https://incompetech.com/music/royalty-free/licenses/) | a low-budget piece that can carry a credit | free with Creative Commons credit; a paid licence removes the credit | free with credit | - Network accessline 123
| [Epidemic Sound](https://www.epidemicsound.com/pricing/) | online client work with a channel-clearing workflow | Pro covers digital ads and freelance client work; published content stays covered after cancellation | Pro $16.99/month, bill - Network accessline 124
| [Artlist music](https://artlist.io/help-center/privacy-terms/artlist-license) | frequent edits where stems matter | the Social plan excludes client projects and paid media; Pro and Business are broader | Music Pro $16.58/month billed annu - Network accessline 125
| [PremiumBeat](https://www.premiumbeat.com/license) | a one-off film with versions and stems, no subscription | per track and project; tiers widen the media covered | $59 Standard, $199 Premium, $999 Business | - Network accessline 126
| [Universal Production Music](https://www.universalproductionmusic.com/en-gb/licensing) | advertising or broadcast needing a specific agreement or commissioned music | licensed by region and use | by quote | - Network accessline 129
cut-downs, paid placement, the client's publishing accounts, territory and term. Synchronisation and public performance are separate questions; ask who handles cue sheets. "Free Creative Commons music" is not enough: CC treats synchronising - Network accessline 130
performance are separate questions; ask who handles cue sheets. "Free Creative Commons music" is not enough: CC treats synchronising music to picture as an adaptation, so ND licences forbid it and NC licences forbid commercial use ([Creativ - Network accessline 131
synchronising music to picture as an adaptation, so ND licences forbid it and NC licences forbid commercial use - Network accessline 132
([Creative Commons FAQ](https://creativecommons.org/faq/#when-is-my-use-considered-an-adaptation)). - Network accessline 134
**Content ID** can block, monetise or track an upload without knowing the music was licensed elsewhere ([YouTube](https://support.google.com/youtube/answer/2797370?hl=en)). Clear the client's channel through the library's - Network accessline 135
([YouTube](https://support.google.com/youtube/answer/2797370?hl=en)). Clear the client's channel through the library's - Network accessline 150
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Freesound](https://freesound.org/help/faq/) | specific real-world details, room tone, unusual foley | licence varies per sound (CC0, CC BY, CC BY-NC - Network accessline 151
|---|---|---|---| | [Freesound](https://freesound.org/help/faq/) | specific real-world details, room tone, unusual foley | licence varies per sound (CC0, CC BY, CC BY-NC); uploads can contain unauthorised material | free | | [Sonniss GDC bu - Network accessline 152
| [Freesound](https://freesound.org/help/faq/) | specific real-world details, room tone, unusual foley | licence varies per sound (CC0, CC BY, CC BY-NC); uploads can contain unauthorised material | free | - Network accessline 153
| [Sonniss GDC bundles](https://sonniss.com/gdc-bundle-license/) | a broad starting palette | commercial project use without credit; no standalone redistribution (the project team may share them); no AI training | free | - Network accessline 154
| [Epidemic Sound](https://www.epidemicsound.com/pricing/) | teams clearing music and effects together | included with music on the same plans | as music | - Network accessline 155
| [BOOM Library](https://www.boomlibrary.com/terms-conditions-regular/) | designed transitions and material recordings with good metadata | worldwide media licence including advertising; no AI/ML training; subscription terms differ from buy - Network accessline 158
motion, and the room or tail. Check the stack for phase cancellation, and never pile full-spectrum impacts on a small interface change. **Reject** clipped attacks, denoising warble, baked-in music, rips from films or games, voices hidden in - Network accessline 160
hidden in an ambience, and anything NC for advertising. - Network accessline 186
| Route | Use it for | Usage notes | Price level, read 2026-10-28 | |---|---|---|---| | [Fiverr](https://www.fiverr.com/) (vetted Pro listings) | narrow casting with a dry audition that fits | terms are seller-specific; some listings exclud - Network accessline 187
|---|---|---|---| | [Fiverr](https://www.fiverr.com/) (vetted Pro listings) | narrow casting with a dry audition that fits | terms are seller-specific; some listings exclude paid media | listings vary; confirm the package covers the planned - Network accessline 188
| [Fiverr](https://www.fiverr.com/) (vetted Pro listings) | narrow casting with a dry audition that fits | terms are seller-specific; some listings exclude paid media | listings vary; confirm the package covers the planned use | - Network accessline 189
| [Voice123](https://support.voice123.com/hc/en-us/articles/205237644-What-is-the-rate-for-a-voice-actor-on-Voice123) | direct auditions and negotiation | fees negotiated; agree media, territory, term and any AI use in writing | by quote | - Network accessline 190
| [Voices](https://www.voices.com/help/knowledge/faq/Understanding-Licensing) | usage-led casting and budgeting | paid online ads are licensed like broadcast, by market and term | its online-ad jobs average $350-$1,125 ([rates](https://www. - Network accessline 191
| Union casting ([SAG-AFTRA](https://www.sagaftra.org/production-center/contract/802/getting-started)) | campaigns requiring union talent | a contract route with session, usage and digital-replica terms | session fees plus usage; a payroll - Network accessline 205
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Inter](https://rsms.me/inter/) | clear interface labels, product numbers, contemporary titles | SIL Open Font License | free | - Network accessline 206
|---|---|---|---| | [Inter](https://rsms.me/inter/) | clear interface labels, product numbers, contemporary titles | SIL Open Font License | free | | [IBM Plex](https://github.com/IBM/plex) | a coordinated sans, serif and mono family for te - Network accessline 207
| [Inter](https://rsms.me/inter/) | clear interface labels, product numbers, contemporary titles | SIL Open Font License | free | - Network accessline 208
| [IBM Plex](https://github.com/IBM/plex) | a coordinated sans, serif and mono family for technical work | SIL Open Font License | free | - Network accessline 209
| [Source Serif 4](https://github.com/adobe-fonts/source-serif/blob/main/LICENSE.md) | editorial headings, a serif counterpoint to interface type | SIL Open Font License, with optical sizes | free | - Network accessline 210
| [Adobe Fonts](https://helpx.adobe.com/fonts/web/font-licensing/font-licensing.html) | art-direction exploration under an existing Creative Cloud plan | film, broadcast and online video permitted; no app embedding or sharing font files | w - Network accessline 211
| Foundry licences ([Monotype guide](https://www.monotypefonts.com/pages/content/resources-font-licensing-guide)) | brand type and negotiated scopes | desktop, web, app and embedding licensed separately | by quote | - Network accessline 213
The SIL Open Font License permits titling in commercial video without an artwork credit ([OFL FAQ](https://openfontlicense.org/ofl-faq/)). For a typeface from a directory, read the upstream designer's - Network accessline 214
([OFL FAQ](https://openfontlicense.org/ofl-faq/)). For a typeface from a directory, read the upstream designer's - Network accessline 225
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Poly Haven](https://polyhaven.com/license) | lighting environments, materials, supporting models | CC0, commercial use without attribution | free | - Network accessline 226
|---|---|---|---| | [Poly Haven](https://polyhaven.com/license) | lighting environments, materials, supporting models | CC0, commercial use without attribution | free | | [Fab](https://www.fab.com/eula) | specific props, environments, speci - Network accessline 227
| [Poly Haven](https://polyhaven.com/license) | lighting environments, materials, supporting models | CC0, commercial use without attribution | free | - Network accessline 228
| [Fab](https://www.fab.com/eula) | specific props, environments, specialist models | Standard licence allows commercial use in any tool; no standalone redistribution; CC BY items carry CC terms | per item | - Network accessline 229
| [Poliigon](https://help.poliigon.com/en/articles/8749749-asset-use-licensing) | consistent materials for repeated renders | advertising included; no sharing of extractable scene files; no AI/ML use; Individual plans are for one person | $ - Network accessline 242
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | Procedural (FFmpeg [`noise`](https://ffmpeg.org/ffmpeg-filters.html#noise), [`lut3d`](https://ffmpeg.org/ffmpeg-filters.html#lut3d), an original shad - Network accessline 243
|---|---|---|---| | Procedural (FFmpeg [`noise`](https://ffmpeg.org/ffmpeg-filters.html#noise), [`lut3d`](https://ffmpeg.org/ffmpeg-filters.html#lut3d), an original shader) | subtle, controllable texture tied to the animation | your own cod - Network accessline 244
| Procedural (FFmpeg [`noise`](https://ffmpeg.org/ffmpeg-filters.html#noise), [`lut3d`](https://ffmpeg.org/ffmpeg-filters.html#lut3d), an original shader) | subtle, controllable texture tied to the animation | your own code; record its prov - Network accessline 245
| [Grainzilla](https://grainzilla.com/) | a small set of real grain scans | commercial use including client work and ads; no redistribution | 1080p pack $24.90; 4K pack $39.90 | - Network accessline 246
| [CineGrain](https://www.cinegrain.com/texture/35mm) | a deliberately film-derived treatment central to the look | Indie tier capped by production budget; Professional for larger productions, under its own licence | Indie 35mm $96; Profess - Network accessline 247
| [FilmConvert Nitrate](https://www.filmconvert.com/nitrate) | exposure-dependent grain and camera-profile film looks | software licence with three activations | from $119 | - Network accessline 260
| Source | Use it for | Licence notes | Price level, read 2026-10-28 | |---|---|---|---| | [Lucide](https://lucide.dev/license) | a consistent, code-native icon vocabulary | ISC licence; keep the notice | free | - Network accessline 261
|---|---|---|---| | [Lucide](https://lucide.dev/license) | a consistent, code-native icon vocabulary | ISC licence; keep the notice | free | | [Envato Elements](https://help.elements.envato.com/hc/en-us/articles/360000628966-Envato-Elements - Network accessline 262
| [Lucide](https://lucide.dev/license) | a consistent, code-native icon vocabulary | ISC licence; keep the notice | free | - Network accessline 263
| [Envato Elements](https://help.elements.envato.com/hc/en-us/articles/360000628966-Envato-Elements-License) | breadth in illustration, mockups and templates | per-project registration; embedded components may have their own licences | from - Network accessline 264
| [UI8](https://ui8.net/terms) | a coherent illustration set or design kit | marketing videos and client work permitted; no standalone redistribution of the assets | per item | - Network accessline 265
| [Apple Design Resources](https://developer.apple.com/design/resources/) | accurate presentation of a qualifying Apple app | separate conditions per resource | free downloads; terms per resource | - Network accessline 272
**Device and platform owners have their own rules.** Apple's App Store marketing guidance forbids modifying, spinning or animating its supplied product images and 3D simulations of its products in that context, and requires trademark credit - Network accessline 273
or animating its supplied product images and 3D simulations of its products in that context, and requires trademark credit lines in video ([guidelines](https://developer.apple.com/app-store/marketing/guidelines/)). Google forbids implying a - Network accessline 274
credit lines in video ([guidelines](https://developer.apple.com/app-store/marketing/guidelines/)). Google forbids - Network accessline 275
implying an endorsement that does not exist ([brand guidance](https://about.google/brand-resource-center/guidance/)).
skills/legible-film/references/case-library.md
- Network accessline 10
| Problem | Case | What it shows | |---|---|---| | Proving a capability so the viewer believes it | Volvo Trucks, "The Epic Split" (2013; Forsman & Bodenfors; dir. Andreas Nilsson) | Jean-Claude Van Damme does the splits between two reversi - Network accessline 11
|---|---|---| | Proving a capability so the viewer believes it | Volvo Trucks, "The Epic Split" (2013; Forsman & Bodenfors; dir. Andreas Nilsson) | Jean-Claude Van Damme does the splits between two reversing trucks to demonstrate the stabil - Network accessline 12
| Proving a capability so the viewer believes it | Volvo Trucks, "The Epic Split" (2013; Forsman & Bodenfors; dir. Andreas Nilsson) | Jean-Claude Van Damme does the splits between two reversing trucks to demonstrate the stability and precis - Network accessline 13
| A chain of visible causes | Honda, "Cog" (2003; Wieden+Kennedy London; dir. Antoine Bardou-Jacquet) | A chain reaction of real car parts, each setting off the next, largely without computer graphics. [Wikipedia](https://en.wikipedia.org/w - Network accessline 14
| One rule of the world changes | Apple, AirPods "Bounce" (2019; TBWA\Media Arts Lab; dir. Oscar Hudson) | A commute in which the city becomes a trampoline; the film explores the consequences of one changed rule. [The Drum](https://www.thed - Network accessline 15
| Telling a human story through use of the product | Google, "Parisian Love" (2009 Search Stories film; aired during Super Bowl XLIV, 2010) | A love story told through one person's searches. | | A belief behind the product | Honda, "Grrr" ( - Network accessline 16
| A belief behind the product | Honda, "Grrr" (2004; Wieden+Kennedy London; dirs. Adam Foulkes and Alan Smith) | Reportedly grew from a Honda engine designer's dislike of diesel engines ("Hate something, change something"). [Wikipedia](http - Network accessline 17
| A number the viewer must understand | Ed Hawkins, "climate spiral" (2016) | Monthly temperature anomalies drawn on fixed axes, month as angle and anomaly as radius, with colour encoding time. [Wikipedia](https://en.wikipedia.org/wiki/Clim - Network accessline 18
| Live data as short animations | IBM, "Datagrams" (2013; IBM with Ogilvy & Mather; animation by Buck) | Live match data from the US Open turned into short animations for each match. [PR Newswire](https://www.prnewswire.com/news-releases/li - Network accessline 19
| A values statement in few words | Apple, "Intention" (2013, Designed by Apple in California; TBWA\Media Arts Lab) | Short sentences given simple visual relationships. | | One silhouette through many materials | Nike, "Air Max '17: The Art - Network accessline 20
| One silhouette through many materials | Nike, "Air Max '17: The Art of Negative Space" (ManvsMachine) | The negative-space outline of the shoe recurs through scenes of different materials; the sound re-pitches footsteps into melody and rh - Network accessline 21
| Delaying recognition of a title | "Alien" (1979; R/Greenberg Associates, Richard Greenberg) | The title's letters assemble gradually, so viewers are not ready to read them as a word. [Art of the Title](https://www.artofthetitle.com/title/ - Network accessline 22
| Motion that belongs to its period | "Stranger Things" (2016; Imaginary Forces, Michelle Dougherty) | An early "locking in" letter motion felt rigid and snappy, and the creators did not respond to it because it was not a familiar 1980s mot - Network accessline 23
| Unsettling the viewer on purpose | "Severance" main titles (2022; Oliver Latta / Extraweg; typography Teddy Blanks; music Theodore Shapiro) | A title sequence built to disorient rather than reassure. [It's Nice That](https://itsnicethat.c - Network accessline 28
| Problem | Case | What it shows | |---|---|---| | Scoring a technical subject without cliché | Antfood, score for Google's "Hacking Google" series | Tactile acoustic instruments rather than the dark synthetic textures of cyber tropes, alon - Network accessline 29
|---|---|---| | Scoring a technical subject without cliché | Antfood, score for Google's "Hacking Google" series | Tactile acoustic instruments rather than the dark synthetic textures of cyber tropes, alongside orchestral and synth material - Network accessline 30
| Scoring a technical subject without cliché | Antfood, score for Google's "Hacking Google" series | Tactile acoustic instruments rather than the dark synthetic textures of cyber tropes, alongside orchestral and synth material. [Antfood](ht - Network accessline 31
| Effects only, no music | Kia EV6, "Silence Is Powerful" (2023; David&Goliath / Innocean) | By its sound designer's account, picture and sound design only, with no voiceover or music. Watch it to confirm before citing. | | An ending that r - Network accessline 32
| An ending that refuses triumph | UNHCR, "The Journey" (Don't Panic; sound by String & Tins) | "The music is not triumphant at the end of the film"; the sound resists telling the listener how to feel. [D&AD](https://www.dandad.org/work/ann - Network accessline 33
| Music made from the product's own sounds | Apple, "Start Up" (2021 event opener; A.G. Cook) | A song built from the sounds of Apple devices, opening on a startup chime. | | Detailed sound on simple visuals | David Kamp (Studiokamp) | Choo - Network accessline 34
| Detailed sound on simple visuals | David Kamp (Studiokamp) | Chooses which visual elements need a sound, and uses sound to say what minimal visuals do not. [It's Nice That](https://www.itsnicethat.com/articles/david-kamp-interview/) |
skills/legible-film/references/claims-and-rights.md
- Network accessline 112
| Provider | Output ownership and commercial use | Training on your inputs/outputs by default | Source | |---|---|---|---| | OpenAI API | rights in output assigned to the user (per terms; page not machine-readable at check time) | API: no, - Network accessline 113
|---|---|---|---| | OpenAI API | rights in output assigned to the user (per terms; page not machine-readable at check time) | API: no, unless you opt in; consumer apps: may be used unless you opt out | [terms](https://openai.com/policies/te - Network accessline 114
| OpenAI API | rights in output assigned to the user (per terms; page not machine-readable at check time) | API: no, unless you opt in; consumer apps: may be used unless you opt out | [terms](https://openai.com/policies/terms-of-use/); [API - Network accessline 115
| Google Gemini API (incl. image and video models) | Google does not claim ownership; preview products can restrict commercial use | unpaid tier: yes; paid tier: no | [Gemini API terms](https://ai.google.dev/gemini-api/terms) | - Network accessline 116
| Runway | Runway does not claim ownership of inputs or outputs | yes (no opt-out described in the terms) | [terms](https://runway.com/terms-of-use) | - Network accessline 117
| Luma | customer owns output; commercial use only for output made during an active subscription | yes | [terms](https://lumalabs.ai/legal/terms-of-service) | - Network accessline 118
| Adobe Firefly | Adobe claims no ownership; marketed as commercially safe | no: Adobe states it does not train Firefly on user content | [Firefly approach](https://www.adobe.com/ai/overview/firefly/gen-ai-approach.html) | - Network accessline 119
| ElevenLabs | user retains rights; free plan non-commercial, paid plans commercial | yes, with an opt-out | [terms](https://elevenlabs.io/terms-of-use) | - Network accessline 120
| Stability AI | rights assigned to the user; community licence free up to USD 1M annual revenue | yes, with an opt-out | [terms](https://stability.ai/terms-of-service) |
skills/legible-film/references/engines.md
- Network accessline 24
| Transcripts and caption timing | **WhisperX** for word alignment | faster-whisper or whisper.cpp for speed on CPU; FFmpeg 8+ `whisper` filter where the build includes it | | Generated plates, voice, music, effects | the provider the perso - Network accessline 26
| Review with collaborators: watching a version, notes on moments, drawings, replies | **Flask** ([flask.do](https://flask.do)), through its MCP server ([review](review.md) §1) | the local Screening Room (`screen.py`) for private work on th - Network accessline 218
[Strobe](https://github.com/hridaya423/strobe) (Apache-2.0; v0.1.0, first released 2026-10-31, one author) renders an - Network accessline 283
| Model | Code and weight licence | Exact ONNX weights | Use | |---|---|---|---| | MODNet, Xenova conversion | [Code: Apache-2.0](https://github.com/ZHKKKe/MODNet/blob/master/LICENSE); [weight model card: Apache-2.0](https://huggingface.co/ - Network accessline 284
|---|---|---|---| | MODNet, Xenova conversion | [Code: Apache-2.0](https://github.com/ZHKKKe/MODNet/blob/master/LICENSE); [weight model card: Apache-2.0](https://huggingface.co/Xenova/modnet) | [Pinned download](https://huggingface.co/Xenov - Network accessline 285
| MODNet, Xenova conversion | [Code: Apache-2.0](https://github.com/ZHKKKe/MODNet/blob/master/LICENSE); [weight model card: Apache-2.0](https://huggingface.co/Xenova/modnet) | [Pinned download](https://huggingface.co/Xenova/modnet/resolve/f - Network accessline 286
| BiRefNet Lite, Studio Ludens 512 conversion | [Code: MIT](https://github.com/ZhengPeng7/BiRefNet/blob/main/LICENSE); [converted weights and licence: MIT](https://huggingface.co/studioludens/birefnet-lite-512); [upstream weights: MIT](http - Network accessline 329
the spotted list and the palette) and `listen.py` (measure, transcript, sync, sheet and labels; [sound](sound.md) §13). - **[earshot](https://github.com/Leonxlnx/earshot)** (Leon Lin, MIT; young) gives agents measurements and labels for - Network accessline 330
§13). - **[earshot](https://github.com/Leonxlnx/earshot)** (Leon Lin, MIT; young) gives agents measurements and labels for sounds, cue sync sheets and code-made effects. The skill's `listen.py` follows its shape, takes its launch-film - Network accessline 331
- **[earshot](https://github.com/Leonxlnx/earshot)** (Leon Lin, MIT; young) gives agents measurements and labels for
skills/legible-film/references/formats.md
- Network accessline 121
| Platform | What the official page says | Source | |---|---|---| | YouTube | MP4 with the moov atom at the front; H.264 High, progressive, 4:2:0, BT.709 for SDR; AAC-LC 48 kHz; upload at the recorded frame rate; SDR guidance about 8 Mbps f - Network accessline 122
|---|---|---| | YouTube | MP4 with the moov atom at the front; H.264 High, progressive, 4:2:0, BT.709 for SDR; AAC-LC 48 kHz; upload at the recorded frame rate; SDR guidance about 8 Mbps for 1080p at 24-30 fps and 12 Mbps at 48-60 fps | [Yo - Network accessline 123
| YouTube | MP4 with the moov atom at the front; H.264 High, progressive, 4:2:0, BT.709 for SDR; AAC-LC 48 kHz; upload at the recorded frame rate; SDR guidance about 8 Mbps for 1080p at 24-30 fps and 12 Mbps at 48-60 fps | [YouTube help](ht - Network accessline 124
| LinkedIn (ads) | MP4; 75 KB-500 MB; 3 s-30 min (15-30 s recommended); 16:9, 1:1, 4:5 and 9:16; under 30 fps; H.264 or VP8 with AAC or MPEG-4 audio | [LinkedIn help](https://www.linkedin.com/help/lms/answer/a424737) | - Network accessline 125
| Instagram Reels (ads) | 9:16; 1440x2560 recommended; up to 15 min and 4 GB; H.264, square pixels, fixed frame rate, progressive; stereo AAC at 128 kbps or more; the safe zones in §3 | [Meta ads guide](https://www.facebook.com/business/ads - Network accessline 126
| TikTok (in-feed ads, non-Spark) | 9:16 recommended at 540x960 or more; up to 10 min and 500 MB; at least 516 kbps | [TikTok ads help](https://ads.tiktok.com/resources/help/article/tiktok-auction-in-feed-ads) | - Network accessline 127
| X | the help pages could not be read at check time, and third-party figures conflict | [X help](https://help.x.com) |
skills/legible-film/references/generation.md
- Network accessline 65
whole film in one clip. Keep text and logos out of the generated plate and composite them exactly afterwards. Phrase positively, as Runway's Gen-4 guide recommends ([guide](https://help.runwayml.com/hc/en-us/articles/39789879462419-Gen- - Network accessline 66
Phrase positively, as Runway's Gen-4 guide recommends ([guide](https://help.runwayml.com/hc/en-us/articles/39789879462419-Gen-4-Video-Prompting-Guide)), and follow the chosen model's own guide. - Network accessline 67
([guide](https://help.runwayml.com/hc/en-us/articles/39789879462419-Gen-4-Video-Prompting-Guide)), and follow the - Network accessline 91
structure in the edit. - **Voice:** save a designed voice through the vendor's persistent voice feature (ElevenLabs, for example, creates a reusable voice ID from a generated preview: [create a voice](https://elevenlabs.io/docs/api-refere - Network accessline 92
- **Voice:** save a designed voice through the vendor's persistent voice feature (ElevenLabs, for example, creates a reusable voice ID from a generated preview: [create a voice](https://elevenlabs.io/docs/api-reference/text-to-voice/creat - Network accessline 93
reusable voice ID from a generated preview: [create a voice](https://elevenlabs.io/docs/api-reference/text-to-voice/create)) - Network accessline 174
the customer for the intended use; a clause making the customer indemnify the vendor is the opposite. - **Free tiers are often non-commercial,** and some outputs stay non-commercial after upgrading ([World Labs terms](https://www.worldlab - Network accessline 175
- **Free tiers are often non-commercial,** and some outputs stay non-commercial after upgrading ([World Labs terms](https://www.worldlabs.ai/terms-of-service)). - **Open weights are not unrestricted:** read each checkpoint's licence. Some - Network accessline 176
([World Labs terms](https://www.worldlabs.ai/terms-of-service)). - Network accessline 177
- **Open weights are not unrestricted:** read each checkpoint's licence. Some carry revenue thresholds, branding duties or territorial limits (one 3D model's licence excludes the EU, the UK and South Korea: [Hunyuan3D-2.1](https://githu - Network accessline 178
or territorial limits (one 3D model's licence excludes the EU, the UK and South Korea: [Hunyuan3D-2.1](https://github.com/Tencent-Hunyuan/Hunyuan3D-2.1/blob/main/LICENSE)). Running locally does not make a hosted wrapper private. - Network accessline 179
[Hunyuan3D-2.1](https://github.com/Tencent-Hunyuan/Hunyuan3D-2.1/blob/main/LICENSE)). Running locally does not make - Network accessline 183
logos in the scene"). - **Automated access:** some services forbid scripted or agent use of their apps ([Midjourney terms](https://docs.midjourney.com/hc/en-us/articles/32083055291277-Terms-of-Service)). Use the - Network accessline 184
- **Automated access:** some services forbid scripted or agent use of their apps ([Midjourney terms](https://docs.midjourney.com/hc/en-us/articles/32083055291277-Terms-of-Service)). Use the documented API or have the person operate the - Network accessline 185
([Midjourney terms](https://docs.midjourney.com/hc/en-us/articles/32083055291277-Terms-of-Service)). Use the - Network accessline 193
- **Disclose** realistic generated or altered people, products, events or behaviour where a viewer could take them as evidence, and follow each platform's labelling rules ([YouTube disclosure policy](https://support.google.com/youtube/a - Network accessline 195
([YouTube disclosure policy](https://support.google.com/youtube/answer/14328491?hl=en-GB)). - Network accessline 206
- **OpenAI GPT Image 2.5** (Sunburst for precise edits, Flare for throughput): custom sizes in multiples of 16, from 1:3 to 3:1, up to 3,840 px a side and 655,360 to 8,294,400 pixels in all, with anything above 2560x1440 marked experime - Network accessline 207
1:3 to 3:1, up to 3,840 px a side and 655,360 to 8,294,400 pixels in all, with anything above 2560x1440 marked experimental; transparent backgrounds ([guide](https://developers.openai.com/api/docs/guides/image-generation)). - **Google Nan - Network accessline 208
experimental; transparent backgrounds ([guide](https://developers.openai.com/api/docs/guides/image-generation)). - Network accessline 209
- **Google Nano Banana 2.1**: reference-led compositions and conversational revisions at 1K-4K ([pricing](https://ai.google.dev/gemini-api/docs/pricing)). - **Black Forest Labs FLUX 3 Image and Klein**: layout control with bounding boxes; - Network accessline 210
([pricing](https://ai.google.dev/gemini-api/docs/pricing)). - Network accessline 211
- **Black Forest Labs FLUX 3 Image and Klein**: layout control with bounding boxes; Klein has open weights under its own commercial terms ([FLUX 3](https://bfl.ai/models/flux-3-image)). - **Midjourney V8.2**: art direction and look develo - Network accessline 212
own commercial terms ([FLUX 3](https://bfl.ai/models/flux-3-image)). - Network accessline 213
- **Midjourney V8.2**: art direction and look development; no automated access under its terms. - **Ideogram 4.5 and Vector**: typography and genuine SVG output ([Vector](https://ideogram.ai/models/vector/)). - **Adobe Firefly Image 5** for - Network accessline 214
- **Ideogram 4.5 and Vector**: typography and genuine SVG output ([Vector](https://ideogram.ai/models/vector/)). - Network accessline 215
- **Adobe Firefly Image 5** for images, and Illustrator's Text to Vector Graphic for editable vectors ([vectors](https://helpx.adobe.com/illustrator/desktop/use-generative-ai/generate-scenes-subjects-and-icons.html)); Adobe's indemnity - Network accessline 216
([vectors](https://helpx.adobe.com/illustrator/desktop/use-generative-ai/generate-scenes-subjects-and-icons.html)); - Network accessline 218
([conditions](https://helpx.adobe.com/legal/product-descriptions/adobe-firefly.html)). - Network accessline 222
- **Google Gemini Omni 1.1 Flash**: conversational generation and editing, extension and interpolation ([model](https://ai.google.dev/gemini-api/docs/models/gemini-omni-flash)). - Network accessline 223
([model](https://ai.google.dev/gemini-api/docs/models/gemini-omni-flash)). - Network accessline 224
- **Google Veo 3.1**: first and last frames and content credentials, on Google's enterprise platform or a partner route; its Gemini API preview endpoints shut down on 2026-10-22 ([video guide](https://ai.google.dev/gemini-api/docs/video)) - Network accessline 225
route; its Gemini API preview endpoints shut down on 2026-10-22 ([video guide](https://ai.google.dev/gemini-api/docs/video)). - Network accessline 226
- **Runway Gen-4.5, Act-Two and Aleph 2.0**: Act-Two transfers a real performance to a character; Aleph edits and relights existing shots ([API pricing](https://docs.dev.runwayml.com/guides/pricing/)). - **Luma Ray3.2**: up to sixteen key - Network accessline 227
relights existing shots ([API pricing](https://docs.dev.runwayml.com/guides/pricing/)). - Network accessline 228
- **Luma Ray3.2**: up to sixteen keyframes, HDR and 16-bit EXR output for compositing ([Ray](https://lumalabs.ai/ray)). - Network accessline 229
- **Seedance 2.5**: up to 30 s with audio and rich image, video and audio references ([release](https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5)). - **Kling 4.0**: long takes with up to t - Network accessline 230
([release](https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5)). - Network accessline 231
- **Kling 4.0**: long takes with up to ten keyframes ([guide](https://kling.ai/blog/kling-4-ai-video-model)). - Network accessline 232
- **FLUX 3 Video**: up to ten keyframes, a cheap draft mode that continues into the final ([overview](https://help.bfl.ai/articles/7342522296-what-is-flux-3)). - **HeyGen Video 1**: economical reference-driven scenes with native sound; fr - Network accessline 233
([overview](https://help.bfl.ai/articles/7342522296-what-is-flux-3)). - Network accessline 234
- **HeyGen Video 1**: economical reference-driven scenes with native sound; free output is non-commercial ([API](https://www.heygen.com/ai-video-api)). - **Open weights:** LTX-2.5 ([model card](https://huggingface.co/Lightricks/LTX-2.5/bl - Network accessline 235
([API](https://www.heygen.com/ai-video-api)). - Network accessline 236
- **Open weights:** LTX-2.5 ([model card](https://huggingface.co/Lightricks/LTX-2.5/blob/main/README.md)) and MiniMax H3 - Network accessline 237
([repository](https://github.com/MiniMax-AI/MiniMax-H3)); at full precision both exceed a typical laptop's GPU - Network accessline 239
revenue-threshold licences. - **The Sora 2 API is gone:** OpenAI shut down the Videos API and its Sora 2 models on 2026-09-24 ([deprecations](https://developers.openai.com/api/docs/deprecations)). - Network accessline 241
([deprecations](https://developers.openai.com/api/docs/deprecations)). - Network accessline 243
**Voice:** ElevenLabs v4 ([models](https://elevenlabs.io/docs/overview/models)), Cartesia Sonic - Network accessline 244
([pricing](https://www.cartesia.ai/pricing)), Google Gemini 3.8 Flash TTS for directed delivery - Network accessline 245
([model](https://ai.google.dev/gemini-api/docs/models/gemini-3.8-flash-tts)), and Chatterbox to run locally under the - Network accessline 246
MIT licence ([repository](https://github.com/resemble-ai/chatterbox)). Cloning conditions differ by route, so read them - Network accessline 249
**Music:** Suno v6 grants commercial rights on paid downloads only ([rights](https://help.suno.com/en/articles/9601665)); - Network accessline 250
Eleven Music's self-serve rights exclude film, TV and radio, so check how its terms classify your use ([music terms](https://elevenlabs.io/music-terms)); Google Lyria 3.5 is cheap for exploration ([guide](https://ai.google.dev/gemini-api/do - Network accessline 251
([music terms](https://elevenlabs.io/music-terms)); Google - Network accessline 252
Lyria 3.5 is cheap for exploration ([guide](https://ai.google.dev/gemini-api/docs/music-generation)); Stable Audio 3 - Network accessline 253
runs locally under a revenue-threshold licence ([licence](https://stability.ai/license)). Udio had disabled downloads - Network accessline 254
at the time of reading ([notice](https://help.udio.com/en/articles/12683565-changes-associated-with-the-universal-music-group-umg-partnership)). - Network accessline 257
**Sound effects:** ElevenLabs Sound Effects, 0.1-30 s with looping ([docs](https://elevenlabs.io/docs/overview/capabilities/sound-effects)); Adobe Firefly sound effects at 48 kHz; Stable - Network accessline 258
([docs](https://elevenlabs.io/docs/overview/capabilities/sound-effects)); Adobe Firefly sound effects at 48 kHz; Stable - Network accessline 264
- **Restoration and upscaling:** Topaz ([pricing](https://www.topazlabs.com/pricing)); DaVinci Resolve Studio's noise - Network accessline 265
reduction, SuperScale and Speed Warp ([Studio](https://www.blackmagicdesign.com/products/davinciresolve/studio)); - Network accessline 266
Neat Video for camera noise; Real-ESRGAN locally ([repository](https://github.com/xinntao/Real-ESRGAN)). - Network accessline 267
- **Interpolation:** Topaz's models, Resolve Speed Warp, or RIFE locally ([repository](https://github.com/hzwer/ECCV2022-RIFE)). - Network accessline 268
- **Matting:** After Effects Object Matte and Roto Brush, Resolve Magic Mask, SAM 3 for segmentation masks to refine into a soft matte, under its own licence ([repository](https://github.com/facebookresearch/sam3)), and Robust Video Mat - Network accessline 269
into a soft matte, under its own licence ([repository](https://github.com/facebookresearch/sam3)), and Robust Video - Network accessline 274
**3D and scenes:** Meshy and Tripo for props to clean up afterwards; World Labs Marble for explorable environments ([docs](https://docs.worldlabs.ai/marble/models)). Use manufacturer CAD or measured modelling for a hero product. - Network accessline 275
([docs](https://docs.worldlabs.ai/marble/models)). Use manufacturer CAD or measured modelling for a hero product.
skills/legible-film/references/grading.md
- Network accessline 155
is scored under Accessibility. BBC subtitle guidance describes roughly 160-180 words per minute for many genres, with editorial adjustments; this is a review prompt, not a pass/fail score or proof for burned text. See [BBC subtitle guidance - Network accessline 156
for many genres, with editorial adjustments; this is a review prompt, not a pass/fail score or proof for burned text. See [BBC subtitle guidance](https://www.bbc.co.uk/accessibility/forproducts/guides/subtitles/) and [BBC research on subtit - Network accessline 157
See [BBC subtitle guidance](https://www.bbc.co.uk/accessibility/forproducts/guides/subtitles/) and - Network accessline 158
[BBC research on subtitle speed](https://downloads.bbc.co.uk/rd/pubs/whp/whp-pdf-files/WHP306.pdf). Cite and quote the - Network accessline 257
Signals: encoded shape and duration, first frame, captions and declared platform; these do not establish current platform limits, safe-zone clearance or muted comprehension. Cite the requirement and the affected frame. Platform overlays and - Network accessline 258
limits, safe-zone clearance or muted comprehension. Cite the requirement and the affected frame. Platform overlays and policies change; verify the current official guide, for example [YouTube upload guidance](https://support.google.com/yout - Network accessline 259
policies change; verify the current official guide, for example [YouTube upload guidance](https://support.google.com/youtube/answer/1722171). - Network accessline 275
red flashes and is not a photosensitivity test. Cite the check, standard and affected interval; a draft transcript cannot establish caption accuracy. For applicable web content, [WCAG 2.2](https://www.w3.org/TR/WCAG22/) requires captions fo - Network accessline 276
affected interval; a draft transcript cannot establish caption accuracy. For applicable web content, [WCAG 2.2](https://www.w3.org/TR/WCAG22/) requires captions for prerecorded synchronized audio except its stated exception, and limits flas - Network accessline 277
[WCAG 2.2](https://www.w3.org/TR/WCAG22/) requires captions for prerecorded synchronized audio except its stated - Network accessline 331
copy of this sidecar. `scopes/index.json` maps waveform and vectorscope pictures to the representative frame and time interval for each automatically detected candidate shot; long cuts cap the scope count and disclose that sampling. [QCTool - Network accessline 332
interval for each automatically detected candidate shot; long cuts cap the scope count and disclose that sampling. [QCTools filter descriptions](https://bavc.github.io/qctools/filter_descriptions.html) inspired these diagnostics; their mean - Network accessline 333
[QCTools filter descriptions](https://bavc.github.io/qctools/filter_descriptions.html) inspired these diagnostics;
skills/legible-film/references/kinetic-type.md
- Network accessline 151
count); dark bars below 160 cd/m² with at least 20 cd/m² between light and dark; and more than 40% of the screen when still, or more than 25% when it changes direction, oscillates, flashes or reverses contrast. Smooth flow in one direct - Network accessline 152
when still, or more than 25% when it changes direction, oscillates, flashes or reverses contrast. Smooth flow in one direction is exempt ([Ofcom, Section Two guidance, Annex 1](https://www.ofcom.org.uk/siteassets/resources/documents/tv-ra - Network accessline 153
direction is exempt ([Ofcom, Section Two guidance, Annex 1](https://www.ofcom.org.uk/siteassets/resources/documents/tv-radio-and-on-demand/broadcast-guidance/programme-guidance/broadcast-code-guidance/section-2-guidance-notes.pdf)).
skills/legible-film/references/kit.md
- Network accessline 49
6. **Stills** of the hardest frames in every size, at full size and at feed size, judged as [picture](picture.md) says: with the preview served, `node "<SKILL_DIR>/scripts/film_capture.mjs" stills http://127.0.0.1:8000/?render --at 2. - Network accessline 50
says: with the preview served, `node "<SKILL_DIR>/scripts/film_capture.mjs" stills http://127.0.0.1:8000/?render --at 2.5,b12 --size 1080x1920 --out qa/stills`, or a quick `make_film.py --preview` and `frame_sheet.py` on its renders. - Network accessline 51
`node "<SKILL_DIR>/scripts/film_capture.mjs" stills http://127.0.0.1:8000/?render --at 2.5,b12 --size 1080x1920
skills/legible-film/references/loop.md
- Network accessline 57
`screen.py serve PROJECT --open` for live mode, where their notes and ticks reach the project folder directly and the page follows new versions. When the person reviews away from this machine or with others (a client, an editor, a team), [F - Network accessline 58
page follows new versions. When the person reviews away from this machine or with others (a client, an editor, a team), [Flask](https://flask.do) is the recommended collaboration and feedback layer: post each version there and bring every n - Network accessline 59
team), [Flask](https://flask.do) is the recommended collaboration and feedback layer: post each version there and
skills/legible-film/references/review.md
- Network accessline 32
**Reviewing with others: Flask.** The Screening Room is local and private; when the person reviews away from this machine, or with a client, editor or team, use [Flask](https://flask.do), the recommended collaboration and feedback - Network accessline 33
machine, or with a client, editor or team, use [Flask](https://flask.do), the recommended collaboration and feedback - Network accessline 34
layer. Each version goes up as the next version of one asset, and reviewers watch it at speed and leave notes pinned to moments, with drawings on the frame and replies. An agent works it through Flask's MCP server (`https://api.flask.do/api - Network accessline 36
(`https://api.flask.do/api/mcp/mcp` when checked on 2026-10-31; the person signs in once):
skills/legible-film/references/sound.md
- Network accessline 247
You cannot hear, but you can listen by instrument. Measure, describe and compare the sound, and say what each measure cannot tell. `listen.py` follows [earshot](https://github.com/Leonxlnx/earshot)'s shape and uses its - Network accessline 248
measure cannot tell. `listen.py` follows [earshot](https://github.com/Leonxlnx/earshot)'s shape and uses its
skills/legible-film/references/sources.md
- Network accessline 10
flash thresholds; 0.006 steradians, about 25% of a 10° field; 341 x 256 px at 1024 x 768); 2.3.3 Animation from Interactions (names parallax and non-essential motion); 1.4.1 Use of Color; 1.4.3 Contrast (4.5:1, 3:1 large text); 1.4.11 N - Network accessline 11
Interactions (names parallax and non-essential motion); 1.4.1 Use of Color; 1.4.3 Contrast (4.5:1, 3:1 large text); 1.4.11 Non-text Contrast (3:1); 1.2.2 Captions (Prerecorded). https://www.w3.org/TR/WCAG22/ - WCAG 2.2's note on saturated - Network accessline 12
text); 1.4.11 Non-text Contrast (3:1); 1.2.2 Captions (Prerecorded). https://www.w3.org/TR/WCAG22/ - Network accessline 14
above 0.2. `flash_scan.py` implements the WCAG 2.0 working formula ((R−G−B)×320 > 20 where R/(R+G+B) ≥ 0.8), so its red results are a screen, not a reading of the current definition. - Photosensitivity tools: Electronic Arts IRIS (https:/ - Network accessline 15
its red results are a screen, not a reading of the current definition. - Photosensitivity tools: Electronic Arts IRIS (https://github.com/electronicarts/IRIS); Trace Center PEAT (https://trace.umd.edu/peat/); Harding FPA (https://www.hard - Network accessline 16
- Photosensitivity tools: Electronic Arts IRIS (https://github.com/electronicarts/IRIS); Trace Center PEAT - Network accessline 17
(https://trace.umd.edu/peat/); Harding FPA (https://www.hardingfpa.com/); UK ASA on flashing images in ads - Network accessline 18
(https://www.asa.org.uk/news/flashing-images-in-advertising.html). - Network accessline 22
- [ITU-R BT.1359-1](https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.1359-1-199811-I%21%21PDF-E.pdf), Relative - Network accessline 23
timing of sound and vision for broadcasting: detectability about +45 ms (sound early) to −125 ms (sound late), acceptability about +90 ms to −185 ms. - [EBU R37-2007](https://tech.ebu.ch/publications/r037): 5 ms early to 15 ms late per st - Network accessline 24
acceptability about +90 ms to −185 ms. - [EBU R37-2007](https://tech.ebu.ch/publications/r037): 5 ms early to 15 ms late per stage; 40 ms early to 60 ms late at emission. - Network accessline 25
- [EBU R37-2007](https://tech.ebu.ch/publications/r037): 5 ms early to 15 ms late per stage; 40 ms early to 60 ms - Network accessline 26
late at emission. - [ITU-R BS.1770-5](https://www.itu.int/rec/R-REC-BS.1770/en) (11/2023): loudness and true-peak measurement. - [EBU R128-2023](https://tech.ebu.ch/publications/r128) (−23.0 LUFS, true peak ≤ −1 dBTP) and - Network accessline 27
- [ITU-R BS.1770-5](https://www.itu.int/rec/R-REC-BS.1770/en) (11/2023): loudness and true-peak measurement. - Network accessline 28
- [EBU R128-2023](https://tech.ebu.ch/publications/r128) (−23.0 LUFS, true peak ≤ −1 dBTP) and [R128 s1-2020](https://tech.ebu.ch/publications/r128s1) (short-form: −23 LUFS, maximum short-term −18 LUFS). EBU's site may refuse automated - Network accessline 29
[R128 s1-2020](https://tech.ebu.ch/publications/r128s1) (short-form: −23 LUFS, maximum short-term −18 LUFS). EBU's site may refuse automated requests; open the links in a browser. - ATSC A/85:2026-07 (−24 LKFS; true peak below −2 dBTP; st - Network accessline 31
- ATSC A/85:2026-07 (−24 LKFS; true peak below −2 dBTP; streaming annex −23 to −27 LKFS), read from the ATSC PDF; ATSC documents are listed at atsc.org. - [EBU Tech 3344](https://tech.ebu.ch/publications/tech3344): lossy codecs raise true - Network accessline 32
ATSC documents are listed at atsc.org. - [EBU Tech 3344](https://tech.ebu.ch/publications/tech3344): lossy codecs raise true peak, more at low bitrates. - [Spotify, Loudness normalization](https://support.spotify.com/us/artists/article/loud - Network accessline 33
- [EBU Tech 3344](https://tech.ebu.ch/publications/tech3344): lossy codecs raise true peak, more at low bitrates. - Network accessline 34
- [Spotify, Loudness normalization](https://support.spotify.com/us/artists/article/loudness-normalization/) (music): - Network accessline 39
- [Netflix, English (USA) Timed Text Style Guide](https://partnerhelp.netflixstudios.com/hc/en-us/articles/217350977-English-USA-Timed-Text-Style-Guide) - Network accessline 40
(revised 2025-12-19): 42 characters per line; up to 20 characters per second (adult) and 17 (children's). [General requirements](https://partnerhelp.netflixstudios.com/hc/en-us/articles/215758617-Timed-Text-Style-Guide-General-Requirement - Network accessline 41
[General requirements](https://partnerhelp.netflixstudios.com/hc/en-us/articles/215758617-Timed-Text-Style-Guide-General-Requirements): - Network accessline 42
a minimum of 5/6 s (another Netflix page says 20 frames, about 0.8 s), a maximum of 7 s per event, two lines. - Brysbaert, M. (2019). How many words do we read per minute? A review and meta-analysis of reading rate. Journal of Memory and - Network accessline 44
of Memory and Language, 109, 104047. https://doi.org/10.1016/j.jml.2019.104047 (238 wpm silent non-fiction). - Network accessline 71
- YouTube recommended upload encoding settings. https://support.google.com/youtube/answer/1722171 - Network accessline 72
- FFmpeg documentation (formats: `+faststart`; filters: `ebur128`, `loudnorm`, `psnr`, `libvmaf`, `subtitles`, `xfade`, `whisper`). https://ffmpeg.org/documentation.html - Mux, "Your browser and my browser see different colors" (2020): un - Network accessline 73
`xfade`, `whisper`). https://ffmpeg.org/documentation.html - Network accessline 74
- Mux, "Your browser and my browser see different colors" (2020): untagged video renders differently by browser. https://www.mux.com/blog/your-browser-and-my-browser-see-different-colors - Verified on FFmpeg 9.0.2 while writing this skill - Network accessline 75
https://www.mux.com/blog/your-browser-and-my-browser-see-different-colors - Network accessline 83
- LinkedIn video ads specs: https://www.linkedin.com/help/lms/answer/a424737 - Network accessline 84
- Meta ads guide, Instagram Reels video ads: https://www.facebook.com/business/ads-guide/ - Network accessline 85
- TikTok in-feed ads specifications: https://ads.tiktok.com/resources/help/article/tiktok-auction-in-feed-ads - Network accessline 89
HyperFrames (https://github.com/heygen-com/hyperframes), Remotion (https://www.remotion.dev/docs and its - Network accessline 90
LICENSE.md), Blender (https://www.blender.org), OpenTimelineIO (https://github.com/AcademySoftwareFoundation/OpenTimelineIO), - Network accessline 91
Playwright (https://playwright.dev/docs/videos), WhisperX (https://github.com/m-bain/whisperX), VMAF - Network accessline 92
(https://github.com/Netflix/vmaf), Demucs (https://github.com/adefossez/demucs, licence note of 2026-10-26).
skills/legible-film/references/studio.md
- Network accessline 135
film. Measure each motion reference's pace with `motion_scan.py` (still share, longest still stretch, cuts per 10 s; [kinetic-type](kinetic-type.md) §4) and record the numbers beside it. Name a look by its cause (halation, bleach bypa - Network accessline 136
10 s; [kinetic-type](kinetic-type.md) §4) and record the numbers beside it. Name a look by its cause (halation, bleach bypass, halftone, a dolly zoom): the [VFX Atlas](https://atlas.letz.ai/) describes 504 effects and looks from 1820 - Network accessline 137
bleach bypass, halftone, a dolly zoom): the [VFX Atlas](https://atlas.letz.ai/) describes 504 effects and looks
skills/legible-film/scripts/NOTICE
- Executable scriptline 1
Executable file
skills/legible-film/scripts/assemble.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/blank_scan.py
skills/legible-film/scripts/captions.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 1296
[Credential-related source omitted] - Access to secretsline 1525
[Credential-related source omitted] - Possible obfuscationline 1852
mask_bytes = base64.b64decode(encoded_mask, validate=True)
skills/legible-film/scripts/check.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/compare_versions.py
skills/legible-film/scripts/conform.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/cue_list.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 496
def default_fetch(url): request = urllib.request.Request(url, headers={'User-Agent': 'legible-film cue_list freeze'}) - Network accessline 497
request = urllib.request.Request(url, headers={'User-Agent': 'legible-film cue_list freeze'}) - Network accessline 498
with urllib.request.urlopen(request, timeout=30) as response: - Network accessline 524
continue try: data = fetch(url) - Network accessline 525
try: data = fetch(url) except Exception as error: # any fetch failure leaves the reference live and the binding unverified - Network accessline 526
data = fetch(url) - Access to secretsline 642
[Credential-related source omitted]
skills/legible-film/scripts/cue_onsets.py
skills/legible-film/scripts/cut.py
skills/legible-film/scripts/delivery_check.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/dialogue_io.py
skills/legible-film/scripts/exchange.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/film_capture.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 23
node film_capture.mjs info http://127.0.0.1:8000/?render - Network accessline 24
node film_capture.mjs analyse --url http://127.0.0.1:8000/?render - Network accessline 253
} const url=new URL(a.url||process.env.LF_URL||''); if(url.protocol!=='http:'||url.hostname!=='127.0.0.1')throw Error('page must be http://127.0.0.1:<port>/'); - Network accessline 254
const url=new URL(a.url||process.env.LF_URL||''); if(url.protocol!=='http:'||url.hostname!=='127.0.0.1')throw Error('page must be http://127.0.0.1:<port>/'); if(requestedSize) {url.searchParams.set('w',String(requestedSize.width));u - Network accessline 255
if(url.protocol!=='http:'||url.hostname!=='127.0.0.1')throw Error('page must be http://127.0.0.1:<port>/'); - Network accessline 307
node film_capture.mjs cues film/ --out film/cues.json --source timelines --verify node film_capture.mjs cues film/ --out cues.json --source declared --ready __cues_ready --global __cues --fps 60 node film_capture.mjs cues http://127.0.0 - Network accessline 309
node film_capture.mjs cues http://127.0.0.1:8000/index.html?render --root film/ --out cues.json --source lf - Network accessline 434
const server = http.createServer((req, res) => { let rel; try { rel = decodeURIComponent(new URL(req.url, 'http://127.0.0.1').pathname); } catch { res.writeHead(400); res.end(); return; } - Network accessline 435
let rel; try { rel = decodeURIComponent(new URL(req.url, 'http://127.0.0.1').pathname); } catch { res.writeHead(400); res.end(); return; } if (rel.endsWith('/')) rel += 'index.html'; - Network accessline 436
try { rel = decodeURIComponent(new URL(req.url, 'http://127.0.0.1').pathname); } catch { res.writeHead(400); res.end(); return; } - Network accessline 445
}); await new Promise((resolve, reject) => { server.once('error', reject); server.listen(0, '127.0.0.1', resolve); }); return {server, origin: `http://127.0.0.1:${server.address().port}`, seen}; - Network accessline 446
await new Promise((resolve, reject) => { server.once('error', reject); server.listen(0, '127.0.0.1', resolve); }); return {server, origin: `http://127.0.0.1:${server.address().port}`, seen}; } - Network accessline 447
return {server, origin: `http://127.0.0.1:${server.address().port}`, seen}; - Network accessline 506
host.setAttribute('data-lf-mounted', ''); const src = host.getAttribute('data-composition-src'); const r = await fetch(src); - Network accessline 507
const src = host.getAttribute('data-composition-src'); const r = await fetch(src); if (!r.ok) throw Error('scene file ' + src + ' could not be read (' + r.status + ')'); - Network accessline 508
const r = await fetch(src);
skills/legible-film/scripts/film_check.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 87
(r'(?<![\w-])animation(-name)?\s*:', 'CSS animation'), (r'@keyframes', 'CSS @keyframes'), (r'\bfetch\s*\(', 'fetch (network)'), - Network accessline 88
(r'@keyframes', 'CSS @keyframes'), (r'\bfetch\s*\(', 'fetch (network)'), (r'XMLHttpRequest|\bnew\s+WebSocket\b|\bEventSource\b', 'network request'), - Network accessline 89
(r'\bfetch\s*\(', 'fetch (network)'), - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 140
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted] - Network accessline 211
raise RuntimeError('the cue export needs Node and film_capture.mjs beside this script') target = os.path.join(folder, 'cues.json') url = f'http://127.0.0.1/index.html?render&w={w}&h={h}' + (f'&res={a.res}' if a.res else '') - Network accessline 212
target = os.path.join(folder, 'cues.json') url = f'http://127.0.0.1/index.html?render&w={w}&h={h}' + (f'&res={a.res}' if a.res else '') cmd = [node, capture, 'cues', url, '--root', folder, '--out', target, '--source', 'lf', '--size' - Network accessline 213
url = f'http://127.0.0.1/index.html?render&w={w}&h={h}' + (f'&res={a.res}' if a.res else '') - Network accessline 245
httpd = None if file_only else serve(folder) url = (Path(folder, 'index.html').as_uri() if file_only else f'http://127.0.0.1:{httpd.server_address[1]}/index.html') - Network accessline 246
url = (Path(folder, 'index.html').as_uri() if file_only else f'http://127.0.0.1:{httpd.server_address[1]}/index.html') url += f'?render&w={w}&h={h}' + (f'&res={a.res}' if a.res else '') - Network accessline 247
f'http://127.0.0.1:{httpd.server_address[1]}/index.html') - Access to secretsline 274
[Credential-related source omitted] - Network accessline 448
else: httpd = serve(kept) url = f'http://127.0.0.1:{httpd.server_address[1]}/index.html' - Network accessline 449
httpd = serve(kept) url = f'http://127.0.0.1:{httpd.server_address[1]}/index.html' url += f'?render&w={w}&h={h}' + (f'&res={a.res}' if a.res else '') - Network accessline 450
url = f'http://127.0.0.1:{httpd.server_address[1]}/index.html' - Access to secretsline 453
[Credential-related source omitted]
skills/legible-film/scripts/film_render.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 331
raise ValueError('--page must stay inside the film folder') page = a.page + ('&' if '?' in a.page else '?') + 'render' url = f'http://127.0.0.1:{server.server_port}/{page}' - Network accessline 332
page = a.page + ('&' if '?' in a.page else '?') + 'render' url = f'http://127.0.0.1:{server.server_port}/{page}' try: - Network accessline 333
url = f'http://127.0.0.1:{server.server_port}/{page}'
skills/legible-film/scripts/flash_scan.py
skills/legible-film/scripts/frame_sheet.py
skills/legible-film/scripts/grade.py
skills/legible-film/scripts/kit_selftest.py
skills/legible-film/scripts/listen.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/look.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/make_film.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 227
[Credential-related source omitted] - Dangerous shell operationline 309
'ffmpeg': pick('winget install Gyan.FFmpeg', 'brew install ffmpeg', 'sudo apt install ffmpeg'), - Dangerous shell operationline 310
'node': pick('winget install OpenJS.NodeJS.LTS', 'brew install node', 'sudo apt install nodejs npm'), - Access to secretsline 711
[Credential-related source omitted] - Network accessline 938
try: node = find_tool('node', self.a.node) url = f'http://127.0.0.1:{server.server_port}/index.html?render' - Network accessline 939
node = find_tool('node', self.a.node) url = f'http://127.0.0.1:{server.server_port}/index.html?render' code, text = self.run('info', [node, HERE / 'film_capture.mjs', 'info', url, '--size', label]) - Network accessline 940
url = f'http://127.0.0.1:{server.server_port}/index.html?render'
skills/legible-film/scripts/make_sound_kit.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/map.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/matte.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 46
MODEL_NAME = 'modnet.onnx' MODEL_SHA256 = '07c308cf0fc7e6e8b2065a12ed7fc07e1de8febb7dc7839d7b7f15dd66584df9' MODEL_URL = ('https://huggingface.co/Xenova/modnet/resolve/' - Network accessline 47
MODEL_SHA256 = '07c308cf0fc7e6e8b2065a12ed7fc07e1de8febb7dc7839d7b7f15dd66584df9' MODEL_URL = ('https://huggingface.co/Xenova/modnet/resolve/' 'fa2fa546052fba4c08921230a26cc69a333fca12/onnx/model.onnx') - Network accessline 48
MODEL_URL = ('https://huggingface.co/Xenova/modnet/resolve/' - Network accessline 49
'fa2fa546052fba4c08921230a26cc69a333fca12/onnx/model.onnx') MODEL_CARD = 'https://huggingface.co/Xenova/modnet' CODE_LICENCE = 'https://github.com/ZHKKKe/MODNet/blob/master/LICENSE' - Network accessline 50
MODEL_CARD = 'https://huggingface.co/Xenova/modnet' - Network accessline 51
CODE_LICENCE = 'https://github.com/ZHKKKe/MODNet/blob/master/LICENSE'
skills/legible-film/scripts/mix_cues.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/motion_blur.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/motion_scan.py
skills/legible-film/scripts/new_film.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 140
serve = project.python_command(['-m', 'http.server', '--bind', '127.0.0.1', '--directory', out, '8000']) print(f' 3. Preview: {serve}') print(' then open http://127.0.0.1:8000/') - Network accessline 141
print(f' 3. Preview: {serve}') print(' then open http://127.0.0.1:8000/') print(' (keys: space play, , . frame, arrows beat, 0-9 jump, S safe area, R reading states, L luminance).') - Network accessline 142
print(' then open http://127.0.0.1:8000/')
skills/legible-film/scripts/onion_frames.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/project.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 1691
[Credential-related source omitted] - Access to secretsline 1777
[Credential-related source omitted] - Network accessline 1778
preload = Path(__file__).with_name('render_block.cjs').resolve().as_posix() env['NODE_OPTIONS'] = f'--require "{preload}"' + (' ' + env['NODE_OPTIONS'] if env.get('NODE_OPTIONS') else '') url = f'http://127.0.0.1:{sink.server_addres - Network accessline 1779
env['NODE_OPTIONS'] = f'--require "{preload}"' + (' ' + env['NODE_OPTIONS'] if env.get('NODE_OPTIONS') else '') url = f'http://127.0.0.1:{sink.server_address[1]}' for key in ('HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY', 'http_proxy', ' - Network accessline 1780
url = f'http://127.0.0.1:{sink.server_address[1]}'
skills/legible-film/scripts/qc_file.py
skills/legible-film/scripts/reframe.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/region_check.py
skills/legible-film/scripts/render_block.cjs
- Executable scriptline 1
Executable file
skills/legible-film/scripts/render_common.py
skills/legible-film/scripts/screen.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 30
import hashlib import html import http.client - Network accessline 31
import html import http.client import http.cookies - Network accessline 32
import http.client - Network accessline 1277
raw = urllib.parse.unquote(urllib.parse.urlsplit(self.path).path) if raw == '/favicon.ico': icon = (b'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">' - Network accessline 1278
if raw == '/favicon.ico': icon = (b'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">' b'<rect width="64" height="64" rx="10" fill="#3b5cf6"/>' - Network accessline 1279
icon = (b'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">' - Network accessline 1357
origin = self.headers.get('Origin') if origin and origin not in {f'http://127.0.0.1:{self.server.server_port}', - Network accessline 1358
if origin and origin not in {f'http://127.0.0.1:{self.server.server_port}', - Network accessline 1359
f'http://localhost:{self.server.server_port}'}: - Network accessline 1456
return False path = '/screening/index.html' connection = http.client.HTTPConnection('127.0.0.1', port, timeout=1) - Network accessline 1457
path = '/screening/index.html' connection = http.client.HTTPConnection('127.0.0.1', port, timeout=1) try: - Network accessline 1458
connection = http.client.HTTPConnection('127.0.0.1', port, timeout=1) - Network accessline 1468
finally: connection.close() except (OSError, ValueError, TypeError, http.client.HTTPException): - Network accessline 1469
connection.close() except (OSError, ValueError, TypeError, http.client.HTTPException): return False - Network accessline 1470
except (OSError, ValueError, TypeError, http.client.HTTPException): - Network accessline 1502
server.server_close() raise url = 'http:' + '//127.0.0.1:' + str(server.server_port) + '/screening/index.html?t=' + token - Network accessline 1503
raise url = 'http:' + '//127.0.0.1:' + str(server.server_port) + '/screening/index.html?t=' + token print(url, flush=True) - Network accessline 1504
url = 'http:' + '//127.0.0.1:' + str(server.server_port) + '/screening/index.html?t=' + token - Network accessline 2548
function expired(){let banner=$('connection');banner.hidden=false; banner.textContent="This link has expired; reopen the room from the agent's link."} async function post(path,body){let response=await fetch('../api/'+path,{method:'POST', - Network accessline 2549
banner.textContent="This link has expired; reopen the room from the agent's link."} async function post(path,body){let response=await fetch('../api/'+path,{method:'POST', headers:{'Content-Type':'application/json'},body:JSON.stringify(bod - Network accessline 2550
async function post(path,body){let response=await fetch('../api/'+path,{method:'POST', - Network accessline 2590
}; let snapshot=JSON.stringify(data);async function poll(){try{ let r=await fetch('../api/status',{cache:'no-store'});if(r.status===403){expired();return}if(!r.ok){ - Network accessline 2591
let snapshot=JSON.stringify(data);async function poll(){try{ let r=await fetch('../api/status',{cache:'no-store'});if(r.status===403){expired();return}if(!r.ok){ $('connection').hidden=false; - Network accessline 2592
let r=await fetch('../api/status',{cache:'no-store'});if(r.status===403){expired();return}if(!r.ok){
skills/legible-film/scripts/selftest.py
skills/legible-film/scripts/selftest_cases/_browser.py
- Executable scriptline 1
Executable file - Access to secretsline 16
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted]
skills/legible-film/scripts/selftest_cases/attach_mix.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/captions.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/chain.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/selftest_cases/check.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/conform.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/cue_export.py
- Executable scriptline 1
Executable file - Access to secretsline 72
[Credential-related source omitted] - Network accessline 175
text[-200:]) runtime = page_copy(root / 'runtime-fetch', html={"window.__timelines = window.__timelines || {};\n(function () {": "window.__timelines = window.__timelines || {};\nfetch('https://' + 'example.com/lf-fixture.json'). - Network accessline 176
runtime = page_copy(root / 'runtime-fetch', html={"window.__timelines = window.__timelines || {};\n(function () {": "window.__timelines = window.__timelines || {};\nfetch('https://' + 'example.com/lf-fixture.json').catch(() => {});\ - Network accessline 177
"window.__timelines = window.__timelines || {};\nfetch('https://' + 'example.com/lf-fixture.json').catch(() => {});\n(function () {"}) - Network accessline 201
readme = '<!doctype html><title>notes</title><script src="http://example.com/tracker.js"></script>\n' \ - Network accessline 202
'<link rel="stylesheet" href="http://example.com/theme.css">\n' - Network accessline 220
"s.src = 'late/' + 'later.js'; document.head.appendChild(s); })();\n(function () {"}) (late / 'late').mkdir() (late / 'late' / 'later.js').write_text('if (false) import("https://example.com/unpinned/later.js");\n', encoding='utf-8') - Network accessline 221
(late / 'late').mkdir() (late / 'late' / 'later.js').write_text('if (false) import("https://example.com/unpinned/later.js");\n', encoding='utf-8') code, text, doc = export(late) - Network accessline 222
(late / 'late' / 'later.js').write_text('if (false) import("https://example.com/unpinned/later.js");\n', encoding='utf-8') - Access to secretsline 304
[Credential-related source omitted]
skills/legible-film/scripts/selftest_cases/cues.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/custody.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/cut.py
skills/legible-film/scripts/selftest_cases/cut_record.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/dialogue.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/dialogue_baseline.txt
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/selftest_cases/exchange.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/exchange_write.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/firstrun.py
skills/legible-film/scripts/selftest_cases/flash.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/footage.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/gaps.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/selftest_cases/grade.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/identity.py
- Executable scriptline 1
Executable file - Network accessline 229
net = root / 'freeze-net' / 'page' net.mkdir(parents=True) pinned = 'https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js' - Network accessline 230
net.mkdir(parents=True) pinned = 'https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js' (net / 'index.html').write_text(f'<!doctype html><script src="{pinned}"></script>\n' - Network accessline 231
pinned = 'https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js' - Network accessline 232
(net / 'index.html').write_text(f'<!doctype html><script src="{pinned}"></script>\n' '<a href="https://example.com/about">about</a>\n', encoding='utf-8') fetched = [] - Network accessline 233
'<a href="https://example.com/about">about</a>\n', encoding='utf-8') - Network accessline 236
def fetch(url): - Network accessline 250
loose.mkdir(parents=True) (loose.parent / 'shared.js').write_text('// shared\n', encoding='utf-8') (loose / 'index.html').write_text('<!doctype html><script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.js">' - Network accessline 251
(loose.parent / 'shared.js').write_text('// shared\n', encoding='utf-8') (loose / 'index.html').write_text('<!doctype html><script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.js">' '</script> - Network accessline 252
(loose / 'index.html').write_text('<!doctype html><script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.js">' '</script><script src="../shared.js"></script>\n', encoding='utf-8') record_loose = - Network accessline 339
data = root / 'data-urls' data.mkdir() (data / 'index.html').write_bytes(b'<!doctype html><p data-href="https://example.com/p">x</p>' - Network accessline 340
data.mkdir() (data / 'index.html').write_bytes(b'<!doctype html><p data-href="https://example.com/p">x</p>' b'<script src="app.js"></script>\n') - Network accessline 341
(data / 'index.html').write_bytes(b'<!doctype html><p data-href="https://example.com/p">x</p>' - Network accessline 342
b'<script src="app.js"></script>\n') (data / 'app.js').write_bytes(b'const sources = ["https://example.com/a.json", \'https://cdn.example.org/x.png\'];\n' b'const link = `see https://example.net/docs`;\ - Network accessline 343
(data / 'app.js').write_bytes(b'const sources = ["https://example.com/a.json", \'https://cdn.example.org/x.png\'];\n' - Network accessline 344
b'const link = `see https://example.net/docs`;\n') (data / 'facts.json').write_bytes(b'{"site": "https://example.com", "logo": "https://example.com/logo.svg"}\n') plain = cl.freeze(data, fetch=lambda url: b'') - Network accessline 345
(data / 'facts.json').write_bytes(b'{"site": "https://example.com", "logo": "https://example.com/logo.svg"}\n') plain = cl.freeze(data, fetch=lambda url: b'') record('cue_list: URLs in data strings (a JS array, a template string, a - Network accessline 352
(loads / 'index.html').write_bytes( b'<!doctype html><link rel="stylesheet" href="style.css">' b'<img srcset="https://a.example/1.png 1x, https://a.example/2.png 2x" src="local.png">' - Network accessline 353
b'<!doctype html><link rel="stylesheet" href="style.css">' b'<img srcset="https://a.example/1.png 1x, https://a.example/2.png 2x" src="local.png">' b'<video poster="https://a.example/p.jpg"></video>' - Network accessline 354
b'<img srcset="https://a.example/1.png 1x, https://a.example/2.png 2x" src="local.png">' - Network accessline 355
b'<video poster="https://a.example/p.jpg"></video>' - Network accessline 356
b'<style>.x{background:url("https://a.example/inline.png")}</style>' - Network accessline 357
b'<script type="module" src="main.js"></script>\n') (loads / 'style.css').write_bytes(b'@import "https://fonts.example/x.css";\n.b{background:url(https://a.example/bg.png)}\n') (loads / 'main.js').write_bytes(b"import x from 'https: - Network accessline 358
(loads / 'style.css').write_bytes(b'@import "https://fonts.example/x.css";\n.b{background:url(https://a.example/bg.png)}\n') - Network accessline 359
(loads / 'main.js').write_bytes(b"import x from 'https://esm.example/m.js';\n" - Network accessline 360
b'export { y } from "https://esm.example/n.js";\n' - Network accessline 361
b"const later = () => import('https://esm.example/dyn.js');\n") (loads / 'local.png').write_bytes(b'png') positions = cl.freeze(loads, fetch=lambda url: b'') - Network accessline 362
(loads / 'local.png').write_bytes(b'png') positions = cl.freeze(loads, fetch=lambda url: b'') wanted = {'https://a.example/1.png', 'https://a.example/2.png', 'https://a.example/p.jpg', - Network accessline 363
positions = cl.freeze(loads, fetch=lambda url: b'') wanted = {'https://a.example/1.png', 'https://a.example/2.png', 'https://a.example/p.jpg', 'https://a.example/inline.png', 'https://fonts.example/x.css', 'https://a.examp - Network accessline 364
wanted = {'https://a.example/1.png', 'https://a.example/2.png', 'https://a.example/p.jpg', - Network accessline 365
'https://a.example/inline.png', 'https://fonts.example/x.css', 'https://a.example/bg.png', - Network accessline 366
'https://esm.example/m.js', 'https://esm.example/n.js', 'https://esm.example/dyn.js'}
skills/legible-film/scripts/selftest_cases/library.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 216
if '/v1/audio/' in url: return json.dumps({'results': [dict(id=c, license=c, license_version='1.0' if c == 'cc0' else '4.0', duration=550, url='https://example.org/' + c, title='Fixture', creator='Fixture autho - Network accessline 217
return json.dumps({'results': [dict(id=c, license=c, license_version='1.0' if c == 'cc0' else '4.0', duration=550, url='https://example.org/' + c, title='Fixture', creator='Fixture author', foreign_landin - Network accessline 218
duration=550, url='https://example.org/' + c, title='Fixture', creator='Fixture author', foreign_landing_url='https://example.org/source') for c in ('by-nc', 'by-nd', 'by-sa', 'cc0', 'by')]}).encode() return (root - Network accessline 219
foreign_landing_url='https://example.org/source') for c in ('by-nc', 'by-nd', 'by-sa', 'cc0', 'by')]}).encode()
skills/legible-film/scripts/selftest_cases/lock.py
skills/legible-film/scripts/selftest_cases/look.py
- Executable scriptline 1
Executable file - Network accessline 35
edited = look.replace('- The feeling in three words:', '- The feeling in three words: calm, exact, warm') (root / 'look.md').write_text(edited, encoding='utf-8') code, output = tool('look.py', 'add', root, '--link', 'https://example - Network accessline 36
(root / 'look.md').write_text(edited, encoding='utf-8') code, output = tool('look.py', 'add', root, '--link', 'https://example.com/a-film', '--note', 'liked its pace') code2, output2 = tool('look.py', 'set', root, 'R01', '--mode', ' - Network accessline 37
code, output = tool('look.py', 'add', root, '--link', 'https://example.com/a-film', '--note', 'liked its pace') - Network accessline 43
code == code2 == 0 and 'calm, exact, warm' in after and '| L01 |' in after and 'recreate closely' in after and not list((root / 'refs').glob('L01*')) and next(row for row in index['refs'] if row['id'] == 'L01').get('ur - Network accessline 44
and 'recreate closely' in after and not list((root / 'refs').glob('L01*')) and next(row for row in index['refs'] if row['id'] == 'L01').get('url') == 'https://example.com/a-film', output + output2 + after[-500:]) - Network accessline 45
and next(row for row in index['refs'] if row['id'] == 'L01').get('url') == 'https://example.com/a-film',
skills/legible-film/scripts/selftest_cases/make.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 317
[Credential-related source omitted] - Access to secretsline 318
[Credential-related source omitted] - Access to secretsline 323
[Credential-related source omitted] - Access to secretsline 325
[Credential-related source omitted] - Access to secretsline 865
[Credential-related source omitted]
skills/legible-film/scripts/selftest_cases/map.py
skills/legible-film/scripts/selftest_cases/matte.py
skills/legible-film/scripts/selftest_cases/outputs.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/project.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/qcfix.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/readers.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/record.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/register.py
- Executable scriptline 1
Executable file - Network accessline 51
const value = f => flags.includes(f) ? flags[flags.indexOf(f) + 1] : null; if (value('--edit-live')) fs.appendFileSync(value('--edit-live'), '\n<!-- edited during the render -->\n'); if (value('--fetch')) { try { await fetch(value('--fetch' - Network accessline 52
if (value('--edit-live')) fs.appendFileSync(value('--edit-live'), '\n<!-- edited during the render -->\n'); if (value('--fetch')) { try { await fetch(value('--fetch')); } catch (e) { console.error('fetch refused: ' + (e.cause?.code || e.mes - Network accessline 53
if (value('--fetch')) { try { await fetch(value('--fetch')); } catch (e) { console.error('fetch refused: ' + (e.cause?.code || e.message)); } } - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 119
[Credential-related source omitted] - Network accessline 360
check_page(hf_fetch) code, text = add(root / 'project-fetch', '--cues', hf_fetch / 'cues.json', '--file', root / 'renders' / 'fetch.mp4', '--render', stub_cmd('--fetch', 'https://example.com/lf-during-render - Network accessline 361
code, text = add(root / 'project-fetch', '--cues', hf_fetch / 'cues.json', '--file', root / 'renders' / 'fetch.mp4', '--render', stub_cmd('--fetch', 'https://example.com/lf-during-render.json')) record('regi - Network accessline 362
'--render', stub_cmd('--fetch', 'https://example.com/lf-during-render.json')) - Network accessline 365
and 'the network (blocked): example.com:443' in text, text[-300:]) code, text = add(root / 'project-fetch', '--cues', hf_fetch / 'cues.json', '--file', root / 'renders' / 'fetch-b.mp4', '--render', stub_cmd( - Network accessline 366
code, text = add(root / 'project-fetch', '--cues', hf_fetch / 'cues.json', '--file', root / 'renders' / 'fetch-b.mp4', '--render', stub_cmd('--browser', browser['chrome'], '--goto', 'https://example.com/lf-browser') - Network accessline 367
'--render', stub_cmd('--browser', browser['chrome'], '--goto', 'https://example.com/lf-browser')) - Network accessline 488
gsap = make_page(root / 'page-gsap', head='<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>\n') - Access to secretsline 520
[Credential-related source omitted]
skills/legible-film/scripts/selftest_cases/render.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/selftest_cases/reviewfix.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/roles.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/runs.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/screen.py
- Executable scriptline 1
Executable file - Network accessline 405
stale_path = root / 'screening/server.json' stale_path.write_text(json.dumps({'pid': os.getpid(), 'url': 'http://127.0.0.1:1/screening/index.html?t=stale'}), encoding='utf-8') - Network accessline 406
stale_path.write_text(json.dumps({'pid': os.getpid(), 'url': 'http://127.0.0.1:1/screening/index.html?t=stale'}), encoding='utf-8') try: - Network accessline 407
'url': 'http://127.0.0.1:1/screening/index.html?t=stale'}), encoding='utf-8') - Network accessline 748
info = root / 'screening/server.json' info.write_text(json.dumps({'pid': os.getpid(), 'port': 12345, 'url': 'http://127.0.0.1:12345/screening/index.html?t=stale-secret-XYZ'}), - Network accessline 749
info.write_text(json.dumps({'pid': os.getpid(), 'port': 12345, 'url': 'http://127.0.0.1:12345/screening/index.html?t=stale-secret-XYZ'}), encoding='utf-8') - Network accessline 750
'url': 'http://127.0.0.1:12345/screening/index.html?t=stale-secret-XYZ'}), - Network accessline 766
connection.getresponse.return_value = response with patch.object(screen, 'pid_alive', return_value=True), \ patch.object(screen.http.client, 'HTTPConnection', return_value=connection): - Network accessline 767
with patch.object(screen, 'pid_alive', return_value=True), patch.object(screen.http.client, 'HTTPConnection', return_value=connection): - Network accessline 768
patch.object(screen.http.client, 'HTTPConnection', return_value=connection): - Network accessline 1080
def request(path, auth=True, headers=None, body=None): target = base + path + (('?t=' + token) if auth else '') req = urllib.request.Request(target, data=json.dumps(body).encode() if body is not None else None, - Network accessline 1081
target = base + path + (('?t=' + token) if auth else '') req = urllib.request.Request(target, data=json.dumps(body).encode() if body is not None else None, headers=headers or {}) - Network accessline 1082
req = urllib.request.Request(target, data=json.dumps(body).encode() if body is not None else None, - Network accessline 1083
headers=headers or {}) try: with urllib.request.urlopen(req, timeout=5) as response: - Network accessline 1084
try: with urllib.request.urlopen(req, timeout=5) as response: return response.status, response.read() - Network accessline 1085
with urllib.request.urlopen(req, timeout=5) as response: - Network accessline 1087
except urllib.error.HTTPError as error: return error.code, error.read() with urllib.request.urlopen(base + '/screening/index.html?t=' + token, timeout=5) as response: - Network accessline 1088
return error.code, error.read() with urllib.request.urlopen(base + '/screening/index.html?t=' + token, timeout=5) as response: cookie_header = response.headers.get('Set-Cookie', '') - Network accessline 1089
with urllib.request.urlopen(base + '/screening/index.html?t=' + token, timeout=5) as response: - Network accessline 1099
depth_code, depth_body = request('/api/notes', headers={'Content-Type': 'application/json'}, body={'text': 'x', 't': .5, 'nested': nested}) deep_request = urllib.request.Request(base + '/api/ - Network accessline 1100
body={'text': 'x', 't': .5, 'nested': nested}) deep_request = urllib.request.Request(base + '/api/notes?t=' + token, data=b'{"x":' + b'[' * 3000 + b'0' + b']' * 3000 + b'}', - Network accessline 1101
deep_request = urllib.request.Request(base + '/api/notes?t=' + token, - Network accessline 1103
headers={'Content-Type': 'application/json'}) try: urllib.request.urlopen(deep_request, timeout=5) - Network accessline 1104
try: urllib.request.urlopen(deep_request, timeout=5) deep_code, deep_body = 200, b'' - Network accessline 1105
urllib.request.urlopen(deep_request, timeout=5) - Network accessline 1113
record('screen: server rejects requests without token', code == 403, str(code)) try: urllib.request.urlopen(base + '/screening/index.html', timeout=5) - Network accessline 1114
try: urllib.request.urlopen(base + '/screening/index.html', timeout=5) no_cookie = False - Network accessline 1115
urllib.request.urlopen(base + '/screening/index.html', timeout=5) - Network accessline 1145
record('screen launch room: the room serves only its own font files', code == 200 and body == shipped and other == 404, str((code, other))) req = urllib.request.Request(base + '/api/approve?t=' + token, data=b'{}', - Network accessline 1146
and other == 404, str((code, other))) req = urllib.request.Request(base + '/api/approve?t=' + token, data=b'{}', headers={'Origin': 'http://attacker.example', 'Content-Type': 'application/json'}) - Network accessline 1147
req = urllib.request.Request(base + '/api/approve?t=' + token, data=b'{}', - Network accessline 1148
headers={'Origin': 'http://attacker.example', 'Content-Type': 'application/json'}) try: urllib.request.urlopen(req, timeout=5) - Network accessline 1149
try: urllib.request.urlopen(req, timeout=5) no_cookie = False - Network accessline 1150
urllib.request.urlopen(req, timeout=5) - Network accessline 1242
const context=await browser.newContext();const a=await context.newPage(),b=await context.newPage(); await a.goto(process.argv[4]);await b.goto(process.argv[5]); for(const page of [a,b])assert.equal(await page.evaluate(()=>fetch('/api/stat - Network accessline 1243
await a.goto(process.argv[4]);await b.goto(process.argv[5]); for(const page of [a,b])assert.equal(await page.evaluate(()=>fetch('/api/status').then(r=>r.status)),200); const error=new Promise(resolve=>b.once('dialog',async dialog=>{ - Network accessline 1244
for(const page of [a,b])assert.equal(await page.evaluate(()=>fetch('/api/status').then(r=>r.status)),200); - Network accessline 1251
await a.evaluate(()=>poll()); assert((await a.locator('#connection').innerText()).includes('link has expired')); assert.equal(await b.evaluate(()=>fetch('/api/status').then(r=>r.status)),200); - Network accessline 1252
assert((await a.locator('#connection').innerText()).includes('link has expired')); assert.equal(await b.evaluate(()=>fetch('/api/status').then(r=>r.status)),200); await browser.close(); - Network accessline 1253
assert.equal(await b.evaluate(()=>fetch('/api/status').then(r=>r.status)),200); - Network accessline 1271
host, port = '127.0.0.1', info['port'] for _ in range(4): client = socket.create_connection((host, port), timeout=5) - Network accessline 1272
for _ in range(4): client = socket.create_connection((host, port), timeout=5) client.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('HH' if os.name == 'nt' else 'ii', 1, 0)) - Network accessline 1273
client = socket.create_connection((host, port), timeout=5)
skills/legible-film/scripts/selftest_cases/setup.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/sound.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/selftest_cases/sound_u4.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/spatial.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/stream.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/taste.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/tighten.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/tracefix.py
skills/legible-film/scripts/selftest_cases/u5a.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/u5a_media.py
- Executable scriptline 1
Executable file
skills/legible-film/scripts/selftest_cases/u5b.py
- Executable scriptline 1
Executable file - Dangerous shell operationline 137
def eval(self): return self - Access to secretsline 160
[Credential-related source omitted] - Network accessline 196
record('setup ear: public CPU installs and model downloads are explicit and unauthenticated', len(calls) == 3 and '--isolated' in calls[0] and '--isolated' in calls[1] and 'https://download.pytorch.org/whl/cpu' - Network accessline 197
len(calls) == 3 and '--isolated' in calls[0] and '--isolated' in calls[1] and 'https://download.pytorch.org/whl/cpu' in calls[0] and 'https://pypi.org/simple' in calls[1] - Network accessline 198
and 'https://download.pytorch.org/whl/cpu' in calls[0] - Network accessline 199
and 'https://pypi.org/simple' in calls[1] - Access to secretsline 320
[Credential-related source omitted]
skills/legible-film/scripts/setup.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 45
SPATIAL_MODEL = 'modnet.onnx' SPATIAL_SHA256 = '07c308cf0fc7e6e8b2065a12ed7fc07e1de8febb7dc7839d7b7f15dd66584df9' SPATIAL_URL = ('https://huggingface.co/Xenova/modnet/resolve/' - Network accessline 46
SPATIAL_SHA256 = '07c308cf0fc7e6e8b2065a12ed7fc07e1de8febb7dc7839d7b7f15dd66584df9' SPATIAL_URL = ('https://huggingface.co/Xenova/modnet/resolve/' 'fa2fa546052fba4c08921230a26cc69a333fca12/onnx/model.onnx') - Network accessline 47
SPATIAL_URL = ('https://huggingface.co/Xenova/modnet/resolve/' - Dangerous shell operationline 67
'Linux': ('sudo apt update && sudo apt install ffmpeg', 'sudo apt update && sudo apt install nodejs npm'), - Network accessline 68
} if system not in commands: return 'Install a supported build for your operating system; see https://ffmpeg.org/download.html' - Network accessline 69
if system not in commands: return 'Install a supported build for your operating system; see https://ffmpeg.org/download.html' command = commands[system][0 if kind == 'ffmpeg' else 1] - Network accessline 70
return 'Install a supported build for your operating system; see https://ffmpeg.org/download.html' - Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Dangerous shell operationline 113
'(sudo apt install python3-venv), then run: ' + fix) - Dangerous shell operationline 128
'python3-venv (sudo apt install python3-venv), then run this command again.') from error - Dangerous shell operationline 131
'(sudo apt install python3-venv), then run this command again.') - Access to secretsline 137
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Network accessline 147
return ('Ubuntu 22.04 commonly supplies FFmpeg 4.4; Debian 11 supplies 4.3. ' 'Upgrade to a release with FFmpeg 5.1 or later, or install a current build from ' 'https://ffmpeg.org/download.html and put it fir - Network accessline 148
'Upgrade to a release with FFmpeg 5.1 or later, or install a current build from ' 'https://ffmpeg.org/download.html and put it first on PATH.') if system == 'Darwin': - Network accessline 149
'https://ffmpeg.org/download.html and put it first on PATH.') - Network accessline 153
if system == 'Windows': return command_fix('ffmpeg', system) + '\n FFmpeg 5.1 or later is required.' return 'Install FFmpeg 5.1 or later from https://ffmpeg.org/download.html.' - Network accessline 155
return 'Install FFmpeg 5.1 or later from https://ffmpeg.org/download.html.' - Access to secretsline 221
[Credential-related source omitted] - Access to secretsline 222
[Credential-related source omitted] - Network accessline 304
url = 'https://api.github.com/repos/JamesDimachkie/legible-film/releases/latest' request = urllib.request.Request(url, headers={'Accept': 'application/vnd.github+json', - Network accessline 305
request = urllib.request.Request(url, headers={'Accept': 'application/vnd.github+json', - Network accessline 306
'User-Agent': 'legible-film-setup'}) try: with urllib.request.urlopen(request, timeout=4) as response: - Network accessline 307
try: with urllib.request.urlopen(request, timeout=4) as response: release = json.load(response) - Network accessline 308
with urllib.request.urlopen(request, timeout=4) as response: - Access to secretsline 394
[Credential-related source omitted] - Access to secretsline 395
[Credential-related source omitted] - Network accessline 469
newer, detail = latest_release(version) add('Skill', 'limited' if newer is None or newer else 'ready', 'Updates', detail, 'Review the latest release at https://github.com/JamesDimachkie/legible-film/releases/latest') - Network accessline 470
add('Skill', 'limited' if newer is None or newer else 'ready', 'Updates', detail, 'Review the latest release at https://github.com/JamesDimachkie/legible-film/releases/latest') return groups - Network accessline 471
'Review the latest release at https://github.com/JamesDimachkie/legible-film/releases/latest') - Network accessline 549
path = Path(temporary.name) try: urllib.request.urlretrieve(SPATIAL_URL, str(path)) - Network accessline 550
try: urllib.request.urlretrieve(SPATIAL_URL, str(path)) if project.file_sha256(path) != SPATIAL_SHA256: - Network accessline 551
urllib.request.urlretrieve(SPATIAL_URL, str(path)) - Dangerous shell operationline 579
libraries = (f" On Linux it also needs system libraries: sudo {npx} --prefix {package_dir} playwright-core " - Network accessline 607
python = str(python or sys.executable) subprocess.run([python, '-I', '-m', 'pip', '--isolated', 'install', 'torch', '--index-url', 'https://download.pytorch.org/whl/cpu'], check=True, stdout=sys.stderr) - Network accessline 608
subprocess.run([python, '-I', '-m', 'pip', '--isolated', 'install', 'torch', '--index-url', 'https://download.pytorch.org/whl/cpu'], check=True, stdout=sys.stderr) subprocess.run([python, '-I', '-m', 'pip', '--isolat - Network accessline 609
'https://download.pytorch.org/whl/cpu'], check=True, stdout=sys.stderr) - Network accessline 610
subprocess.run([python, '-I', '-m', 'pip', '--isolated', 'install', 'transformers<5', 'huggingface-hub', 'safetensors', 'librosa>=0.10', 'soundfile>=0.12', 'soxr>=0.3', '--index-url', 'https://pypi.or - Network accessline 611
'safetensors', 'librosa>=0.10', 'soundfile>=0.12', 'soxr>=0.3', '--index-url', 'https://pypi.org/simple'], check=True, stdout=sys.stderr) - Network accessline 612
'--index-url', 'https://pypi.org/simple'],
skills/legible-film/scripts/sound_check.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/sound_io.py
skills/legible-film/scripts/sound_library.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 27
Search uses GET https://api.openverse.org/v1/audio/ with q, license, page_size, - Network accessline 31
in the user's cache (or --rate-state). HTTP 429 stops with its Retry-After reason; no retries. See Openverse's API documentation before use: https://api.openverse.org/v1/ and - Network accessline 32
Retry-After reason; no retries. See Openverse's API documentation before use: https://api.openverse.org/v1/ and https://docs.openverse.org/api/reference/authentication_and_throttling.html - Network accessline 33
https://api.openverse.org/v1/ and - Network accessline 34
https://docs.openverse.org/api/reference/authentication_and_throttling.html - Access to secretsline 228
[Credential-related source omitted] - Access to secretsline 234
[Credential-related source omitted] - Access to secretsline 257
[Credential-related source omitted] - Network accessline 588
def fetch(url, limit): - Network accessline 589
public_url(url) request = urllib.request.Request(url, headers={'User-Agent': 'LegibleFilm/1.2 sound-library (no authentication)'}) with urllib.request.build_opener(PublicRedirect()).open(request, timeout=FETCH_TIMEOUT) as response: - Network accessline 590
request = urllib.request.Request(url, headers={'User-Agent': 'LegibleFilm/1.2 sound-library (no authentication)'}) - Network accessline 636
'page_size': a.max, 'duration': 'short'}) try: payload = json.loads(fetch('https://api.openverse.org/v1/audio/?' + query, 4 * 1024 * 1024)) - Network accessline 637
try: payload = json.loads(fetch('https://api.openverse.org/v1/audio/?' + query, 4 * 1024 * 1024)) except (OSError, ValueError) as exc: - Network accessline 638
payload = json.loads(fetch('https://api.openverse.org/v1/audio/?' + query, 4 * 1024 * 1024)) - Network accessline 657
raise ValueError('not a small effect (duration must be <=20 seconds)') url = item.get('url') data = fetch(url, 16 * 1024 * 1024) - Network accessline 658
url = item.get('url') data = fetch(url, 16 * 1024 * 1024) identity = hashlib.sha256(str(item.get('id', url)).encode()).hexdigest()[:16] - Network accessline 659
data = fetch(url, 16 * 1024 * 1024) - Network accessline 673
path = folder / ('audio.' + extension) path.write_bytes(data) licence_url = ('https://creativecommons.org/publicdomain/zero/1.0/' if code == 'cc0' else - Network accessline 674
path.write_bytes(data) licence_url = ('https://creativecommons.org/publicdomain/zero/1.0/' if code == 'cc0' else f'https://creativecommons.org/licenses/by/{version}/') - Network accessline 675
licence_url = ('https://creativecommons.org/publicdomain/zero/1.0/' if code == 'cc0' else - Network accessline 676
f'https://creativecommons.org/licenses/by/{version}/')
skills/legible-film/scripts/spatial.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/spot_cues.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/strip.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/sync_check.py
skills/legible-film/scripts/taste.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/tempo_map.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/testpages/identity/.hyperframesignore
- Executable scriptline 1
Executable file
skills/legible-film/scripts/testpages/identity/assets/logo.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"><circle cx="5" cy="5" r="4" fill="#3080c0"/></svg>
skills/legible-film/scripts/testpages/identity/film.js
- Executable scriptline 1
Executable file
skills/legible-film/scripts/testpages/labels/assets/fonts/Inter-LICENSE.txt
- Network accessline 1
Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) - Network accessline 3
This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - Network accessline 5
http://scripts.sil.org/OFL
skills/legible-film/scripts/testpages/labels/index.html
- Network accessline 19
#inner { position: absolute; inset: 0; } </style> <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script> - Network accessline 20
</style> <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script> </head> - Network accessline 21
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
skills/legible-film/scripts/tighten.py
skills/legible-film/scripts/track.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/transcribe.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/transcript_cut.py
skills/legible-film/scripts/voice_clean.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/legible-film/scripts/with_lock.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 112
[Credential-related source omitted] - Access to secretsline 113
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted] - Access to secretsline 144
[Credential-related source omitted]
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: 3 facts
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionlegible-film/assets/kit/lf/engine.js:244High confidence
- Contacts huggingface.co, which SKILL.md, the README and the plugin manifest do not mentionlegible-film/scripts/matte.py:48High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionlegible-film/scripts/screen.py:1279High confidence
Signal confidence: 497 facts
- Network access in prose of documentationlegible-film/LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/LICENSE.txt:195Low confidence
- Network access in prose of documentationlegible-film/assets/fonts/IBMPlexMono-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/fonts/IBMPlexMono-LICENSE.txt:5Low confidence
- Network access in prose of documentationlegible-film/assets/fonts/Inter-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/fonts/Inter-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/fonts/Inter-LICENSE.txt:5Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/caption.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/common.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/dither.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/endcard.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/index.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/name.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/number.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/still.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/terminal.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/thread.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/type.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/blocks/without.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/films/atlasfold/film.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/films/starter/film.js:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/GeistMono-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/GeistMono-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/GeistMono-LICENSE.txt:5Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/MonaSans-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/MonaSans-LICENSE.txt:4Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/MonaSans-LICENSE.txt:6Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NOTO-NOTICE.md:12Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NOTO-NOTICE.md:13Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NOTO-NOTICE.md:14Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NOTO-NOTICE.md:15Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansArabic-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansArabic-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansArabic-LICENSE.txt:5Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansDevanagari-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansDevanagari-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansDevanagari-LICENSE.txt:5Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansHebrew-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansHebrew-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansHebrew-LICENSE.txt:5Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansThai-LICENSE.txt:1Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansThai-LICENSE.txt:3Low confidence
- Network access in prose of documentationlegible-film/assets/kit/fonts/NotoSansThai-LICENSE.txt:5Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/lf/analyse.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/lf/color.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/lf/ease.js:1Low confidence
- Executable script in a comment of a file that runslegible-film/assets/kit/lf/engine.js:1Low confidence
- Network access in code of a file that runslegible-film/assets/kit/lf/engine.js:243High confidence
- Network access in code of a file that runslegible-film/assets/kit/lf/engine.js:244High confidence
and 447 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/legible-film/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/legible-film/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/legible-film/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/legible-film/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/legible-film/SKILL.md | .opencode/skills/<skill-name>/ |
- 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.