Reading the ingest surface…
ChoonCatalogAdd references
demoThis build is a demo. The catalog and detections are a fixed sample.Scopereading…Sound is used for one thing: a short tone when a long scan finishes while this tab is in the background. The A/B listening check plays audio either way, because there the sound is the evidence.Reading the ingest surface…
Of the rows I submitted, which are now in the catalog, which are findable — and exactly which are neither, and why?
The endpoint takes a JSON array of recordings. recording_id, track_id and audio_uri are required — a row missing any of them comes back as rejected: invalid with the exception in detail. isrc is optional at the API and load bearing everywhere else: a recording with no ISRC can be detected and can never be reconciled against a claim report, and its watermark manifest cannot be looked up at all.
{"recordings": …} to POST /api/catalog/ingest. This writes to the catalog.qc_status: pending. Ingest is not verification.No ingest has been run from this browser.
This is an empty console, not an empty catalog: nothing has been submitted, so there is no per-row outcome to report. The sample shape shows what a completed run looks like, labelled as a fixture.
curl -s -X POST "$CHOON/api/catalog/ingest" \
-H 'content-type: application/json' \
-d '{"recordings":[{"recording_id":"rec_00777","track_id":777,
"audio_uri":"gs://audiofp-audio/references/rec_00777.wav",
"isrc":"USUM72100884","title":"Bright Room",
"main_artist":"Marguerite Osei","territories":["WW"]}]}'Identical to what the form sends, minus the proxy hop: from this origin the request goes through /api/catalog/ingest, which signs it with your gcloud identity — no API key is involved on this page or in the curl.
There is no file upload, and no CSV parser.
§13.6 describes ingest as “audio plus a metadata CSV”. The endpoint takes neither: it takes a JSON array of recordings that already point at audio in the bucket (audio_uri). A CSV control here would have to parse and map columns in the browser and would then post the same JSON — so the parser, not the ingest, is what is missing, and it is missing on both sides of the proxy.
Progress while a run is in flight is not modelled, because the endpoint is synchronous.
catalog_router.py says so in its cost note: at a few thousand rows an ingest is one multi-row insert, not a pipeline, and a queue would buy a standing resource to serve a request that takes milliseconds. §10.2’s counted-progress rendering — 312 of 4,000 rows, never a percentage — arrives if that ever stops being true. Until then the in-flight state above says the outcome is unknown rather than drawing a bar that is not measuring anything.