Socket
Socket
Sign inDemoInstall

moises

Package Overview
Dependencies
34
Maintainers
2
Versions
18
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    moises

This package bundles an `SDK` and a `CLI` to allow basic usage of the [Moises Developer Platform](https://developer.moises.ai).


Version published
Weekly downloads
379
increased by4.41%
Maintainers
2
Install size
9.60 MB
Created
Weekly downloads
 

Readme

Source

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.

FAQs

Last updated on 14 Feb 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc