changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "bestSafePicks": {
+ "description": "Lowest-risk choices.",
+ "items": {
+ "properties": {
+ "artist": {
+ "type": "string"
+ },
+ "difficultyScore": {
+ "description": "Karaoke difficulty, 0-100. Higher is harder.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "genre": {
+ "type": "string"
+ },
+ "highNote": {
+ "description": "Highest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "highNoteName": {
+ "description": "Same as highNote, as a note name like \"C#5\".",
+ "type": "string"
+ },
+ "likelyVoiceFit": {
+ "type": "string"
+ },
+ "lowNote": {
+ "description": "Lowest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "lowNoteName": {
+ "description": "Same as lowNote, as a note name like \"G2\".",
+ "type": "string"
+ },
+ "matchScore": {
+ "description": "Overall suitability for this voice, 0-100.",
+ "type": "integer"
+ },
+ "rangeConfidence": {
+ "description": "How the range was established. \"verified\" was measured from the recording; \"estimated\" was derived from published sources and should be presented as guidance, not fact; \"unknown\" means no range data.",
+ "type": "string"
+ },
+ "rangeSource": {
+ "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\".",
+ "type": "string"
+ },
+ "riskWarning": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Catalog slug; the identifier check_song_fit takes.",
+ "type": "string"
+ },
+ "suggestedKey": {
+ "description": "Transposition advice, e.g. \"Try a lower key\".",
+ "type": "string"
+ },
+ "tessituraScore": {
+ "description": "How comfortable the song sits where the voice spends most time, 0-100.",
+ "type": "integer"
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical HumMatch page for the song.",
+ "type": "string"
+ },
+ "vocalFitScore": {
+ "description": "How well the song range sits inside the singer range, 0-100.",
+ "type": "integer"
+ },
+ "voiceTypeFitScore": {
+ "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer.",
+ "type": "integer"
+ },
+ "whyItFits": {
+ "type": "string"
+ },
+ "year": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "slug",
+ "title",
+ "artist",
+ "rangeConfidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "confidenceTier": {
+ "type": "string"
+ },
+ "easyWins": {
+ "description": "Comfortable and easy to sing.",
+ "items": {
+ "properties": {
+ "artist": {
+ "type": "string"
+ },
+ "difficultyScore": {
+ "description": "Karaoke difficulty, 0-100. Higher is harder.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "genre": {
+ "type": "string"
+ },
+ "highNote": {
+ "description": "Highest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "highNoteName": {
+ "description": "Same as highNote, as a note name like \"C#5\".",
+ "type": "string"
+ },
+ "likelyVoiceFit": {
+ "type": "string"
+ },
+ "lowNote": {
+ "description": "Lowest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "lowNoteName": {
+ "description": "Same as lowNote, as a note name like \"G2\".",
+ "type": "string"
+ },
+ "matchScore": {
+ "description": "Overall suitability for this voice, 0-100.",
+ "type": "integer"
+ },
+ "rangeConfidence": {
+ "description": "How the range was established. \"verified\" was measured from the recording; \"estimated\" was derived from published sources and should be presented as guidance, not fact; \"unknown\" means no range data.",
+ "type": "string"
+ },
+ "rangeSource": {
+ "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\".",
+ "type": "string"
+ },
+ "riskWarning": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Catalog slug; the identifier check_song_fit takes.",
+ "type": "string"
+ },
+ "suggestedKey": {
+ "description": "Transposition advice, e.g. \"Try a lower key\".",
+ "type": "string"
+ },
+ "tessituraScore": {
+ "description": "How comfortable the song sits where the voice spends most time, 0-100.",
+ "type": "integer"
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical HumMatch page for the song.",
+ "type": "string"
+ },
+ "vocalFitScore": {
+ "description": "How well the song range sits inside the singer range, 0-100.",
+ "type": "integer"
+ },
+ "voiceTypeFitScore": {
+ "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer.",
+ "type": "integer"
+ },
+ "whyItFits": {
+ "type": "string"
+ },
+ "year": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "slug",
+ "title",
+ "artist",
+ "rangeConfidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "groupFriendly": {
+ "description": "Work well with other singers.",
+ "items": {
+ "properties": {
+ "artist": {
+ "type": "string"
+ },
+ "difficultyScore": {
+ "description": "Karaoke difficulty, 0-100. Higher is harder.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "genre": {
+ "type": "string"
+ },
+ "highNote": {
+ "description": "Highest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "highNoteName": {
+ "description": "Same as highNote, as a note name like \"C#5\".",
+ "type": "string"
+ },
+ "likelyVoiceFit": {
+ "type": "string"
+ },
+ "lowNote": {
+ "description": "Lowest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "lowNoteName": {
+ "description": "Same as lowNote, as a note name like \"G2\".",
+ "type": "string"
+ },
+ "matchScore": {
+ "description": "Overall suitability for this voice, 0-100.",
+ "type": "integer"
+ },
+ "rangeConfidence": {
+ "description": "How the range was established. \"verified\" was measured from the recording; \"estimated\" was derived from published sources and should be presented as guidance, not fact; \"unknown\" means no range data.",
+ "type": "string"
+ },
+ "rangeSource": {
+ "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\".",
+ "type": "string"
+ },
+ "riskWarning": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Catalog slug; the identifier check_song_fit takes.",
+ "type": "string"
+ },
+ "suggestedKey": {
+ "description": "Transposition advice, e.g. \"Try a lower key\".",
+ "type": "string"
+ },
+ "tessituraScore": {
+ "description": "How comfortable the song sits where the voice spends most time, 0-100.",
+ "type": "integer"
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical HumMatch page for the song.",
+ "type": "string"
+ },
+ "vocalFitScore": {
+ "description": "How well the song range sits inside the singer range, 0-100.",
+ "type": "integer"
+ },
+ "voiceTypeFitScore": {
+ "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer.",
+ "type": "integer"
+ },
+ "whyItFits": {
+ "type": "string"
+ },
+ "year": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "slug",
+ "title",
+ "artist",
+ "rangeConfidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "matches": {
+ "description": "Ranked best matches overall.",
+ "items": {
+ "properties": {
+ "artist": {
+ "type": "string"
+ },
+ "difficultyScore": {
+ "description": "Karaoke difficulty, 0-100. Higher is harder.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "genre": {
+ "type": "string"
+ },
+ "highNote": {
+ "description": "Highest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "highNoteName": {
+ "description": "Same as highNote, as a note name like \"C#5\".",
+ "type": "string"
+ },
+ "likelyVoiceFit": {
+ "type": "string"
+ },
+ "lowNote": {
+ "description": "Lowest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "lowNoteName": {
+ "description": "Same as lowNote, as a note name like \"G2\".",
+ "type": "string"
+ },
+ "matchScore": {
+ "description": "Overall suitability for this voice, 0-100.",
+ "type": "integer"
+ },
+ "rangeConfidence": {
+ "description": "How the range was established. \"verified\" was measured from the recording; \"estimated\" was derived from published sources and should be presented as guidance, not fact; \"unknown\" means no range data.",
+ "type": "string"
+ },
+ "rangeSource": {
+ "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\".",
+ "type": "string"
+ },
+ "riskWarning": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Catalog slug; the identifier check_song_fit takes.",
+ "type": "string"
+ },
+ "suggestedKey": {
+ "description": "Transposition advice, e.g. \"Try a lower key\".",
+ "type": "string"
+ },
+ "tessituraScore": {
+ "description": "How comfortable the song sits where the voice spends most time, 0-100.",
+ "type": "integer"
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical HumMatch page for the song.",
+ "type": "string"
+ },
+ "vocalFitScore": {
+ "description": "How well the song range sits inside the singer range, 0-100.",
+ "type": "integer"
+ },
+ "voiceTypeFitScore": {
+ "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer.",
+ "type": "integer"
+ },
+ "whyItFits": {
+ "type": "string"
+ },
+ "year": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "slug",
+ "title",
+ "artist",
+ "rangeConfidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "popularCrowdPleasers": {
+ "description": "Well-known songs that still fit.",
+ "items": {
+ "properties": {
+ "artist": {
+ "type": "string"
+ },
+ "difficultyScore": {
+ "description": "Karaoke difficulty, 0-100. Higher is harder.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "genre": {
+ "type": "string"
+ },
+ "highNote": {
+ "description": "Highest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "highNoteName": {
+ "description": "Same as highNote, as a note name like \"C#5\".",
+ "type": "string"
+ },
+ "likelyVoiceFit": {
+ "type": "string"
+ },
+ "lowNote": {
+ "description": "Lowest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "lowNoteName": {
+ "description": "Same as lowNote, as a note name like \"G2\".",
+ "type": "string"
+ },
+ "matchScore": {
+ "description": "Overall suitability for this voice, 0-100.",
+ "type": "integer"
+ },
+ "rangeConfidence": {
+ "description": "How the range was established. \"verified\" was measured from the recording; \"estimated\" was derived from published sources and should be presented as guidance, not fact; \"unknown\" means no range data.",
+ "type": "string"
+ },
+ "rangeSource": {
+ "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\".",
+ "type": "string"
+ },
+ "riskWarning": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Catalog slug; the identifier check_song_fit takes.",
+ "type": "string"
+ },
+ "suggestedKey": {
+ "description": "Transposition advice, e.g. \"Try a lower key\".",
+ "type": "string"
+ },
+ "tessituraScore": {
+ "description": "How comfortable the song sits where the voice spends most time, 0-100.",
+ "type": "integer"
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical HumMatch page for the song.",
+ "type": "string"
+ },
+ "vocalFitScore": {
+ "description": "How well the song range sits inside the singer range, 0-100.",
+ "type": "integer"
+ },
+ "voiceTypeFitScore": {
+ "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer.",
+ "type": "integer"
+ },
+ "whyItFits": {
+ "type": "string"
+ },
+ "year": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "slug",
+ "title",
+ "artist",
+ "rangeConfidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "rangeHigh": {
+ "type": "integer"
+ },
+ "rangeLow": {
+ "type": "integer"
+ },
+ "riskyPicksToAvoid": {
+ "description": "Scored, but they exceed the comfortable range.",
+ "items": {
+ "properties": {
+ "artist": {
+ "type": "string"
+ },
+ "difficultyScore": {
+ "description": "Karaoke difficulty, 0-100. Higher is harder.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "genre": {
+ "type": "string"
+ },
+ "highNote": {
+ "description": "Highest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "highNoteName": {
+ "description": "Same as highNote, as a note name like \"C#5\".",
+ "type": "string"
+ },
+ "likelyVoiceFit": {
+ "type": "string"
+ },
+ "lowNote": {
+ "description": "Lowest note of the song as a MIDI number.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "lowNoteName": {
+ "description": "Same as lowNote, as a note name like \"G2\".",
+ "type": "string"
+ },
+ "matchScore": {
+ "description": "Overall suitability for this voice, 0-100.",
+ "type": "integer"
+ },
+ "rangeConfidence": {
+ "description": "How the range was established. \"verified\" was measured from the recording; \"estimated\" was derived from published sources and should be presented as guidance, not fact; \"unknown\" means no range data.",
+ "type": "string"
+ },
+ "rangeSource": {
+ "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\".",
+ "type": "string"
+ },
+ "riskWarning": {
+ "type": "string"
+ },
+ "slug": {
+ "description": "Catalog slug; the identifier check_song_fit takes.",
+ "type": "string"
+ },
+ "suggestedKey": {
+ "description": "Transposition advice, e.g. \"Try a lower key\".",
+ "type": "string"
+ },
+ "tessituraScore": {
+ "description": "How comfortable the song sits where the voice spends most time, 0-100.",
+ "type": "integer"
+ },
+ "title": {
+ "type": "string"
+ },
+ "url": {
+ "description": "Canonical HumMatch page for the song.",
+ "type": "string"
+ },
+ "vocalFitScore": {
+ "description": "How well the song range sits inside the singer range, 0-100.",
+ "type": "integer"
+ },
+ "voiceTypeFitScore": {
+ "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer.",
+ "type": "integer"
+ },
+ "whyItFits": {
+ "type": "string"
+ },
+ "year": {
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "slug",
+ "title",
+ "artist",
+ "rangeConfidence"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "vocalId": {
+ "type": "string"
+ },
+ "voiceType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "vocalId",
+ "voiceType",
+ "matches"
+ ],
+ "type": "object"
+}