DEV Community

LeoJulieta
LeoJulieta

Posted on

Tokeniza tus pistas IA y gana royalties en 2024

🎧 Artistas virtuales: cómo tokenizar pistas generadas por IA en 2024


Introducción

En menos de un año, las pistas creadas por inteligencia artificial han pasado de ser un experimento de laboratorio a venderse como NFTs por cientos de dólares. Si aún no has probado a combinar IA y blockchain, estás perdiendo una fuente de ingresos que ya está generando royalties automáticos para músicos, productores y creadores de contenido. En este artículo te muestro, paso a paso y con ejemplos de código, cómo pasar de una idea a un NFT musical listo para vender en los marketplaces más populares.


1. ¿Qué necesitas para crear tu primer NFT musical?

Recurso Opciones recomendadas Por qué
Modelo de IA para generar audio MusicLM (Google), Riffusion (Stable Diffusion + audio), AIVA Calidad profesional y API pública (MusicLM) o código abierto (Riffusion).
Editor de audio Audacity, Reaper, Adobe Audition Para recortar, masterizar y exportar a WAV/MP3.
Cartera blockchain MetaMask (Ethereum), Polygon (MATIC) o Solana (Phantom) Polygon ofrece gas barato; Solana es ultra‑rápido.
Marketplace NFT OpenSea (Polygon), Mintable, Catalog (Solana) Soporte directo para archivos de audio y royalties.
Node.js (>=18) y ethers.js — Para interactuar con contratos inteligentes desde la línea de comandos.

Tip: Si eres principiante, abre una cuenta en Polygon y usa MetaMask; la curva de aprendizaje es menor y los costos de gas son prácticamente nulos.


2. Generar la pista con IA (ejemplo con MusicLM)

  1. Crear una cuenta en Google Cloud y habilitar la API de MusicLM (versión beta).
  2. Instalar el cliente de Python:
pip install google-cloud-aiplatform
Enter fullscreen mode Exit fullscreen mode
  1. Ejecutar el script (reemplaza YOUR_PROJECT_ID y YOUR_LOCATION):
from google.cloud import aiplatform

def generar_audio(prompt: str, output_path: str):
    client = aiplatform.gapic.PredictionServiceClient()
    endpoint = client.endpoint_path(
        project="YOUR_PROJECT_ID",
        location="YOUR_LOCATION",
        endpoint="musiclm-predict"
    )
    instance = {"prompt": prompt, "duration_seconds": 30}
    response = client.predict(endpoint=endpoint, instances=[instance])
    audio_bytes = response.predictions[0]["audio"]
    with open(output_path, "wb") as f:
        f.write(audio_bytes)

# Ejemplo de uso
generar_audio(
    prompt="Synthwave retro con bajo pulsante, tempo 120 BPM, atmósfera nocturna",
    output_path="track.wav"
)
Enter fullscreen mode Exit fullscreen mode
  1. Masteriza la pista en Audacity: normaliza a -1 dB, aplica compresión ligera y exporta como track.mp3.

3. Crear el contrato inteligente (ERC‑721 con royalties)

Utilizaremos OpenZeppelin y Hardhat para desplegar un contrato ERC‑721 que incluya EIP‑2981 (royalties).

# 1. Inicializar proyecto
mkdir nft-music && cd nft-music
npm init -y
npm install --save-dev hardhat @openzeppelin/contracts ethers
npx hardhat

# 2. Seleccionar "Create a basic sample project"
# 3. Reemplazar el contrato en contracts/MyMusicNFT.sol
Enter fullscreen mode Exit fullscreen mode
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/interfaces/IERC2981.sol";

contract MyMusicNFT is ERC721URIStorage, IERC2981 {
    address public immutable creator;
    uint96 public royaltyFee; // en basis points (ej. 750 = 7.5%)

    constructor(string memory name_, string memory symbol_, uint96 fee_) ERC721(name_, symbol_) {
        creator = msg.sender;
        royaltyFee = fee_;
    }

    function mint(address to, string memory tokenURI) external returns (uint256) {
        uint256 tokenId = totalSupply() + 1;
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, tokenURI);
        return tokenId;
    }

    // EIP‑2981
    function royaltyInfo(uint256, uint256 salePrice) external view override returns (address, uint256) {
        return (creator, (salePrice * royaltyFee) / 10000);
    }

    function _baseURI() internal pure override returns (string memory) {
        return "";
    }
}
Enter fullscreen mode Exit fullscreen mode

