Releases: StemSplit/stemsplit-github-action
v0.1.0
First public release of the official StemSplit GitHub Action. Run AI-powered stem separation from any GitHub Actions workflow by passing a public audio URL to the StemSplit API v1.
- Homepage: https://stemsplit.io
- Integration guide: https://stemsplit.io/developers/guides/github-actions
- API base URL:
https://stemsplit.io/api/v1
Quick start
- Create an API key at StemSplit → Settings → API Keys.
- Add it to your repository: Settings → Secrets and variables → Actions → New repository secret
- Name:
STEMSPLIT_API_KEY - Value: your
sk_live_...key
- Name:
- Add a workflow step:
jobs:
separate-stems:
runs-on: ubuntu-latest
steps:
- uses: StemSplit/stemsplit-github-action@v0.1.0
id: stems
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://example.com/song.mp3
output-type: FOUR_STEMS
quality: BEST
wait: "true"
timeout-seconds: "600"
- name: Show result
run: |
echo "Job ID: ${{ steps.stems.outputs.job-id }}"
echo "Status: ${{ steps.stems.outputs.status }}"When wait is true and the job completes, result-json includes presigned download URLs under outputs (vocals, drums, bass, etc., depending on output-type). URLs expire after one hour.
What's included
Operations
| Operation | Default | Description |
|---|---|---|
create-job |
Yes | Create a stem separation job from a public source-url |
balance |
No | Return current API credit balance |
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
api-key |
Yes | — | StemSplit API key (sk_live_...) |
operation |
No | create-job |
create-job or balance |
source-url |
For create-job | — | Public HTTPS URL to an audio file |
output-type |
No | BOTH |
VOCALS, INSTRUMENTAL, BOTH, FOUR_STEMS, SIX_STEMS |
quality |
No | BEST |
FAST, BALANCED, BEST (SIX_STEMS requires BEST) |
output-format |
No | MP3 |
MP3, WAV, FLAC |
denoise-vocals |
No | false |
Run Voice Cleaner on extracted vocals after separation |
wait |
No | false |
Poll until status is COMPLETED or FAILED |
timeout-seconds |
No | 300 |
Max wait time when wait is true |
api-base-url |
No | https://stemsplit.io/api/v1 |
Override API base (testing only) |
metadata |
No | — | JSON object string stored on the job |
Outputs
| Output | When set | Description |
|---|---|---|
job-id |
create-job | Created or final job ID |
status |
create-job | Job status (e.g. PENDING, COMPLETED, FAILED) |
balance-seconds |
balance | Credit balance in seconds |
balance-formatted |
balance | Human-readable balance |
result-json |
Always | Full JSON body from the API |
Examples
Vocals + instrumental (karaoke-style)
- uses: StemSplit/stemsplit-github-action@v0.1.0
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
output-type: BOTH
quality: BEST
wait: "true"Six-stem separation
- uses: StemSplit/stemsplit-github-action@v0.1.0
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
output-type: SIX_STEMS
quality: BEST
wait: "true"
timeout-seconds: "900"Vocals with Voice Cleaner (denoise)
- uses: StemSplit/stemsplit-github-action@v0.1.0
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
output-type: VOCALS
quality: BEST
denoise-vocals: "true"
wait: "true"Check credit balance before running jobs
- uses: StemSplit/stemsplit-github-action@v0.1.0
id: balance
with:
operation: balance
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
- run: echo "Balance ${{ steps.balance.outputs.balance-formatted }}"Fire-and-forget (no wait)
- uses: StemSplit/stemsplit-github-action@v0.1.0
id: stems
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
wait: "false"
- run: echo "Started job ${{ steps.stems.outputs.job-id }}"Requirements and limits
- Authentication: Bearer API key; keys start with
sk_live_. - Input audio: Must be reachable via public HTTPS URL from StemSplit servers. For files on the runner only, use the StemSplit CLI or Node.js SDK upload flow instead.
- Credits: Billed per second of audio (same as the web app). New accounts include free minutes — see pricing.
- Runner:
node20(defined inaction.yml).
Links
| Resource | URL |
|---|---|
| Developer guide | https://stemsplit.io/developers/guides/github-actions |
| API reference | https://stemsplit.io/developers/reference |
| Changelog | https://stemsplit.io/developers/changelog#stemsplit-github-action |
| Example workflow | examples/separate-stems.yml |
| Report issues | https://github.com/StemSplit/stemsplit-github-action/issues |
About StemSplit
StemSplit is an AI audio platform for stem separation, vocal removal, and instrumental / karaoke workflows. Upload a song or pass a URL and get isolated vocals, drums, bass, piano, guitar, and other stems — powered by HTDemucs on GPU, with optional Voice Cleaner noise reduction (DeepFilterNet).
Use StemSplit in the browser, via the REST API, or through official tools: Node.js SDK (@stemsplit/sdk), Python SDK, CLI, MCP server, n8n node, and this GitHub Action for CI/CD. New accounts include free credits; pay-as-you-go pricing with no subscription required.
- Web app: https://stemsplit.io
- Developers: https://stemsplit.io/developers
- Vocal remover: https://stemsplit.io/vocal-remover
- Stem splitter: https://stemsplit.io/stem-splitter
License
MIT — see LICENSE.
v0.1.0
Marketplace summary (paste into short description if limited):
Official GitHub Action for StemSplit — AI stem separation and vocal removal from public audio URLs in CI/CD workflows. Isolate vocals, drums, bass, and more via the StemSplit API; optional wait-for-completion and credit balance check.
Overview
Release date: June 2026
Repository: StemSplit/stemsplit-github-action
Install: uses: StemSplit/stemsplit-github-action@v0.1.0
First public release of the official StemSplit GitHub Action. Run AI-powered stem separation from any GitHub Actions workflow by passing a public audio URL to the StemSplit API v1.
- Homepage: https://stemsplit.io
- Integration guide: https://stemsplit.io/developers/guides/github-actions
- API base URL:
https://stemsplit.io/api/v1
Quick start
- Create an API key at StemSplit → Settings → API Keys.
- Add it to your repository: Settings → Secrets and variables → Actions → New repository secret
- Name:
STEMSPLIT_API_KEY - Value: your
sk_live_...key
- Name:
- Add a workflow step:
jobs:
separate-stems:
runs-on: ubuntu-latest
steps:
- uses: StemSplit/stemsplit-github-action@v0.1.0
id: stems
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://example.com/song.mp3
output-type: FOUR_STEMS
quality: BEST
wait: "true"
timeout-seconds: "600"
- name: Show result
run: |
echo "Job ID: ${{ steps.stems.outputs.job-id }}"
echo "Status: ${{ steps.stems.outputs.status }}"When wait is true and the job completes, result-json includes presigned download URLs under outputs (vocals, drums, bass, etc., depending on output-type). URLs expire after one hour.
What's included
Operations
| Operation | Default | Description |
|---|---|---|
create-job |
Yes | Create a stem separation job from a public source-url |
balance |
No | Return current API credit balance |
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
api-key |
Yes | — | StemSplit API key (sk_live_...) |
operation |
No | create-job |
create-job or balance |
source-url |
For create-job | — | Public HTTPS URL to an audio file |
output-type |
No | BOTH |
VOCALS, INSTRUMENTAL, BOTH, FOUR_STEMS, SIX_STEMS |
quality |
No | BEST |
FAST, BALANCED, BEST (SIX_STEMS requires BEST) |
output-format |
No | MP3 |
MP3, WAV, FLAC |
denoise-vocals |
No | false |
Run Voice Cleaner on extracted vocals after separation |
wait |
No | false |
Poll until status is COMPLETED or FAILED |
timeout-seconds |
No | 300 |
Max wait time when wait is true |
api-base-url |
No | https://stemsplit.io/api/v1 |
Override API base (testing only) |
metadata |
No | — | JSON object string stored on the job |
Outputs
| Output | When set | Description |
|---|---|---|
job-id |
create-job | Created or final job ID |
status |
create-job | Job status (e.g. PENDING, COMPLETED, FAILED) |
balance-seconds |
balance | Credit balance in seconds |
balance-formatted |
balance | Human-readable balance |
result-json |
Always | Full JSON body from the API |
Examples
Vocals + instrumental (karaoke-style)
- uses: StemSplit/stemsplit-github-action@v0.1.0
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
output-type: BOTH
quality: BEST
wait: "true"Six-stem separation
- uses: StemSplit/stemsplit-github-action@v0.1.0
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
output-type: SIX_STEMS
quality: BEST
wait: "true"
timeout-seconds: "900"Vocals with Voice Cleaner (denoise)
- uses: StemSplit/stemsplit-github-action@v0.1.0
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
output-type: VOCALS
quality: BEST
denoise-vocals: "true"
wait: "true"Check credit balance before running jobs
- uses: StemSplit/stemsplit-github-action@v0.1.0
id: balance
with:
operation: balance
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
- run: echo "Balance ${{ steps.balance.outputs.balance-formatted }}"Fire-and-forget (no wait)
- uses: StemSplit/stemsplit-github-action@v0.1.0
id: stems
with:
api-key: ${{ secrets.STEMSPLIT_API_KEY }}
source-url: https://cdn.example.com/track.mp3
wait: "false"
- run: echo "Started job ${{ steps.stems.outputs.job-id }}"Requirements and limits
- Authentication: Bearer API key; keys start with
sk_live_. - Input audio: Must be reachable via public HTTPS URL from StemSplit servers. For files on the runner only, use the StemSplit CLI or Node.js SDK upload flow instead.
- Credits: Billed per second of audio (same as the web app). New accounts include free minutes — see pricing.
- Runner:
node20(defined inaction.yml).
Links
| Resource | URL |
|---|---|
| Developer guide | https://stemsplit.io/developers/guides/github-actions |
| API reference | https://stemsplit.io/developers/reference |
| Changelog | https://stemsplit.io/developers/changelog#stemsplit-github-action |
| Example workflow | examples/separate-stems.yml |
| Report issues | https://github.com/StemSplit/stemsplit-github-action/issues |
About StemSplit
StemSplit is an AI audio platform for stem separation, vocal removal, and instrumental / karaoke workflows. Upload a song or pass a URL and get isolated vocals, drums, bass, piano, guitar, and other stems — powered by HTDemucs on GPU, with optional Voice Cleaner noise reduction (DeepFilterNet).
Use StemSplit in the browser, via the REST API, or through official tools: Node.js SDK (@stemsplit/sdk), Python SDK, CLI, MCP server, n8n node, and this GitHub Action for CI/CD. New accounts include free credits; pay-as-you-go pricing with no subscription required.
- Web app: https://stemsplit.io
- Developers: https://stemsplit.io/developers
- Vocal remover: https://stemsplit.io/vocal-remover
- Stem splitter: https://stemsplit.io/stem-splitter
License
MIT — see LICENSE.