feat(skills): add video-to-gif conversion skill with FFmpeg two-pass optimization#247
feat(skills): add video-to-gif conversion skill with FFmpeg two-pass optimization#247agreaves-ms merged 7 commits intomainfrom
Conversation
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
There was a problem hiding this comment.
Pull request overview
This pull request introduces a new video-to-gif conversion skill with cross-platform FFmpeg-based scripts for high-quality GIF generation. The skill features two-pass palette optimization, automatic HDR detection with tonemapping, workspace-first file search, and extensive configuration options for frame rate, dimensions, dithering algorithms, and time-range extraction.
Additionally, the PR includes documentation updates, simplifies the hve-core-installer agent by consolidating phases, and refactors several PowerShell scripts by removing pure function patterns and their associated test files.
Changes:
- New video-to-gif skill with comprehensive documentation and parallel bash/PowerShell implementations
- Updated prompt-builder instructions to remove platforms/dependencies frontmatter requirement for skills
- Documentation link updates from CUSTOM-AGENTS.md to README.md
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| .github/skills/video-to-gif/SKILL.md | Main skill documentation with prerequisites, parameters reference, usage examples, and troubleshooting |
| .github/skills/video-to-gif/convert.sh | Bash implementation with HDR detection, workspace file search, and two-pass palette optimization |
| .github/skills/video-to-gif/convert.ps1 | PowerShell implementation with parameter validation and parallel feature parity to bash version |
| .github/skills/video-to-gif/examples/README.md | Usage examples, test video generation, quality comparisons, and batch conversion patterns |
| .github/instructions/prompt-builder.instructions.md | Removed platforms/dependencies frontmatter requirement from skill characteristics |
katriendg
left a comment
There was a problem hiding this comment.
First one added, nice!
A few things we need to add to backlog:
- ensure we add it to the Extension once the API supports it (not sure yet)
- add the settings requirement for enabling the experimental feature? Or is it already enabled by default now?
"chat.useAgentSkills": true - enable skill configuration by the HVE code installer agent
- document SKILLS in general, any settings and how to contribute
…port - implement bash and PowerShell scripts for video-to-GIF conversion - include two-pass optimization for better GIF quality - add HDR detection and tonemapping features - create usage examples and test video generation instructions 🎥 - Generated by Copilot
- implement multiple tonemapping algorithms: hable, reinhard, mobius, bt2390 - update scripts to support HDR detection and tonemapping selection - enhance documentation with tonemapping usage examples 🎨 - Generated by Copilot
- clarify how to include GIF in response using markdown - enhance user experience by allowing direct preview of GIFs 🔍 - Generated by Copilot
…meters - replace error messages with verbose output for better debugging - remove FrameRate and OutputWidth parameters from conversion functions 🔧 - Generated by Copilot
75a3392 to
5b6dda7
Compare
🔧 - Generated by Copilot
| ffmpeg "${time_args[@]}" -i "${input_file}" \ | ||
| -vf "${base_filter}" \ | ||
| -loop "${loop}" -y "${output_file}" |
There was a problem hiding this comment.
When the time_args array is empty, the expansion "${time_args[@]}" will fail due to the 'set -u' option (unset variables treated as errors). Use "${time_args[@]+"${time_args[@]}"}" to safely expand an empty array, or check if the array has elements before expanding it.
| ffmpeg "${time_args[@]}" -i "${input_file}" \ | ||
| -vf "${base_filter},palettegen=stats_mode=diff" \ | ||
| -y "${palette_file}" |
There was a problem hiding this comment.
When the time_args array is empty, the expansion "${time_args[@]}" will fail due to the 'set -u' option (unset variables treated as errors). Use "${time_args[@]+"${time_args[@]}"}" to safely expand an empty array, or check if the array has elements before expanding it.
| ffmpeg "${time_args[@]}" -i "${input_file}" -i "${palette_file}" \ | ||
| -filter_complex "${base_filter}[x];[x][1:v]paletteuse=dither=${dither}:diff_mode=rectangle" \ | ||
| -loop "${loop}" -y "${output_file}" |
There was a problem hiding this comment.
When the time_args array is empty, the expansion "${time_args[@]}" will fail due to the 'set -u' option (unset variables treated as errors). Use "${time_args[@]+"${time_args[@]}"}" to safely expand an empty array, or check if the array has elements before expanding it.
🤖 I have created a release *beep* *boop* --- ## [2.0.0](hve-core-v1.1.0...hve-core-v2.0.0) (2026-01-28) ### ⚠ BREAKING CHANGES * **agents:** add Task Reviewer and expand RPI to 4-phase workflow ([#277](#277)) ### ✨ Features * **agents:** add hve-core-installer agent to extension package ([#297](#297)) ([c0e48c6](c0e48c6)) * **agents:** add Task Reviewer and expand RPI to 4-phase workflow ([#277](#277)) ([ae76cab](ae76cab)) * **build:** add code coverage reporting to Pester workflow ([#230](#230)) ([a34822a](a34822a)) * **docs:** add GOVERNANCE.md for OSSF Silver Badge compliance ([#235](#235)) ([b0e752c](b0e752c)) * **docs:** add ROADMAP.md for OSSF Silver badge compliance ([#238](#238)) ([4a41c16](4a41c16)) * **mcp:** add MCP server configuration guidance and installer enhancements ([#225](#225)) ([0bce418](0bce418)) * **scripts:** add YAML linting with actionlint ([#234](#234)) ([d9301f9](d9301f9)) * **security:** add OpenSSF Scorecard workflow and badge ([#271](#271)) ([7c6d788](7c6d788)) * **skills:** add video-to-gif conversion skill with FFmpeg two-pass optimization ([#247](#247)) ([8d65c42](8d65c42)) * **tests:** add Pester tests for LintingHelpers and Validate-MarkdownFrontmatter ([#197](#197), [#198](#198)) ([#205](#205)) ([51ae563](51ae563)) ### 🐛 Bug Fixes * **build:** detect table formatting changes via git diff ([#261](#261)) ([985eee0](985eee0)) * **build:** disable MD024 lint rule in CHANGELOG for release-please ([#220](#220)) ([971df94](971df94)) * **build:** quote shell variables and group redirects in workflow files ([#299](#299)) ([3372509](3372509)) * **build:** resolve scorecard badge and workflow security issues ([#301](#301)) ([aeaed13](aeaed13)) * **extension:** remove frontmatter from README and exclude from markdown linting ([#223](#223)) ([4272529](4272529)) * **instructions:** quote applyTo glob pattern for YAML compatibility ([#216](#216)) ([085199c](085199c)) * **scripts:** add FooterExcludePaths parameter to frontmatter validation ([#334](#334)) ([64db98d](64db98d)) * **scripts:** add GHSA word and logs/ exclusion to cspell config ([#214](#214)) ([5c99b3f](5c99b3f)) * **scripts:** correct type assertions in Invoke-YamlLint.Tests.ps1 ([#332](#332)) ([af7050d](af7050d)) * **scripts:** eliminate false positives in dependency pinning npm pattern ([#273](#273)) ([ccbdfa3](ccbdfa3)) * **security:** add artifact attestation for signed releases ([#257](#257)) ([c52d6e2](c52d6e2)) * standardize markdown footers and complete frontmatter ([#217](#217)) ([b4e7556](b4e7556)) ### 📚 Documentation * add OpenSSF Best Practices Passing badge to README ([#239](#239)) ([91bc529](91bc529)) * **architecture:** add architecture documentation and value proposition ([#252](#252)) ([0e4b02f](0e4b02f)) * **contributing:** add testing requirements for OSSF compliance ([#254](#254)) ([4db1a18](4db1a18)) * **docs:** add enterprise status badges to README header ([#270](#270)) ([ccb68a4](ccb68a4)) * **security:** add security assurance case and threat model for OSSF Silver ([#259](#259)) ([a390e26](a390e26)) ### ♻️ Refactoring * **application:** wrap execution with try blocks, ensure proper … ([#296](#296)) ([35c4417](35c4417)) * **scripts:** extract frontmatter validation to testable module ([#293](#293)) ([4e8707e](4e8707e)) * **scripts:** extract pure functions for Pester testability ([#221](#221)) ([d40e742](d40e742)) ### 🔧 Maintenance * **deps-dev:** bump cspell from 9.4.0 to 9.6.0 in the npm-dependencies group ([#208](#208)) ([855914b](855914b)) * **deps-dev:** bump cspell from 9.6.0 to 9.6.1 in the npm-dependencies group ([#294](#294)) ([1e45ad6](1e45ad6)) * **deps:** bump actions/setup-node from 6.1.0 to 6.2.0 in the github-actions group ([#209](#209)) ([c4c69e2](c4c69e2)) * **deps:** bump the github-actions group with 4 updates ([#295](#295)) ([d8337b8](d8337b8)) * remove step-security/harden-runner from workflows ([#246](#246)) ([c5708d8](c5708d8)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: hve-core-release-please[bot] <254602402+hve-core-release-please[bot]@users.noreply.github.com>
Pull Request
Description
This PR introduces a new video-to-gif skill with FFmpeg two-pass palette optimization, including HDR detection and tonemapping support. The skill provides cross-platform scripts (bash and PowerShell) for high-quality video-to-GIF conversion with customizable parameters for frame rate, width, dithering algorithms, and time range extraction.
Additionally, the PR simplifies the hve-core-installer agent by consolidating phases and streamlining the installation flow, removes MCP configuration documentation (moved to external guidance), refactors several PowerShell scripts for maintainability, and updates documentation links throughout the repository.
Key changes:
feat(video-to-gif): New skill with SKILL.md documentation, convert.sh (bash), and convert.ps1 (PowerShell) scripts
refactor(installer): Simplified hve-core-installer.agent.md phase structure
docs: Updated documentation links from
.github/CUSTOM-AGENTS.mdto.github/README.mdrefactor(scripts): Simplified PowerShell scripts by removing pure function patterns
chore: Removed
oldshafrom cspell dictionary, updated extension/README.md with frontmatterRelated Issue(s)
Type of Change
Select all that apply:
Code & Documentation:
Infrastructure & Configuration:
AI Artifacts:
prompt-builderagent and addressed all feedback.github/instructions/*.instructions.md).github/prompts/*.prompt.md).github/agents/*.agent.md)Other:
.ps1,.sh,.py)Sample Prompts (for AI Artifact Contributions)
User Request:
Execution Flow:
Output Artifacts:
Success Indicators:
For detailed contribution requirements, see:
GHCP Artifact Maturity
.github/skills/video-to-gif/SKILL.mdTesting
Checklist
Required Checks
AI Artifact Contributions
/prompt-analyzeto review contributionprompt-builderreviewRequired Automated Checks
The following validation commands must pass before merging:
npm run lint:mdnpm run spell-checknpm run lint:frontmatternpm run lint:md-linksnpm run lint:psSecurity Considerations
Additional Notes
docs/getting-started/mcp-configuration.md) as it was consolidated elsewhere🎥 - Generated by Copilot