Docs/Skills and code/Top-level code

config-art.js

Code289 lines10.7 KBTop-level code

Mentioned on: page 02

import path from "node:path";

const root = process.cwd();

export const config = {
  projectName: "YouTube Ecosystem Intelligence",

  // Keep this database separate from crochet, cricket, geopolitics, business, and science.
  dbPath: path.join(root, "data", "art-ecosystem.db"),
  seedPath: path.join(root, "seeds", "topics.json"),
  discoverySeedPath: path.join(root, "seeds", "discovery-v2.json"),

  youtube: {
    resultsPerSearch: 30
  },

  viewer: {
    port: 3000
  },

  ecosystem: {
    name: "art",
    description:
      "The YouTube ecosystem of visual art, art history, artworks, artists, movements, criticism, and collections: art history explainers, painting and sculpture analysis, artist biographies and documentaries, art movements from the Renaissance to contemporary art, art criticism and video essays, museum and gallery collection tours, art restoration and conservation, art market and forgery stories, and practising artists who teach or document painting, drawing, and sculpture. The focus is on channels that explain, analyse, teach, document, or critique visual art for a general or specialist audience.",

    includeTerms: [
      "art history",
      "art history explained",
      "visual art",
      "fine art",
      "painting analysis",
      "painting explained",
      "paintings explained",
      "sculpture history",
      "artist biography",
      "artists explained",
      "art movement explained",
      "art movements",
      "renaissance art",
      "impressionism explained",
      "post-impressionism",
      "modern art explained",
      "contemporary art explained",
      "art criticism",
      "museum collection tour",
      "art museum",
      "art gallery",
      "art restoration",
      "art conservation",
      "art forgery",
      "art market",
      "artworks explained",
      "how to look at art",
      "painting technique explained",
      "drawing and painting tutorial"
    ],

    // These are discovery hints and false-positive areas, not automatic
    // exclusion rules. Qualification should use the channel's actual content.
    excludeTerms: [
      "music-only channel",
      "piano and music lessons",
      "song covers and music",
      "gaming walkthrough",
      "movie recap with no art focus",
      "celebrity gossip",
      "unrelated shopping haul",
      "product promotion with no art content",
      "art used only as a hashtag or keyword stuffing",
      "AI-generated slideshow with no real art analysis"
    ],

    adjacentTerms: [
      "architecture history",
      "cinema and visual storytelling",
      "mythology and visual culture",
      "design history",
      "cultural history",
      "photography history",
      "fashion history",
      "graphic design",
      "illustration and comics history",
      "calligraphy and typography",
      "craft and decorative arts",
      "textile arts",
      "ceramics and pottery"
    ],

    // Optional review anchors only. Discovery does not depend on these.
    referenceChannels: [],

    discovery: {
      topicSeeds: [
        "art history explained for beginners",
        "history of Western art explained",
        "Renaissance painting explained",
        "Baroque painting explained Caravaggio Rembrandt",
        "Impressionism art history explained",
        "Post-Impressionism Van Gogh Cezanne Gauguin analysis",
        "Cubism explained art history",
        "Surrealism art movement explained",
        "Abstract expressionism explained",
        "contemporary art explained",
        "medieval art and illuminated manuscripts explained",
        "how to look at a painting analysis",
        "art criticism video essay",
        "museum tour and art collection highlights",
        "Louvre National Gallery Metropolitan Museum collection explained",
        "art restoration and conservation explained",
        "art forgery and art theft investigation",
        "women artists in history explained",
        "street art and graffiti history",
        "sculpture history explained",
        "Japanese woodblock prints ukiyo-e explained",
        "Islamic art and calligraphy explained",
        "Indian miniature painting art history",
        "African art history explained masks",
        "art auction record prices explained",
        "famous painting technique analysis oil glazing",
        "artist biography documentary painter life",
        "art history podcast",
        "oil painting tutorial for beginners",
        "watercolor painting tutorial for beginners",
        "drawing portraits tutorial step by step"
      ],

      adjacentSeeds: [
        {
          label: "architecture history",
          query: "architecture history explained visual culture"
        },
        {
          label: "photography history",
          query: "history of photography explained"
        },
        {
          label: "design history",
          query: "graphic design history explained"
        },
        {
          label: "film visual storytelling",
          query: "film visual storytelling and cinematography analysis"
        },
        {
          label: "mythology and visual culture",
          query: "mythology symbolism in art explained"
        },
        {
          label: "fashion history",
          query: "fashion history explained costume"
        },
        {
          label: "cultural history",
          query: "cultural history of objects and museums"
        },
        {
          label: "comics and illustration",
          query: "comic book illustration history explained"
        },
        {
          label: "calligraphy and typography",
          query: "calligraphy and typography history"
        },
        {
          label: "ceramics and pottery",
          query: "ceramics pottery history and technique"
        }
      ]
    }
  },

  qualification: {
    promptVersion: "art-ecosystem-qualification-v1.0",
    minimumConfidenceToQualify: 0.58,

    llm: {
      batchSize: 16,
      maxVideoTitles: 14,
      descriptionChars: 1600,
      retryMissingIndividually: true
    },

    classification: {
      labels: ["core", "adjacent", "unknown", "irrelevant"],

      core: {
        definition:
          "Visual art (art history, artworks, artists, movements, criticism, collections, or the making of painting, drawing, and sculpture) is a primary recurring editorial subject. The channel may focus on one artist, period, movement, medium, or museum, or on visual art broadly.",
        includeWhen: [
          "Multiple representative videos explain artworks, analyse paintings or sculptures, or tell the history of art movements or periods.",
          "The channel has a recognizable art historian, art critic, museum educator, artist, or art teacher identity.",
          "A museum, gallery, or collection regularly publishes substantive videos about its artworks.",
          "A practising painter, draughtsperson, or sculptor regularly teaches or documents their visual art practice.",
          "A channel covering art history and visual culture where visual art is a major recurring share."
        ],
        doNotInferFrom: [
          "A channel name containing 'art' without supporting video evidence.",
          "A single art video on an otherwise unrelated channel.",
          "Art keywords or hashtags in titles of otherwise unrelated or low-effort content.",
          "A channel's popularity or subscriber count alone."
        ]
      },

      adjacent: {
        definition:
          "The channel has meaningful recurring overlap with visual art, but visual art is not clearly its primary editorial identity.",
        includeWhen: [
          "Architecture, design, photography, film, fashion, or illustration history with recurring visual-art content.",
          "Mythology, cultural history, or visual culture channels that regularly analyse artworks.",
          "A craft, decorative arts, ceramics, or textile channel that covers art history or artists as a recurring share.",
          "A broader creative or DIY channel where painting, drawing, or art technique is a substantial recurring share."
        ],
        doNotInferFrom: [
          "A generic DIY or lifestyle channel with no concrete recurring art content.",
          "A one-off art video on an otherwise unrelated channel."
        ]
      },

      unknown: {
        definition:
          "The available evidence is sparse, ambiguous, contradictory, or insufficient to establish recurring relevance to visual art.",
        includeWhen: [
          "The description is missing or generic and representative titles do not establish the channel's focus.",
          "Only one or two potentially unrepresentative videos are available.",
          "The channel mixes art with unrelated topics and the balance cannot yet be established.",
          "The channel may be relevant, but the evidence does not support a confident core or adjacent classification."
        ]
      },

      irrelevant: {
        definition:
          "The channel's evidenced primary subject has no meaningful recurring connection to visual art or the configured adjacent fields.",
        includeWhen: [
          "The description and representative titles consistently establish an unrelated primary subject.",
          "Art-related words are incidental, used in unrelated meanings, or appear only in isolated uploads.",
          "The channel consists primarily of unrelated entertainment, music, gaming, gossip, or promotion with no meaningful art content."
        ]
      }
    }
  },

  queueScoring: {
    version: "channel-queues-v6-art-ecosystem",
    minimumCoverageForSupported: 70,

    breakout: {
      minVideosForScore: 5,
      fullSampleConfidenceVideos: 20,
      smallChannelSubscriberPrior: 1000,
      minimumAgeDaysForAgeAdjustedViews: 30
    },

    ranking: {
      coreBeforeAdjacent: true,
      minimumQualificationConfidence: 0.58,
      minimumConfidenceForSupported: 0.75,
      unknownChannelsRequireQualification: true,
      missingEvidenceIsNull: true
    }
  },

  discovery: {
    resultsPerQuery: 30,
    delayMs: 350,
    maxHypothesesPerRoute: 4,

    routes: {
      A: { label: "channel-led", maxQueries: 20 },
      B: { label: "video-led", maxQueries: 20 },
      C: { label: "topic-led", maxQueries: 30 },
      D: { label: "adjacent-ecosystem", maxQueries: 10 }
    },

    // LLM-generated discovery queries remain opt-in.
    llm: {
      enabledByDefault: false,
      batchSize: 1
    }
  },

  stage1_5: {
    popularVideos: 20,
    newestVideos: 20,
    maxChannelPages: 5,
    youtubeCachePath: path.join(root, "data", "youtube-cache"),
    requestDelayMs: 250
  }
};

Shown as it is in the repository at build time (2026-11-03); the home directory appears as <home>. If this page and the file differ, the file is right. Back to the catalogue.