Desplegar en Polygon (testnet Mumbai)

# 1. Instalar la red
npm install @nomiclabs/hardhat-etherscan @nomiclabs/hardhat-ethers ethers

# 2. Configurar hardhat.config.js
Enter fullscreen mode Exit fullscreen mode
require("@nomiclabs/hardhat-ethers");
require("@nomiclabs/hardhat-etherscan");

module.exports = {
  solidity: "0.8.24",
  defaultNetwork: "mumbai",
  networks: {
    mumbai: {
      url: "https://polygon-mumbai.g.alchemy.com/v2/YOUR_ALCHEMY_KEY",
      accounts: ["0xYOUR_PRIVATE_KEY"]
    }
  },
  etherscan: {
    apiKey: "YOUR_POLYGONSCAN_API_KEY"
  }
};
Enter fullscreen mode Exit fullscreen mode
npx hardhat compile
npx hardhat run scripts/deploy.js --network mumbai
Enter fullscreen mode Exit fullscreen mode

El script deploy.js simplemente instancia MyMusicNFT con royaltyFee = 750 (7,5 %).


4. Acuñar el NFT con metadatos y archivo de audio

Los marketplaces esperan que el tokenURI apunte a un JSON con la siguiente estructura (IPFS recomendado):

{
  "name": "Synthwave Night #001",
  "description": "Pista generada con MusicLM. Prompt: 'Synthwave retro con bajo pulsante, tempo 120 BPM, atmósfera nocturna'.",
  "image": "ipfs://Qm.../cover.png",
  "animation_url": "ipfs://Qm.../track.mp3",
  "attributes": [
    { "trait_type": "Genre", "value": "Synthwave" },
    { "trait_type": "BPM", "value": 120 },
    { "trait_type": "AI Model", "value": "MusicLM" }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Subir a IPFS con nft.storage

npm install nft.storage
Enter fullscreen mode Exit fullscreen mode
const { NFTStorage, File } = require('nft.storage');
const fs = require('fs');
const mime = require('mime');

async function upload() {
  const client = new NFTStorage({ token: "YOUR_NFT_STORAGE_API_KEY" });

  const metadata = await client.store({
    name: "Synthwave Night #001",
    description: "Pista generada con MusicLM...",
    image: new File(
      [fs.readFileSync('cover.png')],
      "cover.png",
      { type: mime.getType('cover.png') }
    ),
    animation_url: new File(
      [fs.readFileSync('track.mp3')],
      "track.mp3",
      { type: mime.getType('track.mp3') }
    ),
    properties: {
      genre: "Synthwave",
      bpm: 120,
      model: "MusicLM"
    }
  });

  console.log("Metadata URI:", metadata.url);
}
upload();
Enter fullscreen mode Exit fullscreen mode

Copiamos la URI (ipfs://bafy...) y la pasamos al método mint del contrato:

async function mintNFT() {
  const provider = new ethers.providers.JsonRpcProvider("https://polygon-mumbai.g.alchemy.com/v2/YOUR_ALCHEMY_KEY");
  const wallet = new ethers.Wallet("0xYOUR_PRIVATE_KEY", provider);
  const contract = new ethers.Contract("DEPLOYED_CONTRACT_ADDRESS", abi, wallet);

  const tx = await contract.mint(wallet.address, "ipfs://bafy.../metadata.json");
  const receipt = await tx.wait();
  console.log("NFT acuñado. Token ID:", receipt.events[0].args.tokenId.toString());
}
mintNFT();
Enter fullscreen mode Exit fullscreen mode

5. Publicar y vender en un marketplace

  1. Abrir OpenSea (modo Polygon).
  2. Conectar tu cartera y hacer clic en "Create" → "My Music NFT".
  3. Pegar la metadata URI y establecer el royalty (debe coincidir con el 7,5 % del contrato).
  4. Elegir precio fijo (ej. 0.08 MATIC ≈ USD 15) o subasta.

Consejo de marketing:

  • Usa hashtags como #AIgeneratedMusic, #MusicNFT y #Synthwave.
  • Publica un teaser de

Herramienta mencionada: DigitalOcean

Top comments (0)