{
  "title": "NetEase Cloud Music Scraper Input",
  "description": "Search NetEase Cloud Music, fetch songs, lyrics, artists, albums, playlists, all charts and comments. No login or proxy setup required.",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "mode": {
      "title": "Mode",
      "type": "string",
      "description": "What to fetch. Each mode reads its own list field.",
      "editor": "select",
      "enum": [
        "search",
        "bySongUrl",
        "byArtist",
        "byArtistAlbums",
        "byAlbum",
        "byPlaylist",
        "byPlaylistUrl",
        "byToplist",
        "toplists",
        "comments"
      ],
      "enumTitles": [
        "Search songs, albums, artists or playlists",
        "Song details by URL or ID (with lyrics)",
        "Artist full song catalogue",
        "Artist album discography",
        "Album details and tracks",
        "Browse playlists by category",
        "Playlist details and full tracklist",
        "One or more charts (or all charts)",
        "Chart catalogue",
        "Comments and replies"
      ],
      "default": "search",
      "prefill": "search"
    },
    "searchQueries": {
      "title": "Search queries",
      "type": "array",
      "description": "Free-text queries (mode=search). One or more artist, song, album or playlist names.",
      "editor": "stringList",
      "default": [
        "周杰伦"
      ],
      "prefill": [
        "周杰伦"
      ]
    },
    "searchType": {
      "title": "Search result type",
      "type": "string",
      "description": "Which catalog entity to search for (mode=search).",
      "editor": "select",
      "enum": [
        "song",
        "album",
        "artist",
        "playlist"
      ],
      "enumTitles": [
        "Songs",
        "Albums",
        "Artists",
        "Playlists"
      ],
      "default": "song",
      "prefill": "song"
    },
    "songUrls": {
      "title": "Song URLs or IDs (mode=bySongUrl)",
      "type": "array",
      "description": "music.163.com song URLs or bare song IDs, e.g. 186016.",
      "editor": "stringList",
      "default": [],
      "prefill": []
    },
    "artistIds": {
      "title": "Artist IDs, URLs or names (mode=byArtist / byArtistAlbums)",
      "type": "array",
      "description": "Artist IDs, music.163.com artist URLs, or exact artist names.",
      "editor": "stringList",
      "default": [],
      "prefill": []
    },
    "artistOrder": {
      "title": "Artist song order",
      "type": "string",
      "description": "Order the artist's song catalogue by popularity or release time (mode=byArtist).",
      "editor": "select",
      "enum": [
        "hot",
        "time"
      ],
      "enumTitles": [
        "Most popular",
        "Newest release"
      ],
      "default": "hot",
      "prefill": "hot"
    },
    "albumUrls": {
      "title": "Album URLs or IDs (mode=byAlbum)",
      "type": "array",
      "description": "music.163.com album URLs or bare album IDs.",
      "editor": "stringList",
      "default": [],
      "prefill": []
    },
    "playlistUrls": {
      "title": "Playlist URLs or IDs (mode=byPlaylistUrl)",
      "type": "array",
      "description": "music.163.com playlist URLs or bare playlist IDs. Full tracklists are read.",
      "editor": "stringList",
      "default": [],
      "prefill": []
    },
    "playlistCat": {
      "title": "Playlist category",
      "type": "string",
      "description": "NetEase playlist genre, scene or mood to browse (mode=byPlaylist).",
      "editor": "select",
      "enum": [
        "全部",
        "综艺",
        "流行",
        "怀旧",
        "清晨",
        "华语",
        "影视原声",
        "摇滚",
        "夜晚",
        "清新",
        "欧美",
        "ACG",
        "民谣",
        "学习",
        "浪漫",
        "儿童",
        "日语",
        "工作",
        "校园",
        "电子",
        "韩语",
        "游戏",
        "午休",
        "粤语",
        "伤感",
        "舞曲",
        "治愈",
        "下午茶",
        "说唱",
        "70后",
        "地铁",
        "轻音乐",
        "放松",
        "80后",
        "驾车",
        "爵士",
        "孤独",
        "90后",
        "乡村",
        "感动",
        "运动",
        "网络歌曲",
        "旅行",
        "兴奋",
        "R&B/Soul",
        "KTV",
        "古典",
        "快乐",
        "经典",
        "散步",
        "翻唱",
        "民族",
        "酒吧",
        "安静",
        "英伦",
        "思念",
        "吉他",
        "金属",
        "钢琴",
        "朋克",
        "器乐",
        "蓝调",
        "榜单",
        "雷鬼",
        "00后",
        "世界音乐",
        "拉丁",
        "New Age",
        "古风",
        "后摇",
        "Bossa Nova"
      ],
      "enumTitles": [
        "全部",
        "综艺",
        "流行",
        "怀旧",
        "清晨",
        "华语",
        "影视原声",
        "摇滚",
        "夜晚",
        "清新",
        "欧美",
        "ACG",
        "民谣",
        "学习",
        "浪漫",
        "儿童",
        "日语",
        "工作",
        "校园",
        "电子",
        "韩语",
        "游戏",
        "午休",
        "粤语",
        "伤感",
        "舞曲",
        "治愈",
        "下午茶",
        "说唱",
        "70后",
        "地铁",
        "轻音乐",
        "放松",
        "80后",
        "驾车",
        "爵士",
        "孤独",
        "90后",
        "乡村",
        "感动",
        "运动",
        "网络歌曲",
        "旅行",
        "兴奋",
        "R&B/Soul",
        "KTV",
        "古典",
        "快乐",
        "经典",
        "散步",
        "翻唱",
        "民族",
        "酒吧",
        "安静",
        "英伦",
        "思念",
        "吉他",
        "金属",
        "钢琴",
        "朋克",
        "器乐",
        "蓝调",
        "榜单",
        "雷鬼",
        "00后",
        "世界音乐",
        "拉丁",
        "New Age",
        "古风",
        "后摇",
        "Bossa Nova"
      ],
      "default": "华语",
      "prefill": "华语"
    },
    "toplistIds": {
      "title": "Chart IDs, names or URLs (mode=byToplist)",
      "type": "array",
      "description": "Chart IDs, music.163.com toplist URLs, or Chinese/English chart names. Use `all` or leave empty for every current chart.",
      "editor": "stringList",
      "default": [],
      "prefill": []
    },
    "maxTracksPerChart": {
      "title": "Max tracks per chart",
      "type": "integer",
      "description": "Limit tracks read from each chart before the global max items cap (mode=byToplist). 0 reads every track.",
      "minimum": 0,
      "maximum": 1000,
      "default": 0,
      "prefill": 0
    },
    "commentUrls": {
      "title": "Comment targets (mode=comments)",
      "type": "array",
      "description": "Song, album, playlist or chart URLs/IDs. A bare ID is treated as a song; use `album:123`, `playlist:123` or `chart:123` to be explicit.",
      "editor": "stringList",
      "default": [],
      "prefill": []
    },
    "commentOrder": {
      "title": "Comment order",
      "type": "string",
      "description": "Recommended comments or NetEase's hot-comment selection (mode=comments).",
      "editor": "select",
      "enum": [
        "recommended",
        "hot"
      ],
      "enumTitles": [
        "Recommended",
        "Hot comments"
      ],
      "default": "recommended",
      "prefill": "recommended"
    },
    "maxCommentsPerItem": {
      "title": "Max comments per resource",
      "type": "integer",
      "description": "Maximum top-level comments read per song, album, playlist or chart (mode=comments). NetEase stops anonymous pagination around 1,100.",
      "minimum": 1,
      "maximum": 1100,
      "default": 100,
      "prefill": 100
    },
    "includeReplies": {
      "title": "Include comment replies",
      "type": "boolean",
      "description": "Fetch the reply floor for comments that have replies (mode=comments).",
      "default": false,
      "prefill": false
    },
    "maxRepliesPerComment": {
      "title": "Max replies per comment",
      "type": "integer",
      "description": "How many replies to read for each comment when replies are enabled (mode=comments).",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "prefill": 20
    },
    "includeArtistProfile": {
      "title": "Include artist profile",
      "type": "boolean",
      "description": "Emit one artist profile record with bio, images, sizes, rank, identities and fan count (mode=byArtist / byArtistAlbums).",
      "default": false,
      "prefill": false
    },
    "includeLyrics": {
      "title": "Include lyrics",
      "type": "boolean",
      "description": "Attach full LRC lyrics plus translation, romanization and word-by-word lyrics when NetEase has them (every song mode).",
      "default": false,
      "prefill": false
    },
    "includeAlbumTracks": {
      "title": "Include album tracks",
      "type": "boolean",
      "description": "Emit each album's tracks as song records (mode=byAlbum).",
      "default": true,
      "prefill": true
    },
    "includePlaylistTracks": {
      "title": "Include playlist tracks",
      "type": "boolean",
      "description": "Emit the playlist's full tracklist as song records (mode=byPlaylistUrl).",
      "default": true,
      "prefill": true
    },
    "includeToplistInfo": {
      "title": "Include chart summary",
      "type": "boolean",
      "description": "Emit a chart summary record before each chart's tracks (mode=byToplist).",
      "default": true,
      "prefill": true
    },
    "minDurationSec": {
      "title": "Min song duration (seconds)",
      "type": "integer",
      "description": "Skip song records shorter than this. Album, artist, playlist and chart metadata are unaffected.",
      "minimum": 0,
      "maximum": 86400
    },
    "maxDurationSec": {
      "title": "Max song duration (seconds)",
      "type": "integer",
      "description": "Skip song records longer than this. Album, artist, playlist and chart metadata are unaffected.",
      "minimum": 0,
      "maximum": 86400
    },
    "minPopularity": {
      "title": "Min song popularity",
      "type": "integer",
      "description": "Skip song records below this NetEase popularity score (0-100). Metadata records are unaffected.",
      "minimum": 0,
      "maximum": 100
    },
    "minPlayCount": {
      "title": "Min playlist plays",
      "type": "integer",
      "description": "Skip browsed playlists with fewer plays (mode=byPlaylist).",
      "minimum": 0,
      "maximum": 1000000000000
    },
    "minTrackCount": {
      "title": "Min playlist tracks",
      "type": "integer",
      "description": "Skip browsed playlists with fewer tracks (mode=byPlaylist).",
      "minimum": 0,
      "maximum": 1000000000
    },
    "containsKeyword": {
      "title": "Contains keyword",
      "type": "string",
      "description": "Keep only records whose name contains this text (case-insensitive). Applies to songs, albums, artists, playlists and charts.",
      "editor": "textfield"
    },
    "maxItems": {
      "title": "Max items",
      "type": "integer",
      "description": "Hard cap on total dataset records for the run, including error records.",
      "minimum": 1,
      "maximum": 100000,
      "default": 100,
      "prefill": 3
    }
  },
  "required": [
    "mode"
  ]
}
