Skip to main content

Setup

using System;
using System.Text.Json;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Legnext.SDK.Api;
using Legnext.SDK.Client;
using Legnext.SDK.Extensions;

string apiKey = Environment.GetEnvironmentVariable("LEGNEXT_API_KEY");

var services = new ServiceCollection();
services.AddApi(config =>
{
    config.AddApiHttpClients(client =>
    {
        client.BaseAddress = new Uri("https://api.legnext.ai");
    });
});

var provider = services.BuildServiceProvider();
var videoApi = provider.GetRequiredService<IVideoApi>();

Text-to-Video

Generate videos from text descriptions:
var request = new Dictionary<string, object>
{
    { "text", "a cat walking in a garden" },
    { "videoType", 0 },  // 0=480p, 1=720p
    { "callback", "https://example.com/callback" }
};

var response = await videoApi.ApiV1VideoDiffusionPostAsync(
    new Option<string>(apiKey),
    request
);

if (response.IsOk)
{
    var jsonDoc = JsonDocument.Parse(response.RawContent);
    if (jsonDoc.RootElement.TryGetProperty("job_id", out var jobId))
    {
        Console.WriteLine($"Job ID: {jobId.GetString()}");
    }
}
With Additional Parameters:
var request = new Dictionary<string, object>
{
    { "text", "sunset over ocean waves" },
    { "aspect_ratio", "16:9" },
    { "duration", 5 },
    { "videoType", 1 },  // 0=480p, 1=720p
    { "callback", "https://example.com/callback" }
};
Image-to-Video (Animate Static Image):
var request = new Dictionary<string, object>
{
    { "jobId", "original-image-job-id" },
    { "imageNo", 0 },  // Index of image to animate (0-3)
    { "videoType", 0 },  // 0=480p, 1=720p
    { "callback", "https://example.com/callback" }
};

var response = await videoApi.ApiV1VideoDiffusionPostAsync(
    new Option<string>(apiKey),
    request
);

if (response.IsOk)
{
    var jsonDoc = JsonDocument.Parse(response.RawContent);
    if (jsonDoc.RootElement.TryGetProperty("job_id", out var jobId))
    {
        Console.WriteLine($"Job ID: {jobId.GetString()}");
    }
}

Video Upscaling

Enhance video resolution:
var request = new Dictionary<string, object>
{
    { "jobId", "original-video-job-id" },
    { "videoNo", 0 },  // Index of video to upscale (0-3)
    { "callback", "https://example.com/callback" }
};

var response = await videoApi.ApiV1VideoUpscalePostAsync(
    new Option<string>(apiKey),
    request
);

if (response.IsOk)
{
    var jsonDoc = JsonDocument.Parse(response.RawContent);
    if (jsonDoc.RootElement.TryGetProperty("job_id", out var jobId))
    {
        Console.WriteLine($"Upscale Job ID: {jobId.GetString()}");
    }
}

Extend Video

Extend video length:
var request = new Dictionary<string, object>
{
    { "jobId", "original-video-job-id" },
    { "videoNo", 1 },  // Index of video to extend (0-3)
    { "callback", "https://example.com/callback" }
};

var response = await videoApi.ApiV1ExtendVideoPostAsync(
    new Option<string>(apiKey),
    request
);

if (response.IsOk)
{
    var jsonDoc = JsonDocument.Parse(response.RawContent);
    if (jsonDoc.RootElement.TryGetProperty("job_id", out var jobId))
    {
        Console.WriteLine($"Extend Job ID: {jobId.GetString()}");
    }
}

Check Task Status

Monitor video generation progress:
string jobId = "your-job-id";

var response = await videoApi.ApiV1JobJobIdGetAsync(
    jobId,
    new Option<string>(apiKey)
);

if (response.IsOk)
{
    var jsonDoc = JsonDocument.Parse(response.RawContent);
    var root = jsonDoc.RootElement;

    if (root.TryGetProperty("status", out var status))
    {
        Console.WriteLine($"Status: {status.GetString()}");
    }

    if (root.TryGetProperty("output", out var output))
    {
        if (output.TryGetProperty("video_urls", out var videoUrls))
        {
            Console.WriteLine("Videos:");
            foreach (var url in videoUrls.EnumerateArray())
            {
                Console.WriteLine($"  - {url.GetString()}");
            }
        }
    }
}

Response Handling

All responses follow this pattern:
var response = await videoApi.SomeMethodAsync(...);

if (response.IsOk)
{
    // Parse the JSON response
    var jsonDoc = JsonDocument.Parse(response.RawContent);
    var root = jsonDoc.RootElement;

    // Access properties
    if (root.TryGetProperty("job_id", out var jobId))
    {
        string jobIdValue = jobId.GetString();
    }

    if (root.TryGetProperty("status", out var status))
    {
        string statusValue = status.GetString();
    }
}
else
{
    Console.WriteLine($"Request failed: {response.StatusCode}");
    Console.WriteLine($"Response: {response.RawContent}");
}

Next Steps