Golpo Node SDK

v0.1.9 — StableTypeScript / JavaScript

Complete API reference for the Golpo AI TypeScript/JavaScript SDK for generating AI-powered videos. Covers installation, authentication, all methods, type definitions, error handling, and usage examples.

Installation

Terminal
npm install @golpoai/sdk

Requires Node.js ≥ 18.17.

Authentication

Initialize the SDK with your API key.

auth.ts
import Golpo from '@golpoai/sdk';

const golpo = new Golpo("api-key"); // Replace with your actual API key

// Optional: custom base URL
const golpoCustom = new Golpo("api-key", "https://custom-api.golpoai.com");
ParameterTypeDefaultRequiredDescription
apiKeystringRequired
Your Golpo AI API key.
baseUrlstringProvided when creating an API keyOptional
Override the API base URL.

Method: createVideo

Stable

Creates a video, polls until completion, and returns a GenerationResult.

Signature

createVideo.d.ts
async createVideo(
  prompt: string,
  options?: CreateVideoOptions
): Promise<GenerationResult>  // { url, script, videoId }

Parameters

ParameterTypeDefaultRequiredDescription
promptstringRequired
The prompt describing what video to generate.
optionsCreateVideoOptionsOptional
Configuration options (see table below).

Options (CreateVideoOptions)

ParameterTypeDefaultRequiredDescription
uploadsstring | string[]Optional
File paths or URLs (local, HTTP/HTTPS, S3).
voiceInstructionsstringOptional
Custom instructions for voice characteristics.
personality1stringOptional
Narrator personality.
doResearchbooleanfalseOptional
Enable web research for the prompt.
ttsModel'accurate' | 'fast''accurate'Optional
Text-to-speech model quality.
languagestringOptional
Language code (e.g. 'en', 'es').
style'solo-male' | 'solo-female''solo-female'Optional
Voice style.
bgMusic'engaging' | 'lofi' | null'engaging'Optional
Background music genre.
bgVolumenumber1.4Optional
Background music volume.
outputVolumenumber1.0Optional
Final audio gain.
videoType'short' | 'long''long'Optional
Video duration type.
includeWatermarkbooleantrueOptional
Include Golpo watermark.
logostringOptional
Path to local logo file (URLs not supported).
timing'1' | '2''1'Optional
Timing configuration.
pollIntervalMsnumber2000Optional
Polling interval in milliseconds.
concurrencynumber8Optional
Concurrent file uploads.

Returns

returns.ts
interface GenerationResult {
  url:     string;  // URL to download/stream the generated video
  script:  string;  // Full transcript/script of the video
  videoId: string;  // Job ID for getFrameAnimations / editVideo
}

CreateVideoOptions type

types.ts
interface CreateVideoOptions {
  uploads?:           string | Iterable<string>;
  voiceInstructions?: string;
  personality1?:      string;
  doResearch?:        boolean;
  ttsModel?:          'accurate' | 'fast';
  language?:          string;
  style?:             'solo-male' | 'solo-female';
  bgMusic?:           'engaging' | 'lofi' | null;
  bgVolume?:          number;
  outputVolume?:      number;
  videoType?:         'short' | 'long';
  includeWatermark?:  boolean;
  logo?:              string;
  timing?:            '1' | '2';
  pollIntervalMs?:    number;
  concurrency?:       number;
}

Usage Examples

Basic prompt-only video

Basic
basic.ts
import Golpo from '@golpoai/sdk';

const golpo = new Golpo("api-key");

const result = await golpo.createVideo('Explain recent AI advances');
console.log(result.url);
console.log(result.script);
console.log(result.videoId);

Video from local documents

Files
documents.ts
const result = await golpo.createVideo('Summarize this research paper', {
  uploads: ['./research-paper.pdf'],
  style: 'solo-male',
  videoType: 'short',
  bgMusic: 'lofi',
  includeWatermark: false,
  logo: './company-logo.png',
});

Mixed uploads + research

Advanced
mixed_uploads.ts
const result = await golpo.createVideo('Analyze these sources', {
  uploads: [
    './local-document.pdf',
    'https://example.com/article.html',
    's3://bucket/research.docx',
    './data.txt',
  ],
  doResearch: true,
  concurrency: 4,
});

Comprehensive example

