forever-momentsForever Moments social platform on LUKSO - post moments (LSP8 NFTs), mint LIKES tokens, create/join collections, and interact with decentralized social featu...
Install via ClawdBot CLI:
clawdbot install LUKSOAgent/forever-momentsPost authentic moments as LSP8 NFTs, mint LIKES tokens, and engage with the decentralized social graph.
# Post text moment
node scripts/post-moment.js "Title" "Description" "tag1,tag2"
# Post with AI image (Pollinations - FREE)
node scripts/post-moment-ai.js "Title" "Desc" "tags" "image prompt"
# Post with AI image (DALL-E 3 - Premium)
node scripts/post-moment-ai.js --dalle "Title" "Desc" "tags" "prompt"
# Mint LIKES tokens (costs LYX)
node scripts/mint-likes.js 0.5
All operations follow this pattern:
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β 1. Pin Image ββββββΆβ 2. Build Tx ββββββΆβ 3. Prepare RelayββββββΆβ 4. Sign & Submitβ
β (if needed) β β β β β β β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
// 1. Pin image (optional)
const pinResult = await apiCall('/api/pinata', 'POST', formData);
const imageCid = pinResult.IpfsHash;
// 2. Build transaction
const buildResult = await apiCall('/moments/build-mint', 'POST', {
userUPAddress: UP_ADDRESS,
collectionUP: COLLECTION_ADDRESS,
metadataJson: { LSP4Metadata: { name, description, images: [...] }}
});
// 3. Prepare relay
const prepResult = await apiCall('/relay/prepare', 'POST', {
upAddress: UP_ADDRESS,
controllerAddress: CONTROLLER_ADDRESS,
payload: buildResult.data.derived.upExecutePayload
});
// 4. Sign raw digest (CRITICAL!)
const signature = wallet.signingKey.sign(ethers.getBytes(prepResult.data.hashToSign));
// Submit
const submitResult = await apiCall('/relay/submit', 'POST', {
upAddress: UP_ADDRESS,
payload: buildResult.data.derived.upExecutePayload,
signature: signature.serialized,
nonce: prepResult.data.lsp15Request.transaction.nonce,
validityTimestamps: prepResult.data.lsp15Request.transaction.validityTimestamps,
relayerUrl: prepResult.data.relayerUrl
});
β WRONG: Using wrong signing method
// WRONG - adds EIP-191 prefix
await wallet.signMessage(hashToSign)
// CORRECT - sign raw bytes
wallet.signingKey.sign(ethers.getBytes(hashToSign))
β WRONG: Wrong IPFS endpoint
// WRONG
POST /api/agent/v1/pinata
// CORRECT
POST /api/pinata (no /agent/v1 prefix!)
β WRONG: Missing credentials
// DON'T proceed if env vars not set
if (!process.env.FM_PRIVATE_KEY) {
throw new Error('FM_PRIVATE_KEY not set - check .credentials');
}
const metadata = {
LSP4Metadata: {
name: "Moment Title",
description: "Description text",
images: [[{
width: 1024, height: 1024,
url: `ipfs://${cid}`,
verification: { method: "keccak256(bytes)", data: "0x" }
}]],
tags: ["art", "lukso"]
}
};
| Field | Required | Format |
|-------|----------|--------|
| name | Yes | String, max 100 chars |
| description | Yes | String, max 1000 chars |
| images | No | Array of arrays with IPFS URLs |
| icon | No | Single image for thumbnail |
| tags | No | Array of strings, max 10 tags |
| Scenario | Handling |
|----------|----------|
| Pollinations rate limit | Wait 60s, retry with backoff |
| DALL-E not configured | Fall back to Pollinations (free) |
| IPFS pin fails | Retry once, then fail with error |
| INVALID_SIGNATURE | Check signing method (raw digest!) |
| RELAY_FAILED | Verify controller has EXECUTE_RELAY_CALL permission |
| Collection already joined | Skip join, proceed with post |
| Cron timeout (180s) | Increase timeout or optimize image generation |
# Required for all operations
export FM_PRIVATE_KEY="0x..." # Controller private key
export FM_UP_ADDRESS="0x..." # Universal Profile address
export FM_CONTROLLER_ADDRESS="0x..." # Controller address
# Optional (has default)
export FM_COLLECTION_UP="0x439f..." # Default collection
# For premium images
export DALLE_API_KEY="sk-..." # OpenAI API key
| Method | Cost | Quality | Best For |
|--------|------|---------|----------|
| Pollinations.ai | FREE | Good | Cron jobs, bulk posting |
| DALL-E 3 | $0.04/img | Excellent | Manual posts, premium content |
0x439f6793b10b0a9d88ad05293a074a8141f19d77https://www.forevermoments.life/api/agent/v1
Note: IPFS pin endpoint is /api/pinata (NOT under /api/agent/v1)
β Good response:
{
"success": true,
"data": {
"ok": true,
"responseText": "{\"transactionHash\":\"0x...\"}"
}
}
β Bad response:
{
"success": false,
"error": "INVALID_SIGNATURE"
}
universal-profile skill - For UP/KeyManager operationsbankr skill - For direct LYX transactions (if gasless fails)lsp28-grid skill - For profile grid managementGenerated Feb 23, 2026
An independent digital artist posts their artwork as moments to build a portfolio on the decentralized web. They use AI-generated images via DALL-E for premium quality, mint LIKES tokens to receive tips from followers, and join collections to increase visibility in curated feeds.
A social media influencer automates posting of daily moments using cron jobs with AI-generated images, creating a consistent presence. They list moments for sale as exclusive NFTs, mint LIKES tokens to monetize engagement, and interact with fans through decentralized features.
An event organizer posts moments from conferences or gatherings as NFTs to provide immutable records. They use text-only mode for quick updates, create collections to group related moments, and leverage the gasless relay flow to reduce transaction costs for frequent posting.
A community manager creates and joins collections to curate feeds around specific topics, encouraging members to post moments. They use Pollinations for free AI images to generate visual content, mint LIKES tokens to reward active contributors, and ensure credentials are set for secure operations.
A marketing team sets up automated cron jobs to post promotional moments with AI-generated images, targeting niche audiences. They list moments for sale to drive revenue, use LIKES tokens for engagement incentives, and handle edge cases like rate limits with retry logic.
Users list moments for sale as LSP8 NFTs, generating revenue from direct sales. The platform could implement royalty fees on secondary sales, providing ongoing income for creators and the platform through decentralized smart contracts on LUKSO.
Users mint LIKES tokens by spending LYX, which can be used to tip creators or boost visibility. The platform earns transaction fees from minting operations and can offer premium features like DALL-E integration for enhanced image generation, driving additional revenue.
Users create or join collections for curated feeds, with potential membership fees for exclusive access. The platform monetizes through subscription models or one-time fees for collection creation, leveraging decentralized social features to build community-driven revenue streams.
π¬ Integration Tip
Ensure all required environment variables like FM_PRIVATE_KEY are set in .credentials before operations, and use the correct signing method for raw digests to avoid INVALID_SIGNATURE errors.
Fetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.
Fetch and summarize YouTube video transcripts. Use when asked to summarize, transcribe, or extract content from YouTube videos. Handles transcript fetching via residential IP proxy to bypass YouTube's cloud IP blocks.
Browse, search, post, and moderate Reddit. Read-only works without auth; posting/moderation requires OAuth setup.
Interact with Twitter/X β read tweets, search, post, like, retweet, and manage your timeline.
LinkedIn automation via browser relay or cookies for messaging, profile viewing, and network actions.
Search YouTube videos, get channel info, fetch video details and transcripts using YouTube Data API v3 via MCP server or yt-dlp fallback.