User guide


Poser Frames is script plugin for Photoshop that draws black borders, traced from real negatives scanned with visible film rebate. It’s designed and written by Joakim Hertze and made available “as is”, meaning I’m happy to receive feedback and comments, but I can’t promise to provide support. I’ve included common issues and workarounds at the end of this page. E-mail me at

Installing and updating Poser Frames

  1. Download and unzip the software, if the latter isn’t done automatically. The resulting folder contains the main script PoserFrames.jsx, the companion script ExtractPath.jsx and a folder with four Photoshop action sets, PoserFrames.atn, PoserFramesCentered.atn, PoserFramesBurn.atn and PoserFramesCenteredBurn.atn.

  2. Quit Photoshop.

  3. Copy the script PoserFrames.jsx to Photoshop’s scripts folder. On Mac it’s in /Applications/Photoshop 202x/Presets/Scripts and on Windows 10 it’s in C:\Program Files\Adobe\Adobe Photoshop 202x\Presets\Scripts. You may have to change the permissions of this folder to copy the script there.

  4. Start Photoshop and make sure PoserFrames shows up in the menu File/Automate (prior to version 3 the script was accessible from File/Scripts).

  5. Install the Photoshop actions by double-clicking on the files PoserFrames.atn, PoserFramesCentered.atn, PoserFramesExtreme.atn,PoserFramesBurn.atn and PoserFramesCenteredBurn.atn, or by loading them in the Actions palette.

If you want to update to a newer version of Poser Frames you simply replace PoserFrames.jsx in Photoshop’s scripts folder with a newer version. This will not affect your script settings if you use actions or droplets to run Poser Frames. However, if you opt to use script in legacy mode (see below), your settings will be lost when you update to a new script file.

Overview of how to use Poser Frames

If you install the script and actions as instructed above, it should work out of the box with images with a minimum short side of 1500 px. It is meant to be run by using one of the ready-made actions, or by a droplet made from one of those actions. It will automatically apply a border, the style of which depends on whether it’s a 2:3 image, a 4:3 image, a 6:7 image, a 4:5 image or a 1:1 image.

Using and editing the ready-made actions

Open an image in Photoshop and play with the ready-made actions. The actions contain recipes (script settings), that determines the look of the rendered border. As a default, the images won’t be saved after the script runs, leaving them intact. Because of this, the actions won’t work for automation (such as droplets) just yet. If you make a droplet at this stage you’ll be prompted to save the image on every droplet run.

When you’re ready to have an action save the resulting image, or when you want to edit the recipe of an action, expand the action (click on the right bracket) to show the recorded script name, Poser Frames. When you double-click on this, a dialog will open where you can edit the saved recipe. Click the button labeled Use this recipe to save your changes. Sometimes Photoshop acts a little finicky and does not save the updated recipe, especially if you edit many actions one after another. If that happens, try closing the image you have open, open it again and then edit the action.

If you check Save and close when done the script will start saving and closing the image after it runs, so leave this unchecked while you’re still trying out different recipes.

Making your own actions

Make your own recipe actions by duplicating an existing action (click on the small hamburger menu in the upper right corner of the Actions palette and choose Duplicate) and change the name (by double-clicking on it) and edit the recipe as outlined above.

You can also record your own actions from scratch by having an image open and then click on the plus icon in the Actions palette, name the action and start recording. Choose Poser Frames from the File/Automate menu, paste the recipe you want, make sure Save and close when done isn’t checked (otherwise the image will close and you can’t stop the recording) and click Use this recipe to run the script. When it’s finished, open the recipe again as outlined above, check Save and close when done and save the recipe, if you’re ready for the script to start saving your images.

You can make as many actions with different settings as you like.

Making droplets

Make sure to check Save and close when done if you’re ready to make droplets from the action (such as for batch processing). Please refer to the Photoshop instructions for how to make a droplet.

How to build a recipe

A recipe is a text string with script settings that follows a specific syntax. It contains 21 settings, separated by a ; (semicolon) and an optional blank space for readability.

The full geeky syntax for a recipe looks like this:

[true|false]; [true|false]; [true|false]; [1-7]; [1-4]; [1-3]; [1-2]; [1-3]; [1-2]; [true|false]; [1-9]; [1-9]; [0.5-3.9]; [1-9]; [1-9]; [true|false]; [true|false]; [true|false]; [0-100]; [0-100]; [random|bottomleft|topright]

