Macros de prompt

Une macro est une courte balise {{tag}} que Marinara remplace par une valeur à jour, comme ton nom ou la date du jour, quand il construit un prompt (le texte que Marinara envoie à l'IA). Ce guide liste toutes les macros intégrées, les endroits où tu peux les saisir et les erreurs à éviter.

Où fonctionnent les macros

Quand Marinara construit le texte qu'il envoie à l'IA, il remplace chaque {{tag}} par sa valeur du moment. Aucun interrupteur n'active les macros. Tout champ qui les prend en charge les résout systématiquement. La casse des noms de macros intégrées n'a pas d'importance : {{user}} et {{USER}} fonctionnent donc tous les deux. La valeur d'une macro peut contenir une autre macro, que Marinara résout à son tour.

Tu peux saisir des macros à ces endroits :

Les macros tournent dans Marinara et ne demandent ni configuration ni clé API. Deux fonctions dépendent d'autres parties de l'application :

Macros d'identité, de personnage et de persona

Ces macros récupèrent les noms et les champs de fiche de celui qui parle et du personnage qui répond. L'utilisateur, c'est toi (ou le persona actif). Le personnage, c'est l'IA qui répond.

MacroValeur obtenue
{{user}} / {{userName}}Ton nom affiché du moment (ou le nom du persona). Par défaut User si aucun persona n'est défini.
{{userNamePhonetic}}Le champ Phonetic name de ton persona, ou {{user}} s'il est vide.
{{char}} / {{charName}}Le nom du personnage en cours. Par défaut Character.
{{21-character-card-ID}}Nom d'un autre personnage. Remplace le texte indicatif par l'identifiant exact de 21 caractères de sa fiche pour l'inclure dans le contexte.
{{persona-21-character-card-ID}}Nom d'un autre persona. Remplace le texte indicatif après persona- par l'identifiant exact de 21 caractères de sa fiche pour l'inclure dans le contexte.
{{charNamePhonetic}}Le champ Phonetic name du personnage, ou {{char}} s'il est vide.
{{characters}}Tous les personnages du chat, y compris les personnages inactifs, séparés par des virgules. Cette macro ajoute uniquement les noms ; elle n'ajoute pas les fiches des personnages inactifs au prompt.
{{group}}Tous les autres personnages actifs du chat de groupe, sauf celui qui répond. Le persona ne figure pas dans cette liste de personnages.
{{persona}}Les champs Description, Personality, Backstory, Appearance et Scenario de ton persona, séparés par des retours à la ligne.
{{personaDescription}}Le champ Description de ton persona.
{{personaPersonality}}Le champ Personality de ton persona.
{{personaBackstory}}Le champ Backstory de ton persona.
{{personaAppearance}}Le champ Appearance de ton persona.
{{personaScenario}}Le champ Scenario de ton persona.

Les macros de champ de personnage lisent la fiche du personnage en cours :

MacroChamp de la fiche de personnage
{{description}}Description
{{personality}}Personality
{{backstory}}Backstory
{{appearance}}Appearance
{{scenario}}Scenario
{{example}}Example Dialogue
{{charSysInfo}}System Prompt
{{charPostHistory}}Post-History Instructions

Dans un chat avec un seul personnage, elles se résolvent d'après ce personnage. Dans un chat de groupe, elles se résolvent par défaut d'après le premier personnage. Pour répéter un texte pour chaque personnage, place-le dans un bloc de groupe entre crochets. Voir Prompts conditionnels pour les blocs de groupe.

{{group}} suit le personnage qui répond, y compris pendant les générations individuelles d'un groupe. Par exemple, si Pantalone répond dans un groupe Roleplay contenant Powers That Be, Maukie et Pantalone, {{group}} donne Powers That Be, Maukie. Une fiche de personnage reste dans cette liste même si son nom coïncide avec {{user}}.

Le champ Phonetic name a deux rôles. Il fixe la prononciation du nom par la synthèse vocale (Text to Speech). Il alimente aussi {{charNamePhonetic}} et {{userNamePhonetic}}. Tu le trouves à la fois dans l'éditeur Character Editor et dans l'éditeur Persona Editor.

Pour référencer un personnage absent du chat actuel, copie l'identifiant de sa fiche directement entre doubles accolades, comme {{V1StGXR8_Z5jdHi6B-myT}}. N'inclus pas les caractères littéraux < ou >. Marinara remplace la macro par le nom du personnage. Dans les chats Roleplay qui utilisent un preset de prompt, Marinara ajoute aussi les champs Description, Personality, Appearance, Backstory, Scenario et Example Dialogue de la fiche référencée au prompt système ; dans les autres chats, la macro est seulement remplacée par le nom. Cela fonctionne dans les messages et les champs de prompt, ainsi que dans les entrées de lorebook activées des chats Roleplay avec un preset. Les salutations initiales de la fiche référencée sont exclues. Les lorebooks activés rattachés à cette fiche restent soumis à leurs règles ordinaires de mots-clés, constant, filtres, probabilité et budget de tokens. Si le personnage fait déjà partie du chat, la macro est quand même remplacée par son nom, et sa fiche n'est pas ajoutée une seconde fois.

Pour faire référence à un persona autre que le persona actif, ajoute persona- devant son identifiant copié, par exemple {{persona-P1StGXR8_Z5jdHi6B-myT}}. Marinara remplace la macro par le nom du persona et ajoute les champs Description, Personality, Appearance, Backstory et Scenario de cette fiche au même contexte ID Macro Cards. Les lorebooks activés rattachés à ce persona gardent leurs règles d'activation habituelles.

Macros du mode Conversation

Ces quatre macros ne fonctionnent que dans le mode Conversation. Dans tous les autres modes, elles donnent toujours un résultat vide, même si le même texte de fiche ou de preset est partagé entre les modes.

MacroValeur obtenue
{{convo_display}}Le champ Convo Display Name du personnage, ou le nom de la fiche s'il est vide.
{{char_about}}Le texte About Me actuel du personnage (la valeur propre au chat si elle existe, sinon celle de la fiche).
{{persona_about}}Le texte About Me actuel de ton persona.
{{convo_behavior}}Le texte Convo Behavior du personnage, mais seulement si son réglage d'insertion le place à cette macro.

Ces champs se modifient dans l'onglet Convo de l'éditeur Character Editor et de l'éditeur Persona Editor. Pour la configuration complète, voir Profils du mode Conversation.

Macros de placement en mode Conversation

Le mode Conversation insère automatiquement plusieurs blocs dans le prompt. Ces macros permettent à un preset de déplacer un bloc là où tu poses la macro. Quand tu en utilises une, Marinara affiche ce bloc à l'emplacement de la macro et saute son insertion automatique : le contenu n'est donc jamais dupliqué. Chaque macro possède un ou plusieurs alias, tous équivalents.

Macro (et alias)Ce qu'elle place
{{context}}, {{status}}Le bloc de contexte ou de statut de la conversation.
{{commands}}, {{commandList}}Le rappel des commandes disponibles.
{{reactRules}}, {{emojiReact}}Les règles de réaction par emoji personnalisé.
{{replyRules}}Les règles de réponse par emoji personnalisé et par sticker.
{{memories}}, {{memoryRecall}}Le bloc de rappel de mémoire.
{{lorebook}}, {{lore}}Les insertions de lorebook.

Tout cela ne vaut que dans le mode Conversation. Dans une conversation à un seul personnage, placer toi-même les présentations des participants avec {{char_about}} / {{persona_about}} (voir plus haut) donne le même résultat : Marinara saute alors son bloc automatique de présentation des participants, si bien que les présentations ne sont pas insérées deux fois. Les conversations de groupe conservent le bloc automatique, car chacune de ces deux macros ne couvre qu'un seul participant et ne doit pas masquer la présentation des autres.

Macros de contexte

Ces macros décrivent le chat en cours et la requête en cours.

MacroValeur obtenue
{{input}}Le message utilisateur le plus récent disponible pour le prompt.
{{model}}Le nom du modèle en cours, quand un modèle est sélectionné.
{{reasoning}}Le niveau de raisonnement avec lequel cette réponse est générée : low, medium, high, xhigh ou max, ou off quand on ne demande pas au modèle de réfléchir.
{{chatId}}L'identifiant du chat en cours.
{{lastGenerationType}}Une étiquette indiquant pourquoi cette réponse est générée.
{{idle_duration}}Le temps écoulé depuis la dernière activité du chat, sous forme de texte comme 8 minutes ou 1 hour 5 minutes.
{{gameStoryboardKeyframeCount}}L'objectif Keyframes per Turn du moment en Game Mode, de 1 à 6. Par défaut 3.
{{agent::TYPE}}Le résultat enregistré d'un agent du type indiqué.

{{reasoning}} indique le niveau envoyé au modèle, une fois combinés ton preset, ton compte et les réglages du chat. Maximum s'affiche comme le niveau le plus élevé que le modèle accepte : on peut donc lire max, xhigh ou high. Comme off se lit comme faux, {{#if reasoning}} ne garde un bloc que tant que le modèle réfléchit. Si ton preset ou ton chat a déjà sa propre variable nommée reasoning, cette variable garde le nom.

La valeur de {{lastGenerationType}} est une simple étiquette. Parmi les valeurs observées dans l'application : normal, continue, regenerate, impersonate, guided, autonomous, turn_game, preview, game_setup, lorebook_scan et retry_agents. Cette liste peut s'allonger : vois-la comme des exemples, pas comme un ensemble figé.

{{gameStoryboardKeyframeCount}} est fourni aux prompts du GM en Game Mode, dont le Storyboard Game Prompt intégré. C'est un objectif narratif, pas une exigence d'un nombre exact de paragraphes. Le planificateur de storyboard renvoie quand même moins de plans quand un tour ne contient pas assez de moments visuels distincts.

La macro {{agent::TYPE}} insère le résultat enregistré d'un agent, c'est-à-dire d'une aide qui travaille en arrière-plan et remplit par exemple un tracker de scène. Le plus simple est de passer par l'éditeur Preset Editor : clique sur Add Section (ajouter une section), ouvre le groupe Agent Sections (sections d'agent) et choisis un agent. Marinara crée une section qui contient déjà la bonne balise {{agent::TYPE}}. Cette macro est résolue en dernier, si bien que le texte d'un agent ne peut pas insérer d'autres macros dans ton prompt.

Macros d'outlet de lorebook

{{outlet::name}} insère le contenu des entrées de lorebook dont le champ Position vaut Outlet et dont le champ Outlet name correspond exactement à name. Les noms d'outlet (points d'insertion nommés) sont sensibles à la casse. Ainsi, {{outlet::character_rules}} ne correspond pas à un outlet nommé Character_Rules.

Les entrées d'outlet suivent toujours l'activation normale des lorebooks. Les mots-clés, le mode Constant, la probabilité, les filtres, le timing, les limites d'entrées et les budgets de tokens décident si une entrée est active pour la génération en cours. Les entrées actives portant le même nom d'outlet sont assemblées selon leur champ Order, séparées par des retours à la ligne. Elles sont insérées uniquement à l'emplacement de la macro, et pas en plus à une position de lorebook classique.

Les macros d'outlet s'utilisent dans les sections de prompt des modes Conversation, Roleplay et Game. La macro fonctionne même si elle apparaît avant le marqueur de lorebook du preset, et un preset n'a pas besoin de marqueur de lorebook s'il n'utilise que des entrées d'outlet. Un outlet inconnu ou inactif donne un résultat vide. Une entrée d'outlet ne peut pas développer une autre macro d'outlet : les outlets imbriqués ne sont donc pas récursifs.

Macro de taille du lorebook

{{lorebooksize::ID}} donne le nombre total d'entrées du lorebook portant cet identifiant. Remplace ID par l'identifiant du lorebook, que tu peux copier depuis le panneau Lorebooks. Par exemple, si un lorebook a l'identifiant V1StGXR8_Z5jdHi6B-myT et contient 151 entrées, {{lorebooksize::V1StGXR8_Z5jdHi6B-myT}} donne 151.

Les identifiants de lorebook inconnus donnent 0. Le compte inclut toutes les entrées, qu'elles soient activées, désactivées ou dans des dossiers.

Utilise cette macro dans les sections de prompt, les champs de fiches de personnage, le contenu des entrées de lorebook ou tout autre endroit où les macros sont résolues.

Macro d'inclusion de lorebook

{{include::ENTRY}} insère le texte d'une entrée de lorebook là où tu poses la macro. Garde un texte partagé, comme des règles maison, dans une seule entrée, et réutilise-le dans d'autres entrées, des sections de prompt ou des fiches : il n'y a ainsi qu'une seule copie à modifier. Remplace ENTRY par l'identifiant de l'entrée ou par son nom. Pour les noms, la casse n'a pas d'importance.

{{include::BOOK::ENTRY}} prend l'entrée dans le lorebook que tu nommes, par son identifiant ou son nom. Ce lorebook n'a pas besoin d'être ajouté au chat, ni même d'être activé.

{{include::Rules of the arena}}
{{include::Shared lore::Rules of the arena}}

L'entrée incluse n'a pas besoin de se déclencher, et elle peut être désactivée : tu peux donc garder des entrées qui n'existent que pour être incluses. Les macros du texte inclus fonctionnent normalement, et ce texte peut lui aussi inclure d'autres entrées. Si une inclusion ramène à une entrée dans laquelle elle se trouve déjà, par exemple une entrée qui s'inclut elle-même, cette inclusion donne un résultat vide au lieu de se répéter à l'infini. Une entrée ou un lorebook introuvable donne aussi un résultat vide.

Écris les noms et les identifiants en texte brut. Les macros qu'ils contiennent, comme dans {{include::{{char}}}}, ne sont pas résolues.

Macros de temps

Les macros de temps du monde réel lisent un même instant partagé à chaque résolution : elles restent donc toujours cohérentes entre elles. Le fuseau horaire vient de ton navigateur.

MacroValeur obtenue
{{date}}La date du jour, au format YYYY-MM-DD.
{{time}}L'heure actuelle, au format HH:MM sur 24 heures.
{{datetime}} / {{isotime}}Un horodatage complet avec le décalage de fuseau horaire. Les deux noms font la même chose.
{{weekday}}Le nom du jour de la semaine, par exemple Monday.
{{timezone}}Le nom du fuseau horaire, par exemple Europe/Warsaw.
{{date.world_state}}La date actuelle du monde suivie par World State, dans son format d'origine.
{{time.world_state}}L'heure actuelle du monde suivie par World State, dans son format d'origine.
{{weekday.world_state}}Un champ personnalisé du monde nommé Weekday ou Day of Week, un jour de la semaine écrit dans la date suivie, ou le jour de la semaine d'une date suivie valide au format YYYY-MM-DD.

Les macros .world_state fonctionnent dans les prompts et les modèles d'agents. Elles lisent la date et l'heure du monde affichées pour le tour actuel de l'histoire. Changer de swipe modifie le tour dont elles utilisent les valeurs ; régénérer utilise l'état de l'histoire dont part la réponse de remplacement. Une valeur manquante reste vide ; elle n'est jamais remplacée par la date ou l'heure actuelles du monde réel. Les calendriers fictifs conservent leur propre texte de date et d'heure. Pour un jour de semaine fictif, ajoute dans World State un champ personnalisé nommé Weekday ou Day of Week.

Par exemple, {{#if weekday.world_state == "Monday"}}Use the weekday routine.{{/if}} lit le jour de la semaine suivi au lieu du jour réel.

Macros d'aléatoire et de dés

Ces macros ajoutent du hasard dans tes prompts. Utilise la macro aléatoire ({{random}}) pour les nombres et les choix, et la macro de dés ({{roll}}) pour les jets de dés.

MacroComportement
{{random}}Un nombre entier au hasard entre 0 et 100.
{{random:X:Y}}Un nombre entier au hasard entre X et Y, bornes comprises.
{{random::A::B::C}}Tire une option au hasard, puis résout les macros à l'intérieur de la seule option retenue.
{{random::A@2::B@0.5}}Un tirage aléatoire pondéré. Voir les règles de pondération ci-dessous.
{{roll:XdY}}Le total d'un jet de dés. Par exemple, {{roll:2d6}} lance deux dés à six faces et additionne le résultat. {{roll:d20}} lance un seul dé, et {{roll:1d8+3}} ajoute 3 au jet.

Voici un tirage aléatoire simple que tu peux copier :

{{random::The door creaks open.::A bell rings.::Someone laughs nearby.}}

Choix pondérés

Ajoute un @number final à une option pour régler sa probabilité. Ce nombre est un poids relatif : plus il est grand, plus l'option sort souvent.

{{random::Common event@1::Rare event@0.25}}

Dans cet exemple, le poids total vaut 1.25, d'où les probabilités suivantes :

OptionPoidsProbabilité
Common event180 %
Rare event0.2520 %

Règles de pondération :

Variables dynamiques

Les variables permettent à une partie du prompt de stocker une valeur qu'une partie ultérieure pourra lire.

MacroComportement
{{setvar::name::value}}Stocke une valeur et ne laisse rien dans le texte.
{{getvar::name}}Lit une valeur stockée (rien si elle n'a jamais été définie).
{{addvar::name::value}}Additionne si les deux valeurs sont numériques ; sinon, ajoute le nouveau texte à la suite.
{{addnumvar::name::value}}Extension Marinara : ajoute toujours un nombre à une valeur numérique stockée. Un nombre absent ou invalide compte pour 0 ; une addition qui déborde est ignorée.
{{incvar::name}}Ajoute 1 à une variable numérique et insère la nouvelle valeur.
{{decvar::name}}Retire 1 à une variable numérique et insère la nouvelle valeur.

Les variables se résolvent de gauche à droite au cours d'une même construction du prompt. Une valeur définie tôt, par exemple dans une entrée de lorebook placée en premier, se relit plus loin dans le même prompt. Marinara les enregistre aussi dans le chat en cours, comme les variables locales de SillyTavern : elles sont conservées aux tours suivants et après un redémarrage de l'application, tandis qu'un autre chat a ses propres valeurs.

Tout {{NAME}} qui n'est pas une macro intégrée est recherché par son nom : d'abord parmi les variables du preset, puis parmi celles du chat. Si aucune ne porte ce nom, la balise reste dans le texte exactement telle que tu l'as écrite. La variable du preset a la priorité quand les deux portent le même nom. Voir Variables de preset pour le fonctionnement côté preset.

Variables du chat

Tu n'as pas besoin de {{setvar}} pour créer une variable. La section Chat Variables (variables du chat) du panneau Chat Settings (réglages du chat) te permet de saisir directement un nom et une valeur, puis d'utiliser ce nom partout où les macros fonctionnent, y compris dans tes propres messages. Ajoute char1 avec la valeur Mary, écris {{char1}} walks in. et l'IA lit "Mary walks in."

Règles des variables du chat :

Le panneau est présenté dans Vue d'ensemble des réglages du chat.

Macros de mise en forme

Ces macros agissent sur le texte qui les entoure.

MacroComportement
{{newline}} / {{\n}}Insère un saut de ligne.
{{trim}}Se supprime et retire les espaces autour de cet endroit.
{{trimStart}}Retire les espaces au début du texte environnant.
{{trimEnd}}Retire les espaces à la fin du texte environnant.
{{uppercase}}...{{/uppercase}}Met le texte encadré EN MAJUSCULES.
{{lowercase}}...{{/lowercase}}Met le texte encadré en minuscules.
{{noop}}Retirée du résultat. Pratique comme espace réservé sans effet pendant que tu modifies le texte.
{{// comment}}Une note d'auteur retirée du résultat.
{{banned "text"}}Retirée du résultat. Ne filtre et ne bloque rien du tout.

Afficher des doubles accolades telles quelles

Il n'existe aucun caractère d'échappement pour les macros. Pour que des doubles accolades restent dans le texte, choisis un nom que Marinara ne connaît pas. Tout {{name}} inconnu reste exactement tel que tu l'as saisi, tant qu'aucune variable de preset ni aucune variable de chat ne porte ce nom. S'il te faut une note privée qui n'atteint jamais l'IA, écris plutôt {{// like this}}.

La référence des macros et /macros

Chaque champ compatible avec les macros porte deux petits boutons dans son coin :

Ces champs complètent aussi les noms de macros pour toi. Tape {{ch à la fin d'une ligne et la suite, ar}}, apparaît en texte pâle. Appuie sur Tab, ou touche le texte pâle, pour l'accepter. Continue de taper pour l'ignorer. Pour une macro qui prend une valeur, comme {{getvar::, la complétion s'arrête là où tu saisis la valeur.

Tu peux aussi saisir /macros dans le champ de saisie du chat (la forme courte /macro marche aussi). La liste complète des macros s'affiche directement dans le chat, en guise de pense-bête.

Conditions avec les macros

Les blocs conditionnels ({{#if ...}}) peuvent combiner des comparaisons avec || (OU), && (ET) et des parenthèses. Les listes d'égalité acceptent la forme compacte {{#if character == "Maukie" || "Pantalone"}}. Voir Prompts conditionnels pour la priorité des opérateurs, des exemples en chat de groupe et la liste complète des opérateurs.

Une condition peut aussi interroger ton Decision model (modèle de décision) sur la scène, par exemple {{#if decision:"The latest message moves the scene to a new place"}} pour oui ou non, et {{#if decision_choice:"The kind of scene in the latest message" == "combat"}} pour choisir une option. Sans Decision model, ou sans réponse, elles valent non. Voir Interroger le modèle de décision. Options que tu peux ajouter après un énoncé :

Erreurs fréquentes

Guides associés