Forum: Poser Python Scripting


Subject: Apply material across all parts of an object

maur_2005 opened this issue on Sep 25, 2021 ยท 10 posts


maur_2005 posted Sat, 25 September 2021 at 10:19 PM

Hi Folks, I need help with a script that when I load a material from the library the material is applied to each part (material zones) of the current figure. Does anyone have any ideas?
Thanks in advance.


adp001 posted Sun, 26 September 2021 at 1:57 AM

Maybe this can help: https://www.renderosity.com/forums/threads/2959992/something-more-about-poser-materials




HartyBart posted Tue, 28 September 2021 at 8:44 PM

There are a number of scripts:

XS eXtended Shader Manager.

MATWriter Panel.

Transfer Material.

And I think SnarlyGribbly's EZMat can also do that, but I might be wrong? It can do most things like that.



Learn the Secrets of Poser 11 and Line-art Filters.


HartyBart posted Tue, 28 September 2021 at 8:46 PM

There was also LLAnime and LLToon, for giving your figures toon materials in a few clicks. They no longer work, but may do if you're still running an old copy of Poser.



Learn the Secrets of Poser 11 and Line-art Filters.


maur_2005 posted Wed, 13 October 2021 at 10:33 PM

Thank you both for your help, I was wondering if there is a way to apply a material in the same way you can apply a pose, but it seems that it is not possible.


structure posted Thu, 14 October 2021 at 1:20 AM Forum Coordinator

import os
import poser

scene = poser.Scene()
actor = scene.CurrentActor()
figure = scene.CurrentFigure()
# get the mat you want to copy
# you can use other methods to find the material you want.
material = scene.CurrentMaterial()

actor.SaveMaterialSet( os.path.join( poser.TempLocation(), "tempmat.mt5") )
if not actor.IsBodyPart():
    for material in actor.Materials():
        actor.LoadMaterialSet( os.path.join( poser.TempLocation(), "tempmat.mt5") )
else:
    for material in figure.Materials():
        actor.LoadMaterialSet( os.path.join( poser.TempLocation(), "tempmat.mt5") )
scene.DrawAll()
# cleanup
# delete temporary material file
os.unlink( os.path.join( poser.TempLocation(), "tempmat.mt5") )

Locked Out


Keith posted Sat, 20 November 2021 at 2:18 PM

Given that you can do this already in the material room by right clicking and choosing "Select All" and then right clicking again and hitting "Apply to all", I don't really see why you'd need a script.



FVerbaas posted Sun, 21 November 2021 at 3:02 PM Forum Coordinator

Keith posted at 2:18 PM Sat, 20 November 2021 - #4430724

Given that you can do this already in the material room by right clicking and choosing "Select All" and then right clicking again and hitting "Apply to all", I don't really see why you'd need a script.

That is general with any script. A script automates a series of GUI actions. A script like the above by itself indeed has little need, unless this is something you have to do 100 times.  The thing is you may need this code as a part of a more encompassing process in a bigger script. It is very annoying to have to stop, tell the user to do something, check if he did it correctly,  and so on. 

We generally share code snippets here 'wrapped' in a script so others can easily see what the snippet does and test it before merging it into the bigger process.  


structure posted Tue, 23 November 2021 at 7:15 AM Forum Coordinator

FVerbaas posted at 3:02 PM Sun, 21 November 2021 - #4430737

Keith posted at 2:18 PM Sat, 20 November 2021 - #4430724

Given that you can do this already in the material room by right clicking and choosing "Select All" and then right clicking again and hitting "Apply to all", I don't really see why you'd need a script.

That is general with any script. A script automates a series of GUI actions. A script like the above by itself indeed has little need, unless this is something you have to do 100 times.  The thing is you may need this code as a part of a more encompassing process in a bigger script. It is very annoying to have to stop, tell the user to do something, check if he did it correctly,  and so on. 

We generally share code snippets here 'wrapped' in a script so others can easily see what the snippet does and test it before merging it into the bigger process.  

Also, It is not necessarily the script that someone needs but the understanding of how particular functions can be applied for use within the poser environment. BUT as FVerbaas states you might want to apply a black texture across a number of background figures to create silhouettes, want to do it your (the built -in poser) way? no problem, enjoy. For people with less time and / or patience however; this script will automate the process, thereby speeding it up exponentially and you can modify it to work only on the figures/props that you want to address. 

Locked Out


Y-Phil posted Wed, 29 December 2021 at 12:39 PM

Keith posted at 2:18 PM Sat, 20 November 2021 - #4430724

Given that you can do this already in the material room by right clicking and choosing "Select All" and then right clicking again and hitting "Apply to all", I don't really see why you'd need a script.

One day, I've stumbled upon a weird effect of the "Apply to all" menu entry: there was a prohibited link between two nodes in the pure firefly part. Using that menu entry led to overwrite the "Preview" material. As I was using the Superfly, I didn't even remarked, till the moment when Poser crashed.
And I had quite a hard time to find the source of the problem, as I never touch the Preview material... ๐Ÿ˜…
I'm going to add an adapted version of that script to my toolbox dialog ๐Ÿ˜

๐’ซ๐’ฝ๐“Ž๐“


(ใฃโ—”โ—กโ—”)ใฃ

๐Ÿ‘ฟ Win11 on i9-13900K@5GHz, 64GB, RoG Strix B760F Gamng, Asus Tuf Gaming RTX 4070 OC Edition, 1 TB SSD, 6+4+8TB HD
๐Ÿ‘ฟ Mac Mini M2, Sonoma 14.6.1, 16GB, 500GB SSD
๐Ÿ‘ฟ Nas 10TB
๐Ÿ‘ฟ Poser 13 and soon 14 โค๏ธ