Workflows

Virality Prediction

Score content for predicted click-through rate and viral potential before publishing.

Stop guessing which title or thumbnail will perform best. Rad TV's AI-powered virality prediction scores your content before you publish — analyzing your title, thumbnail, and description to predict click-through rate and viral potential. Test multiple options and go with the winner.

Virality prediction requires an active Creator+ subscription.

Making a Prediction

The predictVirality mutation analyzes your content metadata and returns scoring:

curl -X POST https://api.rad.live/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "query": "mutation($input: ViralityPredictionInput!) { predictVirality(input: $input) { viralityScore predictedCtr confidence recommendations { text priority } } }",
    "variables": {
      "input": {
        "title": "10 Hidden Features of the New iPhone",
        "imageUrl": "https://example.com/thumbnail.jpg",
        "description": "We found features Apple never told you about.",
        "category": "Technology"
      }
    }
  }'
const response = await fetch('https://api.rad.live/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY',
  },
  body: JSON.stringify({
    query: `
      mutation($input: ViralityPredictionInput!) {
        predictVirality(input: $input) {
          viralityScore
          predictedCtr
          confidence
          recommendations { text priority }
        }
      }
    `,
    variables: {
      input: {
        title: '10 Hidden Features of the New iPhone',
        imageUrl: 'https://example.com/thumbnail.jpg',
        description: 'We found features Apple never told you about.',
        category: 'Technology',
      },
    },
  }),
});

const { data } = await response.json();
const prediction = data.predictVirality;
console.log(`Virality: ${prediction.viralityScore}, CTR: ${prediction.predictedCtr}`);
import requests

response = requests.post(
    "https://api.rad.live/graphql",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_API_KEY",
    },
    json={
        "query": """
        mutation($input: ViralityPredictionInput!) {
          predictVirality(input: $input) {
            viralityScore
            predictedCtr
            confidence
            recommendations { text priority }
          }
        }
        """,
        "variables": {
            "input": {
                "title": "10 Hidden Features of the New iPhone",
                "imageUrl": "https://example.com/thumbnail.jpg",
                "description": "We found features Apple never told you about.",
                "category": "Technology",
            }
        },
    },
)

prediction = response.json()["data"]["predictVirality"]
print(f"Virality: {prediction['viralityScore']}, CTR: {prediction['predictedCtr']}")

Input Fields

FieldTypeRequiredDescription
titleStringYesContent title to analyze
imageUrlURLNoThumbnail image URL for visual analysis
descriptionStringNoContent description/summary
categoryStringNoContent category for context

Response Fields

FieldTypeDescription
viralityScoreFloatOverall viral potential (0-1)
predictedCtrFloatPredicted click-through rate (0-1)
confidenceFloatHow confident the model is (0-1)
bestCategoryStringThe category where this content would perform best
recommendations[Recommendation]Actionable suggestions for improvement

Each recommendation includes:

FieldTypeDescription
textStringWhat to change
priorityStringImportance: high, medium, or low

Understanding Scores

Score RangeWhat It Means
0.8 - 1.0Strong viral potential — publish with confidence
0.5 - 0.8Good potential — check recommendations for easy wins
0.2 - 0.5Moderate — consider revising title or thumbnail
Below 0.2Low potential — significant changes recommended

A/B Test Before Publishing

The best way to use virality prediction: test multiple titles or thumbnails and pick the winner.

// Test multiple titles
const titles = [
  '10 Hidden iPhone Features',
  'iPhone Secrets Apple Doesn\'t Want You to Know',
  'I Found Secret iPhone Features Nobody Talks About',
];

const results = await Promise.all(
  titles.map(title =>
    predictVirality({ title, imageUrl: thumbnailUrl, category: 'Technology' })
  )
);

// Pick the highest scoring title
const best = results.reduce((a, b) =>
  a.viralityScore > b.viralityScore ? a : b
);

MCP Tool

The same prediction is available as the predict_virality MCP tool for agent-based workflows. See MCP Tools for details.

Next steps

On this page