All 21 settings must always be specified and in the following order (the name of the setting in bold isn’t written in the recipe, only the value):

  1. fancy: If set to true, the script will simulate a scan with visible scan mask edges. If you like a cropped look, set this to false.
  2. eccentric: Set this to true if you want the image to be be able to move from a centered position in the scanner mask. If not, set it to false.
  3. artifacts: If set to true the script will add artifacts at the outside of the mask border, often seen with real film as a consequence of the scanning and editing process. Set it to false for a crisper look.
  4. mask_variant_35mm: The style of scanner mask to use with 2:3 images. The script comes with seven styles, numbered from 1 to 7.
  5. mask_variant_645: The style of scanner mask to use with 4:3 images. The script comes with four styles, numbered from 1 to 4.
  6. mask_variant_67: The style of scanner mask to use with 6:7 images. The script comes with three styles, numbered from 1 to 3.
  7. mask_variant_45: The style of scanner mask to use with 4:5 images. The script comes with two styles, numbered from 1 to 2.
  8. mask_variant_square: The style of scanner mask to use with square images. The script comes with three styles, numbered from 1 to 3.
  9. negative_variant_square: The look of the negative, where 1 has a look drawn from Rolleiflex square formats and 2 from Hasselblad square formats.
  10. matted_crop: If set to true the script will add a white border around a cropped frame. If set to false no border will be added.
  11. border_width_35mm: Border width for 35mm format, when fancy = false.
  12. border_width_645: Border width for 645 format, when fancy = false.
  13. border_width_67: Border width for 6x7 format, when fancy = false.
  14. border_width_45: Border width for 4x5 format, when fancy = false.
  15. border_width_square: Border width for square format, when fancy = false.
  16. burn: If set to true, the script will render a film burn effect in your frame. If set to false, no burn will be rendered and the following two settings will have no effect.
  17. burn_at_opposite_edge: If set to true, the film burn will be placed at the opposite (bottom or right) edge of the frame. If set to false the burn will be placed at the default position.
  18. monochrome_burn: If set to true, a monochrome film burn will be rendered. If set to false a tricolor burn will be rendered.
  19. movement_min: Defines the floor (lowest value) for all possible image movements from a centered position, where 0 is no movement and 100 is maximum movement. Used together with movement_max to define an interval for all possible movements.
  20. movement_max: Defines the ceiling (highest value) for all possible image movements from a centered position, where 0 is no movement and 100 is maximum movement. Used together with movement_min to define an interval for all possible movements.
  21. movement_direction: When set to random the script may move the image relative to the mask in all four directions (up/down/left/right). When set to bottomleft it will only move it towards the bottom left and when set to topright towards the top right.

A actual recipe for the default settings looks like this:

true; true; true; 1; 1; 1; 1; 1; 1; true; 1; 1; 1; 1; 1; false; false; false; 10; 100; random

How to design a look for your recipe

Browse the style gallery below and the script settings above. Use the following decision algorithm as a guide:

  1. Your main decision is between a cropped look and a fancy look, where the outer scanner mask edges are included in the scan. This is set by the setting fancy.
    • If you chose a cropped look, the settings border_width_35mm, border_width_645, border_width_67, border_width_45 and border_width_square determines the thickness of the visible border. The setting matted_crop determines if the entire image and its border should be placed on a white background.
    • If you chose a fancy look, with visible scanner mask edges, you now have a choice between scanner mask styles for each aspect ratio. The style for each aspect ratio is determined with the settings mask_variant_35mm, mask_variant_645, mask_variant_67, mask_variant_45 and mask_variant_square. For square images, the setting negative_variant_square switches between a Rolleiflex look and a Hasselblad look for the negative. The setting artifacts determines if scanner artifacts should be added outside the mask border.
  2. Decide if you prefer the image area to be centered in the frame (with more or less equal thickness of the border), or a scan towards one of the inner mask edges. This is set with the setting eccentric.
  3. If you want to add a film burn effect on your frames, use the setting burn and burn_at_opposite_edge to add and position a burn. The setting monochrome_burn determines if the burn should be monochrome or not.

Using Poser Frames without recipes (legacy mode)

The settings are hard coded at the top of the script file and are written as Javascript variable declarations, like this:

var fancy = true;

It’s important to keep this format when you make changes. Make sure the = or the ; doesn’t accidentally get deleted when you change a value. All variables must be declared, so make sure you don’t accidentally delete any lines.

To begin using the script without recipes you need to change the setting legacy to this:

