Repository navigation
Studio Open Answer Coding
Open-ended answers are rich and unwieldy: before they can go into a table they need a coding scheme — a set of themes — and a decision about which answer belongs to which theme. In Studio you build that scheme yourself, in the codeframe editor: you code answers by hand and write short word rules that code the rest, including the answers that arrive after you wrote them. This page covers the editor, the rule syntax, how an answer gets its themes, applying the codeframe in a flow, the table it makes, privacy and reproducibility.
AI coding is switched off on this platform. Studio used to offer Code open answers…, which had the AI assistant propose themes and assign answers to them. It was the one assistant feature that sent what respondents wrote — not your team's own text — to the model provider (DeepSeek, which processes it in China). It is switched off for every organization for now: the button and its dialog are gone, and a request to start a coding job through the API is refused with "AI coding of open answers is switched off on this platform." Codeframes the assistant built earlier keep working (see Older codeframes). The rest of the assistant is unchanged — see AI Assistant.
A codeframe is a document of your project,
analysis/<name>.codeframe.json, for one open-text variable. It holds the
themes, the decisions you made by hand and each theme's rules. The Code open
answers node of a flow applies it, and each answer is coded by the first of:
- By hand. Your decision for that answer: one theme, several, or no theme (read, and belongs to none). A decision always wins.
- By the rules. Each theme can have words and phrases that code the answers nobody decided — the ones on screen today and the ones collected next month, because the rules run at every run.
- Uncoded. Neither reached it: it is left for you to read.
The node applies the codeframe the same way at every run — no model, no network, no randomness. The same answers get the same themes; the scheme is a file a reviewer can read and disagree with; it is versioned with every Save and travels in the research bundle; and anyone who re-runs your study gets your numbers. An analysis that called a model at run time could give different themes next month and could not be checked.
The codeframe keeps fingerprints of answers, never their texts (see Privacy: only fingerprints are stored).
In the example study. A project started from the example study ships a codeframe already:
analysis/improve.codeframe.json, for "If you could change one thing about your digital life, what would it be?" — six themes (Fewer notifications, Less social media, Screen-free times and places, More time offline, Work boundaries, Happy as it is), each with a definition and examples, and a theme and a tone for every answer it knows. It is an older codeframe (version 1), written with the example rather than built by the assistant, so it records no model. Its flowtablesapplies it (nodecode, Also add sentiment on) and charts the themes with their tone; two answers in the sample it has never seen stay Uncoded. Open it with Edit codeframe… on that node to code them by hand or give the themes rules.
- Plan: every plan. Coding by hand and by rules spends no AI credits.
- Role: members and higher build, change and save codeframes. A viewer can open one and read it, its answers and Test a phrase, but not change or save it.
-
Answers: the editor lists the answers the project's responses hold —
from every environment, or the one you pick. With none yet it says "Nobody
has written anything in
variablein these responses yet."; you can still write the themes and rules and save them. - Language: the words the rules know — negations, clause words, stop words — are English. Answers in any other language keep their words and are matched by terms written in them; they just get no negation read in them.
From any of these:
- A flow's Code open answers node. Under Codeframe (a list of the project's codeframes, — choose a codeframe —): New codeframe… when none is chosen, Edit codeframe… for the chosen one. Opened from a node, the editor shows the answers that flow's Responses node reads, and a new codeframe is set on the node at once.
- Files → Codeframes: New codeframe…, or edit on a codeframe's row (see Files).
- History: a Save's Documents lists each codeframe as codeframe name, with Edit beside .json. It opens the codeframe's current version; one the project no longer has opens as that Save left it, to be saved again.
New codeframe… opens the New codeframe dialog: "A codeframe codes the
answers to one open-text question: its themes, the words and phrases that give
each one, and the answers you code by hand. It is saved as
analysis/<name>.codeframe.json — with fingerprints of the answers, never
their text — and applied by the Code open answers node, the same way at every
run."
| Field | Meaning |
|---|---|
| Variable | the open-text questions of the questionnaire (name — label; not a date, email or phone field) and the text typed into an Other (please specify) (<variable>_other); Another variable… lets you type a name |
| Name | the file name (file name: analysis/<name>.codeframe.json): lower-case letters, digits and _, starting with a letter. It is filled in from the variable |
Open the editor goes on; Cancel does not. A name already taken says "A codeframe of this name exists — choose another name, or edit that one." with a button Edit name.
The editor's address is /flows/codeframe/<name>, and its back button
returns where you came from: Back to flow, Back to Files, Back to
History (or All flows).
← Back to feedback
Codeframe why analysis/why.codeframe.json · edited · coding by hand and by rules, no model
[↶] [↷] [⋯] [ ✓ Save changes ]
Answers from [every environment ▾] [ ] Only completed responses
[■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■·······]
■ By hand 12.5% ■ By rules 75% □ Uncoded 12.5% of 8 respondents who answered · 8 distinct answers
Themes 1–9 give the first nine to … [+ Add theme] │ [Answers] [Suggested words] [Test a phrase]
1 Late delivery · Delivery 3 · 37.5% │ [Search answers] Show [All answers ▾] 8 answers
2 Damaged · Delivery 1 · 12.5% │ [ ] The delivery was late 1
3 Rude staff 1 · 12.5% │ Late delivery rule: late → “late”
4 Nothing / Don't know alone 2 · 25% │ [ ] wasn't late, all fine 1
Nets: Delivery 3 (37.5%) │ uncoded Late delivery: “late” is negated
┌ 1 Theme 1 ↑ ↓ delete ┐ │ [ ] Great! 1
│ Label Late delivery │ │ by hand: no theme
│ Definition (optional) │ │ …
│ Net Delivery │ │
│ Words and phrases (late ×) (delay* ×) [add…] │ │
│ But not [a word that rules it out] │ │
│ ▸ More │ │
└──────────────────────────────────────────────────┘ │
▸ Codeframe settings │
-
The head:
Codeframe <variable>, the file, and "new, not saved yet" or "edited"; Undo and Redo; the tools menu (This codeframe: how many themes and answers coded by hand, and the draft's state); and Save changes (Saved when there is nothing to save). - Answers from chooses the responses the answers come from: every environment, or one environment ("env (and imported rows)"); Only completed responses leaves the others out. Opened from a node, both are set as that flow's Responses node reads them ("as the flow's Responses node reads them"). This changes what the editor shows, not the codeframe.
- The coverage bar: the share of the respondents who answered that is coded By hand, By rules and Uncoded, with how many answered, how many distinct answers there are and how many you coded as no theme. It is redrawn a moment after each change. While the codeframe has errors it reads "N distinct answers · the coverage shows once the codeframe can be applied".
- Left: the themes and the selected theme's details, then Codeframe settings.
-
Right: three tabs — Answers, Suggested words and Test a
phrase. Click one, or move to it with
←/→and open it withEnterorSpace.
Everything the editor shows about the answers is computed on the server by the same engine code the Code open answers node runs, so what you see is what a flow will get.
Add theme adds Theme 1, Theme 2, … with the next free code. The list shows each theme's key (1–9 for the first nine), its label, its net, alone for an exclusive theme, and how many respondents it has with their share ("3 · 37.5%"; hover for how many by hand and how many by rules). Click a theme to edit it:
| Field | What it does |
|---|---|
| Label | what the table shows |
| Definition (optional) | "what belongs here, for whoever codes" |
| Net (optional) | "themes with the same net are also counted together" — type a name, or pick one already used (see Nets) |
| Words and phrases | the terms that give the theme (see Writing rules) |
| But not | terms that rule it out where they appear |
Under More:
| Field | What it does |
|---|---|
| Must also contain | the theme is given only where one of these terms is present too. Another list it must also contain one of adds a second list (And also one of): then one term of each list must be present |
| Reads | "where the words must all be": part of the answer (a clause), the whole answer, or as the codeframe does |
| Only when no other theme applies (Nothing, Don't know) | an exclusive theme |
| Priority | "the higher is kept where an answer keeps one theme, or fewer" (see Priority) |
Type a term and press Enter (or type a comma); × on a chip removes it,
and Backspace in the empty box removes the last one. A term with a problem is
marked, and the message is written under the chips.
The detail's head shows the theme's code and its counts: "N respondents
(P%) · h by hand · r by rules", and "· n mention it only negated" —
the respondents who wrote one of its words under a negation and so did not get
it (read them, and code them by hand or with a not_ term if they belong).
↑ and ↓ move a theme: the order sets the keys 1–9 and breaks ties of priority. A theme's code never changes when you rename or move it. Delete asks "Delete theme “label”?" — "N answers were given it by hand; they lose it (and an answer that had only it goes back to the rules)." — and Delete theme removes it with its words and phrases.
A theme is given to an answer where, in one clause (or in the whole answer, with Reads set so):
- one of its Words and phrases matches,
- each Must also contain list has a term that matches, and
- no But not term matches.
Under the theme's words the editor reminds you of the syntax: "word* for word forms · a|b for either · not_word for a negated mention · a ~3 b for words near each other. A negated mention does not count: late does not find “wasn't late”; not_late finds only that."
| Term | Finds | Does not find |
|---|---|---|
late |
It was LATE! | latest, wasn't late |
delay* |
delay, delays, delayed | relay |
*charg* |
charge, recharging | |
slow|late |
slow or late | |
customer service |
the customer service was bad | service to the customer |
staff ~3 rude |
the staff were very rude, rude staff | rude. The staff, rude, the staff |
not_late |
wasn't late, never late | it was late |
not_friendly staff |
no friendly staff | friendly staff |
don't know |
I don't know, I dont know, I do not know |
I don't really know (write don't ~2 know) |
would not recommend |
would not recommend, wouldn't recommend | |
not happy |
not happy, wasn't happy | never happy |
цена, café
|
Цена высокая, le café |
cafe does not find café
|
- Case does not matter; accents do (café is not cafe).
-
*stands for any letters of a word, anywhere in it. -
|gives alternatives at one place of a phrase:customer serv*|support. One alternative cannot be two words: writee-mailandemailas two terms. -
~Nfinds two words (or phrases) within N words of each other, in either order, inside one clause — a comma ends its reach as a full stop does. At most~20. -
not_asks for a negated mention only. A negation written in the term itself (not late,don't know) is the term's own. -
Words are split as in an answer:
e-mailandn/aare two words each (a-,/or·between two letters), so they find E-mail and N/A. Quotation marks around a term are dropped ("late"islate). -
No regular expressions. A term beginning
re:is an error: "regular expressions are not supported: write the words, with * for word forms (delay*), | for alternatives (slow|late) and ~N for words near each other (staff ~3 rude)". Rules stay short enough to read back and defend.
not, no, never, cannot, without, nothing, none, nobody, neither, nor, hardly, barely and every n't form negate the next three words, stopping early at the end of a clause and at and, or, yet. A term finds only mentions that are not negated: The delivery wasn't late is not coded Late delivery, and not cheap, and fast is negated only for cheap.
The spellings of n't are one: dont is read as don't, cannot and can
not as can't, and do not, was not, would not… (after do, does, did, is,
are, was, were, has, have, had, can, could, will, would, shall, should, must,
need, might) as don't, wasn't, wouldn't… — in the answers and in your
terms alike. The word not in a term stands for every negation written with
it: not happy finds wasn't happy.
What negation costs: never received my parcel is not coded Parcel, and
not enough staff is not coded Staff. The editor counts, per theme, the
respondents it loses this way, and each such answer shows "theme:
“words” is negated" — code the ones that belong by hand, or add a not_
term.
A clause ends at a line break, at punctuation (. , ; : ! ? ( ) [ ] { },
the dashes – —, …, a bullet •, |), at -, / and · when they do
not join two letters (fast - cheap, late / broken), and at the words
but, however, although, though, whereas, except and plus. In Delivery was
quick but the box was damaged, a theme that must also contain delivery and
has the word damaged does not match when it reads a clause — they are in
different clauses — and does when it reads the whole answer. An answer
written on several lines is read line by line.
Codeframe settings → Replacements ("whole words or phrases, replaced
before the rules read an answer: typos, synonyms"): each row replaces the
words on the left (words to replace) with those on the right (leave it
empty — (nothing) — to drop them). delievery → delivery fixes a common
typo once for every theme; cust service → customer service makes one phrase
of two. Replacements are made in one pass: a word one replacement writes is
not replaced again. Add a replacement adds a row; a row with nothing to
replace is left out until you type its words ("Type the words it replaces —
until then it is left out.").
The engine checks the codeframe as you edit. Errors stop it from being
applied or saved; they are listed above the themes — "N errors — the
codeframe cannot be applied or saved until they are fixed." — and beside the
term, theme or setting at fault. Examples: "the codeframe has no themes" (a
new codeframe), a theme without a label, a code used twice, a re: term, a
~N over 20, a term longer than 200 characters, the same words replaced
twice.
Warnings do not stop anything but say what does nothing: "term can never match within a clause: 'but' ends a clause (give the theme the scope 'answer')", "term has a part that can never match, 'e-mail': it is two words …", "term is both included and excluded, so it never codes the theme", "its rules have no include term, so its require and exclude terms do nothing", "the net 'name' has one theme, so no net row is shown for it", a term given twice.
The Answers tab lists the variable's distinct answers, the most frequent first, 100 to a page (Previous page / Next page, "1–100 of N"). Answers that differ only in case or spacing are one answer. Each row shows the answer, how many respondents gave it, its themes and how it got them:
- by hand, or by hand: no theme;
-
rule: term → “words” for each rule that gave it a theme — for
example
rule: delay* → “delayed”; - uncoded;
- "theme: “words” is negated" when a theme's word is there, negated;
- "theme set aside: the codeframe gives one theme an answer, and keeps the one ranked highest" for a decision naming several themes in a codeframe that gives one.
Search answers finds answers containing the text. Show filters them: All answers, Uncoded, Coded by hand, Coded by rules, No theme (by hand), or one theme (With the theme). While the codeframe has errors only the search applies.
Select answers: a click selects that answer alone; Ctrl/Cmd-click or its
box adds it to the selection or takes it out; Shift-click selects a range.
The toolbar above the list then shows "N selected" and a button per theme,
No theme, Back to rules and Clear selection.
| Key (in the list) | Does |
|---|---|
↑ ↓, Home End
|
move |
Space (Shift + Space) |
select (a range) |
Ctrl/Cmd + A |
select every answer on the page |
1–9
|
give the selected answers theme 1–9 of the list — or take it away when they all have it |
0 |
no theme: read, and belongs to none |
Delete |
back to the rules: take your decision away |
Esc |
clear the selection |
With nothing selected, a key codes the highlighted answer — click an answer, press a number, move on. The list says so below it: "A click selects one answer; ⌘/Ctrl-click or its box adds it to the selection, Shift-click a range. …".
What a decision does:
- In a codeframe that gives several themes, a theme is added to the answer's others; in one that gives one, it replaces them.
- A decision is final for that answer: the rules no longer change it. Back
to rules (or
Delete) hands it back to them. - No theme is a decision too: the answer counts as coded — in the table's No theme row — rather than uncoded.
- A decision is kept for the answer's text wherever it appears, in every environment and in answers collected later that say the same.
Codeframe settings → An answer may have several themes. Off (the default), each answer gets one theme and the theme variable is an ordinary single-choice (nominal) variable. On, an answer can have several, the theme variable is multiple-choice (a list of codes per respondent) and At most ("themes an answer — 0 for no limit") caps how many the rules give. Your own decisions are kept as you made them.
Turning it off with answers coded by hand to several themes says "N answers coded by hand have several themes, and the codeframe gives one an answer: each keeps the one ranked highest (priority, then order)." — Keep only that theme in each rewrites those decisions so the file says what is applied.
Themes with the same Net form a net: a row that counts a respondent once, however many of its themes they have. Late delivery and Damaged in the net Delivery: a respondent with both counts once in Delivery (net). The editor shows the nets under the themes ("Nets: Delivery 3 (37.5%)"); a net needs two themes or more.
Only when no other theme applies (Nothing, Don't know) makes a theme exclusive (alone in the list): the rules give it only when no other theme matched the answer. Nothing, but the delivery was late is coded Late delivery, not also Nothing.
When the rules match more themes than an answer may keep — one, or At most N — the answer keeps those ranked highest: the higher Priority first, ties by their order in the list. With one theme an answer, Box arrived damaged, and two days late matches Late delivery and Damaged and keeps Late delivery (it comes first); give Damaged priority 1 and it keeps Damaged.
For each answer:
- Your decision, if you made one — as you made it (a one-theme codeframe keeps the highest-ranked of several).
- Otherwise the rules: every theme that matches; an exclusive theme dropped when another matched; the rest ranked by priority, then order; cut to At most, or to one.
- Otherwise uncoded.
Suggested words lists the words and two-word phrases the answers not coded
yet hold most — up to 30 of each, held by two respondents or more — with how
many respondents used each (hover for an example answer). "click one to add it
to theme": a click adds it to the selected theme's Words and phrases.
English stop words are left out, and a word written negated comes as
not_word, ready to use. While the codeframe cannot be applied, the list is of
every answer.
Test a phrase shows how the codeframe reads one sentence ("how the codeframe would code it, step by step"): type it under A phrase and press Test.
- The result: the themes (or No theme) and how — "by the rules", "by hand (a coder's decision for this answer overrides the rules)", "uncoded".
- Words: the words as the rules read them (do not as don't), the negated ones marked (hover: "negated by “wasn't”").
- Clauses: where the answer was split.
- Rules: each rule that fired, was vetoed — with why, for example "it requires one of 'staff', 'driver', 'courier', and none is in this clause" or "it excludes 'free', which is there ('free')" — or was blocked by a negated mention.
- Set aside: themes that matched and were dropped — "exclusive, and another theme matched", "the codeframe gives one theme an answer, and one ranked higher matched", "max_codes keeps 1, and they ranked higher".
The delivery wasn't late, but the box was broken reads as two clauses, the delivery wasn't late and the box was broken: Late delivery is negated, Damaged fires — Damaged — by the rules.
| Setting | Meaning |
|---|---|
| (first line) | "Codes variable · English (negations, clause words, stop words) · answers in other languages keep their words, with no negations found" |
| Theme variable | "the variable the flow's node makes" — <variable>_theme by default. A node's own Theme variable overrides it |
| An answer may have several themes | see Several themes an answer |
| At most | with several themes: the most the rules give an answer; 0 for no limit |
| Rules read | "unless a theme says otherwise": each part of an answer (a clause) (the default) or the whole answer |
| Replacements | see Replacements |
Save changes (or Ctrl/Cmd + S) opens the ordinary Save dialog: the
codeframe becomes analysis/<name>.codeframe.json in a new Save, and it is in
History like any document. The button is disabled while the codeframe has
errors ("Fix the codeframe's errors first"). A saved codeframe is checked like
any document; one with themes but no rules and no decisions warns "This
codeframe has themes but no rules and no answers coded by hand, so it codes
nothing."
-
Undo and Redo (
Ctrl/Cmd + Z,Shift + Ctrl/Cmd + Z) step through your edits. - A new codeframe is a document only once saved. Until then it is kept in the browser tab it was started in: leaving asks "Leave the codeframe?" — "This codeframe is not saved yet. It stays in this tab until you close it: open it again from the node or from Files to go on, or Save it first." The node that started it shows "path is not saved yet: it is kept in this tab until you save it in its editor."
- Changes to a saved codeframe stay as a draft, as the Builder's do: "Your changes are not saved as a version. They stay as a draft — open the codeframe again to go on, or Save them first." Closing the browser tab with unsaved changes asks first.
- Started from a node, the node's Codeframe is set to the new file at once — a change to the flow, which you save in the flow editor.
- One person edits at a time, as with other documents: while a colleague edits, you follow their changes live and can Take over (see Working Together).
There is no button to delete a codeframe; one that no node names does nothing.
Add Code open answers (Prepare) after your source and cleaning steps:
| Parameter | Value |
|---|---|
| Codeframe | the file, from the list (— choose a codeframe —) |
| Theme variable | leave empty for the codeframe's own (Codeframe settings → Theme variable, <variable>_theme by default) |
| Also add sentiment | only for an older codeframe that carries a tone for its answers |
The node has three outputs:
-
data— the dataset plus the theme variable, labeledTheme: <variable>, with your theme labels as value labels. With one theme an answer it holds the code; with several, the list of codes. An answer coded as no theme and an uncoded one have nothing there, so a Frequencies of the theme variable counts the respondents with a theme; the theme table below counts everyone who answered. -
table— the theme table (below). Wire it into a Report section; a Result chart draws its themes. -
stat— the table's statistics. Connect it to a Live tile to watch the coverage as answers arrive.
The theme variable in later nodes. The nodes after it offer it in their variable lists ("made by node") — for a Crosstab of themes by region, say — whether you typed its name in Theme variable or left it to a codeframe that is saved in the project. A multiple-choice theme variable is treated as a multiple-choice question: a donut, a Split by, a banner column or a Likert chart of it is refused. The sentiment variable is not offered in the pickers.
Run to here on the node previews it with the codeframe of your current Save, as a run does. The flow's check reads the project's codeframes, so a codeframe the run could not apply is an error of the flow before it runs: "Parameter 'codeframe' of node: path cannot be applied: …", or "… codes 'variable', which is not a variable of this questionnaire."
One row per theme and per net — a net's row, "net (net)", with its themes under it — ordered by their counts; then No theme (when you coded answers as no theme), Coded, Coded by hand, Coded by rules and Uncoded. Every % is of the respondents who answered. With several themes an answer, the themes add up to more than 100 %, and the table says so.
An example. Eight people answered Why that score?: The delivery was
late; Box arrived damaged, and two days late; The driver was rude;
Nothing; wasn't late, all fine; Great!; The parcel was delayed again;
I don't know. The codeframe gives several themes an answer: Late delivery
(late, delay*) and Damaged (damag*, broken|broke) in the net
Delivery; Rude staff (rude, unfriendly, and it must also contain one
of staff, driver, courier); and Nothing / Don't know (nothing,
don't know), exclusive. A coder decided Great! has no theme. The table:
| Theme | N | % |
|---|---|---|
| Delivery (net) | 3 | 37.5 |
| Late delivery | 3 | 37.5 |
| Damaged | 1 | 12.5 |
| Nothing / Don't know | 2 | 25.0 |
| Rude staff | 1 | 12.5 |
| No theme | 1 | 12.5 |
| Coded | 7 | 87.5 |
| Coded by hand | 1 | 12.5 |
| Coded by rules | 6 | 75.0 |
| Uncoded | 1 | 12.5 |
The statistics under it: Variable, Answered (8), Themes (4), Coverage ("87.5 % of the answers are coded"), Coded by hand, Coded by rules, Distinct uncoded answers (how many different answers are left to read), Percentages ("of the respondents who answered; a respondent can have several themes, so the themes add up to more than 100 %") and, with nets, Nets ("a net counts a respondent once, however many of its themes they have"). The table counts answers, not weights: after Apply weight it stays unweighted and says so ("Weight: unweighted (the weight 'weight' is not applied)").
An older codeframe (version 1) gives the table it always did: theme rows as shares of the coded answers, then Coded and Uncoded as shares of everyone who answered, with Coverage "… % of the answers have a theme" and, with Also add sentiment, the Negative %, Neutral % and Positive % of each row and the Sentiment and Net sentiment statistics. Sentiment asked of a codeframe without it reads "not in this codeframe".
The rules are not a one-off: at every run the node codes all the answers it is given — the ones you saw in the editor and the ones collected since — by your decisions first and the rules second. A new answer that says what an earlier one said gets that decision; one the rules recognize gets its themes; the rest land in Uncoded.
To keep up as fieldwork continues:
- Open the codeframe (Edit codeframe…) and set Show to Uncoded. The editor reads the answers again once its last reading is a minute old, so an answer that has just arrived can take up to a minute to appear.
- Code them by hand, or better, add the words that would have caught them (Suggested words lists the commonest).
- Save, and run the flow (or let its schedule do it).
A Live tile of the node's stat output shows the coverage falling when
new answers bring new themes.
Note. A rule you change recodes every answer it touches on the next run, the earlier ones too — that is what keeps the numbers consistent. Compare the two versions in History and Versions before you save a big change, and say in your methods that the scheme was revised.
- The answers stay in Studio. The editor reads them from the project's own responses and shows them only to members of the project. No model, no provider, no other service sees them.
- The codeframe holds fingerprints, never answers. A decision is stored under the answer's fingerprint — sixteen hexadecimal characters computed from its text, case and spacing set aside — not under the text. The engine refuses a codeframe (version 2) that holds an answer's text, and editing an older one leaves its example answers out.
- A fingerprint is not a disguise. It cannot be turned back into the text, but whoever has the file and guesses an answer's exact words can confirm that it was given. And the words you type into rules and labels are stored as you typed them. Treat a codeframe like the study's other documents: it is in every Save and every research bundle.
See Security and Privacy.
A codeframe the assistant built before AI coding was switched off — or the example study's — is version 1: themes (with example answers), a theme for each answer it was built from, sometimes a tone, and no rules. The node applies it exactly as before, with the same table.
Opened in the editor it says "This codeframe is version 1: a theme for each answer it was built from, and no rules. Editing it makes it version 2 — its N example answers are left out, since version 2 keeps only fingerprints of answers." Its decisions become your decisions by hand; you can then add rules, nets and the rest. The version 1 file stays in History.
- The codeframe is a document of the Save: it is in every research bundle
(
analysis/<name>.codeframe.json), and the flow's script loads it from there. Re-running the bundle codes the same answers the same way — your decisions and the same rules, with no model and no account. - Its fields, for a reviewer:
variable,into(the theme variable),language(en),multiple,max_codes,scope,replace,themes(code, label, definition,group— the net —,exclusive,priority,ruleswithinclude,require,exclude,scope) andassignments(fingerprint → a code, a list of codes, or[]for no theme). A codeframe the assistant built also records which model built it and when (model,built_at) and how many answers it read (source_rows). - The Methods draft says how the answers were coded: "by a coder's decision where one was recorded (N distinct answers) and otherwise by the scheme's word rules, which read answers collected later the same way".
- The Documents tab of a Save in History downloads it as
.json. - A bundle's engine pin may lag behind Studio: at such a pin the Code open answers node stops with an error. See Reproducibility: Code, Bundles and Citation.
- Code outside Studio. Export the responses (Data → Export, see Data Exports), code the open answers in your own tool, and analyze the coded file there.
- Ask a closed question as well. A single-choice follow-up ("Which of these comes closest?") gives a coded variable you can tabulate and, with Recode, regroup.
- Keep the verbatims in the report. For a small study, quoting answers in a section's text may serve better than any coding.
- Node Reference — Code open answers
- Analysis Flows
- Files
- Security and Privacy
- Reproducibility: Code, Bundles and Citation
siamang · Siamang Studio · Free for noncommercial use · Commercial licensing · Wiki source: wiki/
Getting started
Survey design
- Variables and Measurement
- Question Types
- Pages Blocks and Structure
- Visibility and Branching
- Quotas
- Scripts
Validate & simulate
Data & analysis
Reporting
Frontend & deploy
Tooling
More
Get started
Account & workspace
- Sign Up and Sign In
- Account and Profile
- Organizations and Team
- Projects
- Project Settings
- Plans, Trial and Billing
Build the questionnaire
- The Builder
- Question Types
- Codebook and Variables
- Logic and Branching
- Quotas and Randomization
- MaxDiff and Conjoint
- Theme and Branding
- Scripts
- Importing Questionnaires
- Question Bank and Library
- Testing Your Survey
- AI Assistant
Fieldwork
- Publishing and Environments
- Links, QR, Embeds, Access
- Panel Providers
- Email Invitations
- What Respondents See
- Live Monitoring
Data
Analysis & output
- Analysis Flows
- Node Reference
- Cleaning and Weighting
- Coding Open Answers
- Reports
- History and Versions
- Reproducibility
Integrations & admin
Reference