Feedback Page
feedback_pageCreate a local feedback page where a person reviews clips, pictures, or text and answers numbered questions by typing or recording voice notes; answers and transcripts save automatically.
Instructions
A feedback page for the person, on this computer: the items to look at or listen to, then numbered questions, each with a text box and (voice=True) a Record button. Everything they type is saved as it changes and every recording is saved as a file and transcribed in the background; when they reopen the page, their text, their recordings with players and the transcripts all come back. Written to /work/feedback// (manifest.json, answers.json, voice/), served by one shared local server on 127.0.0.1 (found or started here; it serves every round), and opened in their default browser, never an app's browser pane, which has no microphone. A song's proj/ (rebuilt by the song's build) writes its rounds in the song folder instead, songs//work/feedback//, so a rebuild never takes the answers. items: [{label, path}] for a clip (audio or video) or a picture, [{label, text}] for words; a bare path or string works too. questions: ['What do you hear first?', ...]. open=False only returns the link. Calling it again for the same round rewrites the page and keeps every answer. The page ends in a Send button: the person presses it when they have said everything (done.json in the round), and pressing it again after a late addition counts as a new send. feedback_wait(project, round) waits for that Send and returns the answers; feedback_read reads them at any time and says SENT or STILL WRITING first. Never ask the person to type "done". The page ends with the made-with-ismail footer and how the piece's sound was made (credits(format='footer'); footer=False leaves it off). Next to Send, 'Copy my answers' copies them as plain text, numbered as the questions, to paste anywhere. share=True also writes a standalone copy for a listener who is not at this computer (/share/: index.html and the clips beside it): host it anywhere they can open it (a page you publish, any static host). It needs no server and no write access: their typing and voice notes stay in their browser, and 'Send my answers' sends them back as a message (the share menu, or a copy to paste, with the voice notes as files); feedback_paste(project, round, text, files) reads that message into this round. parts=True (every part) or a list of track names adds a 'Name the parts' block: each part alone and in the mix at the bars where it stands out most (parts_bars long, cut from the latest render(stems=True)), and a box for the person's name for it. Use it in the first round of a song, and whenever a note's words could mean more than one part ("the bass" with a sub, a reese and a talking bass): you change the part they meant only once you share its name. feedback_read shows their names; lexicon_note(said=, track=, heard=) keeps each. moments=True puts a time strip and a 'Mark this moment' button (or the M key) under the first audio item (moments='' picks another): while it plays, the person marks anything that strikes them with tick boxes (love this, too much, which part) and their words. feedback_read lists each moment with its time and its bars on the song. Offer it for rounds on a whole song's structure. Reach for it whenever the person should answer questions by voice or by typing at the desk: notes on a cut, a mix, a set of shots or sketches, a round of choices, anything you would otherwise build a page and a server for.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| open | No | ||
| port | No | ||
| items | No | ||
| parts | No | ||
| round | Yes | ||
| share | No | ||
| title | No | ||
| voice | No | ||
| footer | No | ||
| moments | No | ||
| project | Yes | ||
| questions | No | ||
| parts_bars | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |