이 튜토리얼에서는 DALL·E 2 AI 생성 이미지를 Story에 등록하여 라이선스하고 보호하는 방법을 배우게 됩니다.

설명

AI를 사용하여 이미지를 생성했다고 가정해 봅시다. 이미지에 적절한 라이선스를 추가하지 않으면 다른 사람들이 자유롭게 사용할 수 있습니다. 이 튜토리얼에서는 DALL·E 2 AI 생성 이미지에 라이선스를 추가하는 방법을 배워 다른 사람들이 사용하려면 반드시 귀하로부터 적절한 라이선스를 받아야 하도록 하는 방법을 배우게 됩니다.

Story에 해당 IP를 등록하려면 먼저 해당 IP를 나타내는 NFT를 발행한 다음, 그 NFT를 Story에 등록하여 IP Asset으로 만들어야 합니다.

0. 시작하기 전에

튜토리얼을 시작하기 전에 완료해야 할 몇 가지 단계가 있습니다.

  1. 다음을 설치해야 합니다: Node.jsnpm. 이전에 코딩을 해보셨다면 이미 설치되어 있을 것입니다.
  2. Story Network Testnet 지갑의 개인 키를 .env file:
.env
WALLET_PRIVATE_KEY=
  1. 다음으로 이동: Pinata에서 새 API 키를 생성하세요. JWT를 .env file:
.env
PINATA_JWT=
  1. 다음으로 이동: OpenAI에서 새 API 키를 생성하세요. 새 키를 .env file:

OpenAI 크레딧

이미지를 생성하려면 OpenAI 크레딧이 필요합니다. 방금 계정을 만들었다면 시작할 수 있는 몇 가지 크레딧이 포함된 무료 평가판이 있을 것입니다.

.env
OPENAI_API_KEY=
  1. 선호하는 RPC URL을 .env 파일에 추가하세요. 우리가 제공하는 기본 공개 URL을 사용할 수 있습니다:
.env
RPC_PROVIDER_URL=https://aeneid.storyrpc.io
  1. 의존성 설치:
Terminal
npm install @story-protocol/core-sdk pinata-web3 viem openai

1. 이미지 생성

다음 main.ts 파일에 이미지를 생성하는 다음 코드를 추가하세요:

main.ts
import OpenAI from "openai";

async function main() {
  const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY,
  });

  const image = await openai.images.generate({
    model: "dall-e-2",
    prompt: "A cute baby sea otter",
  });

  console.log(image.data[0].url); // the url to the newly created image
}

main();

2. Story Config 설정

다음 utils.ts 파일에 Story Config를 설정하는 다음 코드를 추가하세요:

관련 문서: TypeScript SDK 설정

utils.ts
import { StoryClient, StoryConfig } from "@story-protocol/core-sdk";
import { http } from "viem";
import { privateKeyToAccount, Address, Account } from "viem/accounts";

const privateKey: Address = `0x${process.env.WALLET_PRIVATE_KEY}`;
export const account: Account = privateKeyToAccount(privateKey);

const config: StoryConfig = {
  account: account,
  transport: http(process.env.RPC_PROVIDER_URL),
  chainId: "aeneid",
};
export const client = StoryClient.newClient(config);

3. IP 메타데이터 설정

다음을 확인하세요: IPA 메타데이터 표준을 보고 IP에 대한 메타데이터를 구성하세요. main.ts 파일로 돌아가서 아래와 같이 메타데이터를 적절히 포맷하세요:

main.ts
import OpenAI from "openai";
import { client, account } from "./utils";

async function main() {
  // previous code here ...

  const ipMetadata = {
    title: "Baby Sea Otter",
    description: "A baby sea otter generated with DALL·E.",
    createdAt: "1728401700",
    image: image.data[0].url,
    imageHash: "0x...", // a hash of the image
    mediaUrl: image.data[0].url,
    mediaHash: "0x...", // a hash of the image
    mediaType: "image/png",
    creators: [
      {
        name: "Jacob Tucker",
        address: "0x67ee74EE04A0E6d14Ca6C27428B27F3EFd5CD084",
        description: "A cool dev rel person.",
        contributionPercent: 100,
        socialMedia: [
          {
            platform: "Twitter",
            url: "https://x.com/jacobmtucker",
          },
        ],
      },
    ],
  };
}

main();

4. NFT 메타데이터 설정

NFT 메타데이터는 ERC-721 메타데이터 표준을 따릅니다.

main.ts
import OpenAI from "openai";
import { client, account } from "./utils";

async function main() {
  // previous code here ...

  const nftMetadata = {
    name: "Image Ownership NFT",
    description:
      "This NFT represents ownership of the image generated by Dall-E 2",
    image: image.data[0].url,
    attributes: [
      {
        key: "Model",
        value: "dall-e-2",
      },
      {
        key: "Prompt",
        value: "A cute baby sea otter",
      },
    ],
  };
}

main();

5. IP 업로드 및 등록

이제 모든 메타데이터가 설정되었으므로 IP Asset 등록하기로 이동하여 3단계(IP 및 NFT 메타데이터를 IPFS에 업로드)와 4단계(NFT를 IP Asset으로 등록)를 완료하면 이 튜토리얼을 쉽게 완료할 수 있습니다.

완료하면 등록된 AI 생성 이미지를 보여주는 IP-explorer 링크가 포함된 콘솔 로그가 표시될 것입니다.

6. 완료!