moises
TypeScript icon, indicating that this package has built-in type declarations

3.0.6 • Public • Published

Moises Developer Platform - Node.js SDK

This package bundles an SDK and a CLI to allow basic usage of the Moises Developer Platform.

Quick start

Here's how you can easily process a folder containing audio files against the moises/stems-vocals-drums-bass-other workflow:

import Moises from "moises/sdk"

const moises = new Moises({ apiKey: "your-api-key" })

await moises.processFolder(
  "moises/stems-vocals-drums-bass-other",
  "./audio",
  "./stems",
  {}
)

Installation

npm i moises --save

API Reference

Types

interface Job {
  id: string
  app: string
  workflow: string
  name: string
  status: "QUEUED" | "STARTED" | "SUCCEEDED" | "FAILED"
  workflowParams: {
    inputUrl: string
    [key: string]: string
  }
  result: {
    [key: string]: string
  }
  createdAt: string
  startedAt: string
  completedAt: string | null
}

Upload file

Uploads a local file to our temporary file server. Returns an temporary download url you can use on other methods.

uploadFile(fileLocation: string): Promise<string>
Example
const downloadUrl = await moises.uploadFile(fileLocation)

Add a job

Creates a new job and returns its corresponding JobId. The jobName can be anything you want (useful for your own reference).

addJob(jobName: string, workflowName: string, {
  inputUrl: string
  [key: string]: string
}): Promise<string>
Example
const downloadUrl = await moises.uploadFile("./song.mp3")
const jobId = await moises.addJob(
  "job-1",
  "moises/stems-vocals-drums-bass-other",
  { inputUrl: downloadUrl }
)

Check the documentation for all the existing workflows and expected correspondent parameters.

Get a job

Gets a job information by its id.

getJob(id: string): Promise<Job>
Example
const job = await moises.getJob(/* jobId */)

The job variable value:

{
  "id": "2e35babc-91c4-4121-89f4-5a2acf956b28",
  "name": "My job 123",
  "status": "SUCCEEDED",
  "workflow": {
    "id": "2ae5eea3-63dd-445e-9a3f-ff0473e82fd2",
    "name": "Stems Isolations - Vocals & accompaniments"
  },
  "workflowParams": {
    "inputUrl": "https://your-server.com/audio-input.m4a"
  },
  "result": {
    "vocals": "https://cdn.moises.ai/something/vocals.wav",
    "accompaniments": "https://cdn.moises.ai/something/accompaniments.wav"
  },
  "createdAt": "2022-12-07T19:21:42.170Z",
  "startedAt": "2022-12-07T19:21:42.307Z",
  "completedAt": "2022-12-07T19:22:00.325Z"
}

List jobs

Return all existing jobs associated with the provided apiKey. You can optionally filter by status and workflow:

listJobs(filters?: { status?: Status[]; workflow?: string[] }): Promise<Job[]>
Example
const jobs = await moises.listJobs()
const jobs = await moises.listJobs({
  status: ["FAILED"],
  workflow: ["workflow-a", "workflow-b"],
})

Delete a job

Delete a job by its id.

deleteJob(id: string): Promise<void>

Wait for a job completion

Waits until the job status is either SUCCEEDED or FAILED, and returns its information.

waitForJobCompletion(id: string): Promise<Job>
Example
const job = await moises.waitForJobCompletion(/* jobId */)

if (job.status === "SUCCEEDED") {
  console.log("Job succeeded!")
} else {
  console.log("Job failed!")
}

Download all job results

Download all the job results to a local folder.

downloadJobResults(jobIdOrJobData: string | Job, outputFolder: string): Promise<string[]>

This function also creates a file called workflow.result.json containing the result in the JSON format. When an output is a file, that field will contain the relative path to the file.

Example
const resultPaths = await moises.downloadJobResults(/* jobId */, "./stems")

Or, if you already have the job object...

const job = await moises.waitForJobCompletion(/* jobId */)
const resultPaths = await moises.downloadJobResults(job, "./stems")

If the workflows has two outputs, vocals in WAVE format and bpm, two files will be created at the given folder: vocals.wav and workflow.result.json.

// workflow.result.json
{
  "vocals": "./vocals.wav",
  "bpm": "64"
}

Process a single file

Adds a new job and monitor its status till completion. At the end, the job is deleted.

processFile(workflow: string, origin: string, outputFolder: string): Promise<void>
Example
await moises.processFile(
  "moises/stems-vocals-drums-bass-other",
  "./song.mp3",
  "./stems"
)

Process a folder

Adds a new job for each file in the folder and monitor their status till completion. At the end, the jobs are deleted.

processFolder(
  workflow: string,
  inputFolder: string,
  outputFolder: string,
  options: { concurrency?: number }
): Promise<"Ended normally" | "Aborted">
Example
await moises.processFolder(
  "moises/stems-vocals-drums-bass-other",
  "./songs",
  "./stems",
  {}
)

Complete example

import Moises from "moises/sdk"

const moises = new Moises({ apiKey: "your-api-key" })

const downloadUrl = await moises.uploadFile("./song.mp3")
const jobId = await moises.addJob(
  "job-1",
  "moises/stems-vocals-drums-bass-other",
  { inputUrl: downloadUrl }
)
const job = await moises.waitForJobCompletion(jobId)

if (job.status === "SUCCEEDED") {
  const files = await moises.downloadJobResults(job, "./stems")
  console.log("Result:", files)
} else {
  console.log("Job failed!")
}

await moises.deleteJob(jobId)

CLI

More information on the CLI Documentation page.

Readme

Keywords

none

Package Sidebar

Install

npm i moises

Weekly Downloads

374

Version

3.0.6

License

none

Unpacked Size

22.8 kB

Total Files

10

Last publish

Collaborators

  • hugorodrigues
  • mateuspires