Complete
comprehensive.ts
const result = await golpo.createVideo(
  'Create an educational video about photosynthesis',
  {
    // Content
    uploads: ['./biology-notes.pdf'],
    doResearch: true,

    // Voice
    style: 'solo-female',
    voiceInstructions: 'Professional educator, clear and engaging, moderate pace',
    personality1: 'Enthusiastic biology teacher who makes science fun',
    ttsModel: 'accurate',
    language: 'en',

    // Audio
    bgMusic: 'engaging',
    bgVolume: 1.2,
    outputVolume: 1.0,

    // Video
    videoType: 'long',
    timing: '2',
    includeWatermark: false,
    logo: './school-logo.png',

    // Performance
    concurrency: 8,
    pollIntervalMs: 3000,
  }
);

Method: getFrameAnimations

Returns a map of frame IDs to MP4 animation URLs for a generated video.

Signature

getFrameAnimations.d.ts
async getFrameAnimations(videoId: string): Promise<Record<string, string>>

Parameters

ParameterTypeDefaultRequiredDescription
videoIdstringRequired
The video/job ID returned from createVideo.

Returns

An object mapping frame IDs (e.g. "0", "1") to MP4 animation URLs.

Example

example_get_frame_animations.ts
const result     = await golpo.createVideo('Explain AI in 2 minutes');
const animations = await golpo.getFrameAnimations(result.videoId);

for (const [frameId, url] of Object.entries(animations)
    .sort(([a], [b]) => parseInt(a) - parseInt(b))) {
  console.log(`Frame ${frameId}: ${url}`);
}

Method: editVideo

Edits specific frames of a video using text prompts, then optionally combines them.

Signature

editVideo.d.ts
async editVideo(
  videoId: string,
  opts: EditVideoOptions
): Promise<VideoEditResult>  // { videoUrl, jobId }

EditVideoOptions

ParameterTypeDefaultRequiredDescription
frameIdsstring[]Required
Frame indices to edit (e.g. ["0", "2"]).
editPromptsstring[]Required
One prompt per frame (same length as frameIds).
videoUrlstringRequired
URL of the original video (result.url from createVideo).
referenceImagesstring[]Optional
Reference image URLs for the edit.
userIdstringOptional
User ID for the edit job.
autoCombinebooleanfalseOptional
If true, combine edited frames into a final video with audio.
pollIntervalMsnumber2000Optional
Polling interval in ms.

Returns

VideoEditResultvideoUrl (string), jobId (string).

Example

example_edit_video.ts
const videoResult = await golpo.createVideo('Product demo in 3 scenes');
const editResult  = await golpo.editVideo(videoResult.videoId, {
  frameIds:    ['1'],
  editPrompts: ['Replace the background with a beach sunset'],
  videoUrl:    videoResult.url,
  autoCombine: true,
});
console.log('Edited video URL:', editResult.videoUrl);

Method: combineVideos

Merges multiple MP4 URLs into a single video with optional audio.

Signature

combineVideos.d.ts
async combineVideos(opts: CombineVideosOptions): Promise<CombinedVideoResult>  // { url }

CombineVideosOptions

ParameterTypeDefaultRequiredDescription
mp4Urlsstring[]Required
At least one MP4 URL (e.g. from getFrameAnimations).
videoUrlstringOptional
Optional original video URL to use for audio.
pollIntervalMsnumber2000Optional
Polling interval in ms.

Returns

CombinedVideoResulturl (string), the URL of the combined video.

Example

example_combine_videos.ts
const animations = await golpo.getFrameAnimations(videoId);
const mp4Urls    = Object.entries(animations)
  .sort(([a], [b]) => parseInt(a) - parseInt(b))
  .map(([, url]) => url);

const combined = await golpo.combineVideos({ mp4Urls, videoUrl: originalVideoUrl });
console.log('Combined video:', combined.url);

Error Handling

Wrap all SDK calls in try/catch blocks to handle failures gracefully.

error-handling.ts
try {
  const result = await golpo.createVideo('My prompt', options);
  console.log(result.url);
} catch (error: any) {
  if (error.response?.data?.detail) {
    // API validation error
    console.error('API Error:', error.response.data.detail);
  } else {
    // Network, file not found, etc.
    console.error('Error:', error.message);
  }
}

Common error scenarios

Invalid API KeyStatus 401 Unauthorized. Verify the constructor key.
File Not FoundLocal uploads missing. Confirm file paths.
Invalid ParametersAPI validation errors. Ensure option values are supported.
Network ErrorsConnection failures/timeouts. SDK automatically retries status checks.
Logo Upload RestrictionOnly local file paths are accepted for the logo option.