Skip to content

feat(skills): add video-to-gif conversion skill with FFmpeg two-pass optimization#247

Merged
agreaves-ms merged 7 commits intomainfrom
feat/video-to-gif-skill
Jan 22, 2026
Merged

feat(skills): add video-to-gif conversion skill with FFmpeg two-pass optimization#247
agreaves-ms merged 7 commits intomainfrom
feat/video-to-gif-skill

Conversation

@agreaves-ms
Copy link
Copy Markdown
Collaborator

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

    • Two-pass palette optimization for superior GIF quality
    • Automatic HDR detection with tonemapping (hable, reinhard, mobius, bt2390)
    • Workspace-first file search for convenient file discovery
    • Configurable FPS, width, dithering, loop count, and time range extraction
  • refactor(installer): Simplified hve-core-installer.agent.md phase structure

    • Removed MCP configuration guidance checkpoint
    • Consolidated phases for clearer installation flow
    • Extension Quick Install now goes directly to gitignore recommendation
  • docs: Updated documentation links from .github/CUSTOM-AGENTS.md to .github/README.md

    • Updated references in README.md, first-workflow.md, install.md, and RPI documentation
  • refactor(scripts): Simplified PowerShell scripts by removing pure function patterns

    • Removed dot-source entry point guards from Generate-PrReference.ps1, Package-Extension.ps1, Prepare-Extension.ps1, and Get-VerifiedDownload.ps1
    • Deleted associated Pester test files (Generate-PrReference.Tests.ps1, Get-VerifiedDownload.Tests.ps1, Package-Extension.Tests.ps1, Prepare-Extension.Tests.ps1)
  • chore: Removed oldsha from cspell dictionary, updated extension/README.md with frontmatter

Related Issue(s)

Type of Change

Select all that apply:

Code & Documentation:

  • Bug fix (non-breaking change fixing an issue)
  • New feature (non-breaking change adding functionality)
  • Breaking change (fix or feature causing existing functionality to change)
  • Documentation update

Infrastructure & Configuration:

  • GitHub Actions workflow
  • Linting configuration (markdown, PowerShell, etc.)
  • Security configuration
  • DevContainer configuration
  • Dependency update

AI Artifacts:

  • Reviewed contribution with prompt-builder agent and addressed all feedback
  • Copilot instructions (.github/instructions/*.instructions.md)
  • Copilot prompt (.github/prompts/*.prompt.md)
  • Copilot agent (.github/agents/*.agent.md)

Note for AI Artifact Contributors:

  • Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review .github/agents/ before creating new ones.
  • Model Versions: Only contributions targeting the latest Anthropic and OpenAI models will be accepted. Older model versions (e.g., GPT-3.5, Claude 3) will be rejected.
  • See Agents Not Accepted and Model Version Requirements.

Other:

  • Script/automation (.ps1, .sh, .py)
  • Other (please describe):

Sample Prompts (for AI Artifact Contributions)

User Request:

Execution Flow:

Output Artifacts:

Success Indicators:

For detailed contribution requirements, see:

GHCP Artifact Maturity

File Type Maturity Notes
.github/skills/video-to-gif/SKILL.md Skill ✅ stable All builds

Testing

Checklist

Required Checks

  • Documentation is updated (if applicable)
  • Files follow existing naming conventions
  • Changes are backwards compatible (if applicable)

AI Artifact Contributions

  • Used /prompt-analyze to review contribution
  • Addressed all feedback from prompt-builder review
  • Verified contribution follows common standards and type-specific requirements

Required Automated Checks

The following validation commands must pass before merging:

  • Markdown linting: npm run lint:md
  • Spell checking: npm run spell-check
  • Frontmatter validation: npm run lint:frontmatter
  • Link validation: npm run lint:md-links
  • PowerShell analysis: npm run lint:ps

Security Considerations

  • This PR does not contain any sensitive or NDA information
  • Any new dependencies have been reviewed for security issues
  • Security-related scripts follow the principle of least privilege

Additional Notes

  • The video-to-gif skill requires FFmpeg to be installed on the system
  • HDR tonemapping requires FFmpeg 4.0+ with zscale filter (libzimg) support
  • Deleted MCP configuration documentation (docs/getting-started/mcp-configuration.md) as it was consolidated elsewhere
  • Test file deletions are intentional; the pure function patterns were removed from the scripts they tested

🎥 - Generated by Copilot

@agreaves-ms agreaves-ms requested a review from a team as a code owner January 22, 2026 08:39
Copilot AI review requested due to automatic review settings January 22, 2026 08:39
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jan 22, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

Copy link
Copy Markdown
Member

@bindsi bindsi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is cool

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Copy Markdown
Contributor

@katriendg katriendg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copilot AI review requested due to automatic review settings January 22, 2026 09:14
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

…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
@agreaves-ms agreaves-ms force-pushed the feat/video-to-gif-skill branch from 75a3392 to 5b6dda7 Compare January 22, 2026 09:20
Copilot AI review requested due to automatic review settings January 22, 2026 10:09
@agreaves-ms agreaves-ms merged commit 8d65c42 into main Jan 22, 2026
19 checks passed
@agreaves-ms agreaves-ms deleted the feat/video-to-gif-skill branch January 22, 2026 10:11
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Comment on lines +352 to +354
ffmpeg "${time_args[@]}" -i "${input_file}" \
-vf "${base_filter}" \
-loop "${loop}" -y "${output_file}"
Copy link

Copilot AI Jan 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +363 to +365
ffmpeg "${time_args[@]}" -i "${input_file}" \
-vf "${base_filter},palettegen=stats_mode=diff" \
-y "${palette_file}"
Copy link

Copilot AI Jan 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +369 to +371
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}"
Copy link

Copilot AI Jan 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
WilliamBerryiii pushed a commit that referenced this pull request Jan 28, 2026
🤖 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants