Interesting... so what's happening on the backend is that ZeroFrame detects the line break series, substitutes a placeholder in that spot, and then, when all the processing is done and it's ready to release the message, it does a quick replacement in the other direction to put the line breaks back in. It seems that native templates (from chat to output) process the line break into some other series of characters. But we can work around that. Stepping Stone Solution (Better Solution, Below) You could, if you were only worried about the white space of the line breaks, compact the command down to a single line while inserting %NEWLINE% where the line breaks should be. However, since this would put the line breaks back in before ZeroFrame saw the message, you'd be back to the same issue... so this would require one further obfuscation: !/w gm &{template:traits} {{name=?{Photo Name? (Name in 'Scenes' chat menu)} Photo}} {{source= ?{New Photo Width? (Get width from photo info)} x ?{New Photo Height? (Get height from photo info)}}} {{description=**Instructions**%^NEWLINE^%1. Drop new image onto map layer%^NEWLINE^%2. Click on Scenes image on Map layer and click the 'Add-Image' button then use new image as target%^NEWLINE^%3. Open 'Change-Scene' macro and add code from this output}} {&simple}{&escape ^} The {&escape} tag tells ZeroFrame that anywhere it sees the included string of characters (here, just the "^" character), it should remove them before releasing the message. That way we can use the ^ to hide the %NEWLINE% tag: %^NEWLINE^% But handling the white space of the final message is probably not your only concern. You very likely still would like to keep the same line breaks as are in the original command line because that aids with readability. For that, see the Better Solution. Better Solution You didn't have to go far. =D To preserve the line breaks in the original message, we're going to use Plugger's new replace() function. We'll have it look for the particular placeholder text ZeroFrame uses as a "line break indicator": ({&br}) ...and replace it with the escaped new line series discussed above: %^NEWLINE^% And we'll still use the same {&escape} tag to make those new line references be recognizable to Roll20 at the right time (when the message is released). The final solution would look like this: !/w gm &{template:traits} {{name=?{Photo Name? (Name in 'Scenes' chat menu)} Photo}} {{source= ?{New Photo Width? (Get width from photo info)} x ?{New Photo Height? (Get height from photo info)}}} {{description=**Instructions**{&eval}replace(--source|` 1. Drop new image onto map layer 2. Click on Scenes image on Map layer and click the 'Add-Image' button then use new image as target 3. Open 'Change-Scene' macro and add code from this output` --find|`({&br})`|%^NEWLINE^%){&/eval} }} {&simple}{&escape ^} Note that because the "source" text for the replace function will have a closing parentheses (because we know it will have ZeroFrame line-break placeholders), we need to enclose it in some quotation mark (I use the tick mark). The same goes for the "find" argument, since that is specifically referring to the line break placeholder. Also of note that this requires Plugger v1.08, which was just merged this week. If you got the one-click version of the Toolbox, you're golden.