Files
hyperframes/skills-manifest.json
T
Miguel Ángel f8a1e2d315 fix(skills): pin UTF-8 in Python scripts instead of the platform code page (#3298)
Windows sizes Python's stdio and text-mode file IO to the ANSI code page
(cp1252), not UTF-8. Every skill Python script relied on that default:

  * analyze-beatgrid.py --print writes the glyphs cp1252 has no slot for
    (delta, arrow), so the brief died with UnicodeEncodeError on every Windows
    run — the reported crash;
  * its audiomap write_text() pairs ensure_ascii=False with the default file
    encoding, so a non-ASCII payload is unwritable there too;
  * lint_source.py read_text() raises UnicodeDecodeError before any rule runs
    when a Remotion source carries an em dash or a curly quote;
  * gen-stroke-path.py reads an SVG font whose glyph keys ARE literal
    characters, so a mis-decoded key stops matching the requested text.

Stdio is reconfigured to UTF-8 at import and every text-mode IO call names its
encoding. `errors` is carried across the reconfigure: it resets to "strict",
and CPython gives stderr "backslashreplace" on purpose so the diagnostic path
can never itself raise.

extract-audio-data.py also decoded ffmpeg's stderr strictly while reporting a
failure, which would bury the very error being reported on a Windows ffmpeg.

skills/python-encoding.test.mjs guards the class: it fails if any skill Python
script drops the stdio block or omits encoding= on a text-mode IO call. The
mode is read as a whole comma-delimited argument of mode characters only, so a
payload key like {"bpm": 120} cannot spell the check away.

Verified with a cp1252 stdio stream installed before module load, matching how
Windows starts the interpreter: pre-fix UnicodeEncodeError, post-fix both
glyphs present in the UTF-8 bytes. Not run on real Windows hardware.
2026-08-17 21:44:08 -04:00

86 lines
1.7 KiB
JSON

{
"source": "heygen-com/hyperframes",
"skills": {
"embedded-captions": {
"hash": "1c02f679a329bce7",
"files": 138
},
"faceless-explainer": {
"hash": "c70b904aa68cf7e5",
"files": 24
},
"figma": {
"hash": "4f524b4962bd8d7c",
"files": 2
},
"general-video": {
"hash": "49f5216832cb8e91",
"files": 4
},
"hyperframes": {
"hash": "756a72f58fa3739b",
"files": 17
},
"hyperframes-animation": {
"hash": "2ce5ca7dbf361e27",
"files": 121
},
"hyperframes-audio": {
"hash": "534cea75fe0f2bc6",
"files": 6
},
"hyperframes-cli": {
"hash": "dc900e2ef0aa16b2",
"files": 11
},
"hyperframes-core": {
"hash": "4ca81d4092effc62",
"files": 19
},
"hyperframes-creative": {
"hash": "0068574ecd376e60",
"files": 78
},
"hyperframes-keyframes": {
"hash": "d00744ff0e669624",
"files": 3
},
"hyperframes-registry": {
"hash": "d6dfcc8ceb7c8178",
"files": 12
},
"media-use": {
"hash": "1b0ce647f5c7df95",
"files": 152
},
"motion-graphics": {
"hash": "1434e22bb0259bbb",
"files": 23
},
"music-to-video": {
"hash": "0c04f6ed00e90077",
"files": 132
},
"pr-to-video": {
"hash": "7769801640dca521",
"files": 30
},
"product-launch-video": {
"hash": "81953f054fcb9d91",
"files": 28
},
"remotion-to-hyperframes": {
"hash": "bf184a65059b95e8",
"files": 70
},
"slideshow": {
"hash": "6a24a84b0c1a75f9",
"files": 2
},
"talking-head-recut": {
"hash": "2f5d99f823c48e75",
"files": 28
}
}
}