-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
66 lines (54 loc) · 2.26 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.IO;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Azure;
using Azure.AI.OpenAI;
using Microsoft.Extensions.Configuration;
// Check if the required arguments are provided
if (args.Length < 2)
{
Console.WriteLine("Usage: dotnet run <prompt> <outputFileName>");
return;
}
var prompt = args[0];
var outputFileName = args[1];
// Load configuration from appsettings.json
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
// Get OpenAI and OpenAIClient options from configuration
var openAIOptions = config.GetSection("OpenAI").Get<ImageGenerationOptions>() ?? throw new InvalidOperationException("OpenAI configuration section not found.");
var openAIClientOptions = config.GetSection("OpenAIClient").Get<OpenAIClientOptions>() ?? throw new InvalidOperationException("OpenAIClient configuration section not found.");
// Initialize cancellation token
var cancellationToken = new CancellationToken();
// Set OpenAI options
openAIOptions.Prompt = prompt;
openAIOptions.ImageCount = 1;
openAIOptions.Style = ImageGenerationStyle.Vivid;
openAIOptions.Size = ImageSize.Size1024x1024;
openAIOptions.Quality = ImageGenerationQuality.Hd;
// Initialize OpenAI client
var client = new OpenAIClient(new Uri(openAIClientOptions.Endpoint), new AzureKeyCredential(openAIClientOptions.ApiKey));
// Check if endpoint and API key are provided
if (string.IsNullOrEmpty(openAIClientOptions.Endpoint) || string.IsNullOrEmpty(openAIClientOptions.ApiKey))
{
Console.WriteLine("Endpoint and/or ApiKey is missing.");
return;
}
// Call OpenAI API to generate images
var response = await client.GetImageGenerationsAsync(openAIOptions, cancellationToken);
// Access the Value property to get the ImageGenerations object
var generations = response.Value.Data;
foreach (var generation in generations)
{
// Download and save each generated image
using (var httpClient = new HttpClient())
{
var imageBytes = await httpClient.GetByteArrayAsync(generation.Url);
await File.WriteAllBytesAsync($"{outputFileName}.png", imageBytes);
}
Console.WriteLine($"Image saved as {outputFileName}.png");
}