var legacy = true;

If you want the script to save the images after it’s run change the setting save to this:

var save = true;

The hard coded settings are the same as the ones used in a recipe above. There are also five additional settings available in the script file:

  1. feather_factor_35mm: How much feathering of the border you like for 35mm. The lower value, the more feathering. Preset value is 1200.
  2. feather_factor_645: How much feathering of the border you like for 645. The lower value, the more feathering. Preset value is 1800.
  3. feather_factor_67_square: How much feathering of the border you like for square and 67. The lower value, the more feathering. Preset value is 2400.
  4. feather_factor_45: How much feathering of the border you like for 4x5. The lower value, the more feathering. Preset value is 5400.
  5. mask_flip_probaility: The probability of the scanner mask being rotated 180 degrees. Initially set to 20 out of 100.

These five settings are always active, even when the script is run in recipe mode.

Note that the setting movement_direction, also used in recipes, must be enclosed with quotation marks in the script file, like this:

var movement_direction = "random";

Troubleshooting and general tips

  • The error message “The document does not contain a selection” means the image dimensions are too small. For technical reasons your image needs to be at least 1500px on its shortest side for the script to run.
  • The error message “The command Play is not currently available” means actions or scripts are missing when Photoshop tries to run Poser Frames from a droplet or other means of automation. Make sure you’ve followed the installation instructions above. Also, if you have several versions of Photoshop installed, make sure your droplet launches the correct version (the one with Poserframes installed). A workaround is to manually launch the correct version of Photoshop before you run your droplet.
  • After having updated to a new major Photoshop version, it seems you need to install the script PoserFrames.jsx in the new /Applications/Photoshop 202x/Presets/Scripts folder, or just move it over from the old folder. Remember to restart Photoshop afterwards and make sure Poser Frames shows up in the menu File/Automate.
  • The script is designed to work with images in true 2:3, 4:3, 4:5, 6:7 or 1:1 formats. If your image has a crop that deviate from these aspects ratios it might still run, but the results will look odd.
  • The script attempts to determine if your image is in color or in black and white, and then generates scanner artifacts and film burns in color or grey scale accordingly. Sometimes this fails (some black and white images actually contain a little color and some color images happen to have greyscale pixels at the center). If you want to bypass this color check (and speed things up a bit), you can add the keyword color or the keyword bw to the file meta data of your image. This is easily done in Adobe Lightroom CC or Adobe Bridge and those keywords are passed on to exported images.
  • If you feel the script is too slow, I’m sorry. I have just not found way to make JavaScript and Photoshop efficient together. The script is written with a progressive disclosure structure, however, which means it will run att different speeds depending on your settings. It will be fastest in crop mode with no added matte and slowest in fancy mode with scanner artifacts and film burn at opposite side turned on.
  • Use the settings feather_factor_35mm, feather_factor_645, feather_factor_67_square and feather_factor_45 to control how fuzzy the mask edges and rebate edges appear for each aspect ratio. For most tastes, these settings should be left with their preset values.
  • The settings movement_min and movement_max are used together to determine how much the script is allowed to move the image area from the centered position in the scanner mask. For each movement axis, the distance between the centered position and the the most extreme eccentric position is divided into 100 equal units. The scrips generates a random number between movement_min and movement_max and then moves the image that many units from the centered position. Because of this, if you set movement_min and movement_max both to 0, the image area will never move from the centered position. If you set movement_min and movement_max both to 100, the image area will always move to the most extreme position. I use the latter setting myself at times, since I really enjoy that off-center look.
  • If you set both movement_min and movement_max to 100, I think it looks best to set artefacts to false.
  • I like to run the Film Grain, from the Archetype Process, on my images after I’ve run Poser Frames. That way, the borders blend in nicely with the images. If you have Poser Frames in fancy mode, you may want to remove the grain added to the white areas outside of the border. I use the magic wand in Photoshop, and fill the selection with white.

Using ExtractPath.jsx

Install this companion Photoshop script the same way as Poser Frames. This script takes a path named Frame in your active Photoshop document, extracts all the path points and saves them to the desktop in the text file poserframes-path.txt in a format used in the Poser Frames frame library. If you feel adventurous, you can use this to add your own borders to Poser Frames.


Thanks to Marc Holstein and Andreas Georgiou for providing me with scanned negatives. Also, many thanks to Tom Wright, who gently nudged me to make the film burn add-on.


Poser Frames is made available under a Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.