Setup
Copy
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:Copy
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()}");
}
}
Copy
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" }
};
Copy
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:Copy
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:Copy
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:Copy
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:Copy
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}");
}