AI Meets NFTs
What if users could describe an image in plain text and mint it as an NFT in seconds? That is exactly what we built with ProcreationAI — an AI-powered dApp for generating, customizing, and minting artwork on Solana.
This tutorial walks through the core pipeline: generate an image with an AI API, upload metadata to decentralized storage, and mint it as a Solana NFT using Metaplex — all within a Next.js application.
Architecture
User enters prompt
↓
Next.js API route → AI Image API (OpenAI / Stability AI)
↓
Generated image → Upload to Arweave / IPFS
↓
Metadata JSON → Upload to Arweave / IPFS
↓
Metaplex mint instruction → Solana
↓
NFT in user's wallet
Prerequisites
- Next.js 14+ project
- Solana wallet adapter set up (see Solana React Basics)
- An AI image generation API key (OpenAI DALL-E or Stability AI)
- Arweave or IPFS for decentralized storage
1. Set Up the AI Image Generation API
Create an API route that generates images from text prompts:
// src/app/api/generate/route.ts
import { NextRequest, NextResponse } from "next/server";
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
export async function POST(req: NextRequest) {
const { prompt, style } = await req.json();
if (!prompt) {
return NextResponse.json({ error: "Prompt is required" }, {
Using b64_json response format returns the image as a base64 string, avoiding an extra download step. For production, consider Stability AI's API for more control over style parameters and lower cost at scale.
2. Upload to Arweave
NFT metadata must be stored permanently. Arweave provides immutable storage that Solana NFT standards expect.
npm install @irys/sdk// src/lib/arweave.ts
import Irys from "@irys/sdk";
export async function uploadToArweave(
data: Buffer,
contentType: string
): Promise<string> {
const irys = new Irys({
url: "https://devnet.irys.xyz",
token: "solana",
key: process.env.ARWEAVE_WALLET_KEY,
config: {
providerUrl: process.env.SOLANA_RPC_URL,
},
});
const receipt
Upload Pipeline
// src/app/api/upload/route.ts
import { NextRequest, NextResponse } from "next/server";
import { uploadToArweave, uploadMetadata } from "@/lib/arweave";
export async function POST(req: NextRequest) {
const { imageBase64, name, description, attributes } = await req.json();
// Upload image
const imageBuffer = Buffer.from(imageBase64, "base64");
const imageUri = await uploadToArweave(imageBuffer,
3. Mint the NFT with Metaplex
npm install @metaplex-foundation/mpl-token-metadata \
@metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults \
@metaplex-foundation/umi-signer-wallet-adapters// src/lib/mint.ts
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import {
createNft,
mplTokenMetadata,
} from "@metaplex-foundation/mpl-token-metadata";
import { walletAdapterIdentity } from "@metaplex-foundation/umi-signer-wallet-adapters";
import { generateSigner, percentAmount } from "@metaplex-foundation/umi";
export async function mintNft(
wallet: any,
metadataUri: string,
name: string,
) {
const umi = createUmi(process
4. The Generator UI
"use client";
import { useState } from "react";
import { useWallet } from "@solana/wallet-adapter-react";
import { mintNft } from "@/lib/mint";
export function NftGenerator() {
const wallet = useWallet();
const [prompt, setPrompt] = useState("");
const [style, setStyle] = useState("digital art");
const [preview, setPreview] = useState<string | null
AI image generation costs money (DALL-E 3 is ~$0.04/image). In production, add rate limiting, user authentication, and payment/credit system before exposing the generation endpoint.
5. Collection Management
Group your AI-generated NFTs into a Metaplex collection:
import { createNft, verifyCollectionV1 } from "@metaplex-foundation/mpl-token-metadata";
// Create collection NFT (one-time)
const collectionMint = generateSigner(umi);
await createNft(umi, {
mint: collectionMint,
name: "AI Art Collection",
symbol: "AICOL",
uri: collectionMetadataUri,
sellerFeeBasisPoints: percentAmount(5),
isCollection: true,
}).sendAndConfirm(umi);
// When minting individual NFTs, pass the collection
await createNft(umi, {
Production Considerations
| Concern | Solution |
|---|---|
| Cost control | Queue generation requests, add credit system |
| Image storage | Arweave for permanence, IPFS + Pinata as fallback |
| Generation quality | Let users iterate on prompts before minting |
| Royalty enforcement | Use Metaplex royalty standard, consider Token-2022 for enforceable royalties |
| Legal | AI-generated art copyright is evolving — add clear terms of service |
Wrapping Up
Combining AI image generation with Solana NFT minting creates a compelling user experience: describe, preview, mint. The pipeline — AI API, Arweave upload, Metaplex mint — works for generative art projects, profile picture collections, or any creative dApp.
For the Solana wallet integration, see Solana React Basics. For the backend architecture, check our NestJS + Solana guide.