Notifications
Clear all

[Closed] RealRenderHistory Bug

Hi,

I am using a script called RealRenderHistory by Borislav Petrov
found here http://www.scriptspot.com/bobo/darkmoon/rrh

I am very fond of this script but I have encountered a bug in the “preview” window. When I render 10 frames, 100 frames etc the preview window does not display them in order. It seems to happen when the file names go up from 9-10, 99-100 etc. I am using 3dsmax9. Does anyone know what might be causing this bug or how to fix it? Thanks for the help.

14 Replies

hehe… I think Bobo might cringe a little when he re-reads that code… I know I do when I see my own old code shudders at the thought

The basic problem is in the float inaccuracy and implicit float to int casting. While a particular value being calculated may look like it’s 10.0, it’s actually something like 9.99999999999. When that’s cast to an int, it ends up being 9. Whoops.

The main function that gets called to update the display is ‘update_history_display’. In it you’ll find this piece of code that is the culprit:


 local image_index = (val*get_image_files.count/100.0 as integer)+1
 

That seemingly-odd piece of code is to deal with the user clicking on the progress bar to go to a particular image. The progress bar’s value goes from 0.0 to 100.0, so it has to map that percentage to an image value.

However, that also gets run when you use the spinner. That spinner already contains the correct image index, so to make the spinner conform to the function, the spinner’s ‘changed val’ handler contains:


 new_val = (100.0*(val-1)/rrh_current_frame.range.y)
 

Unfortunately, due to float inaccuracies, those two calculations don’t always cancel eachother out 100%, thus leading to the problem.

Now as for the fix… essentially, the code to handle the progress bar’s 0.0 to 100.0 (percent) should be handled in the progress bar’s handler, rather than in the updating function. A lot of the calls to “update_history_display” seem to rely on that function taking the 0.0 to 100.0 range, though, so the code would have to be adjusted in quite a few locations. A simpler ‘fix’ would be to round the value.

Add the following function somewhere in the rollout – for example, above “fn build_image_report”:


 	fn numRound val digits:0 = (
 		local negator, mult, valInt, valDec, result
 		negator = 1
 		if (val != abs(val)) do (
 			negator = -1
 			val = abs(val)
 		)
 		mult = 10.0 ^ digits
 		val = val * mult
 		valInt = val as integer
 		valDec = val - valInt
 		if (valDec < 0.5) then ( result = valInt )
 		else if (valDec > 0.5) then ( result = valInt + 1 )
 		else (
 			if ((mod valInt 2) == 0) then ( result = valInt )
 			else ( result = valInt + 1 )
 		)
 		result = result / mult * negator
 		if (digits == 0) then ( return (result as integer) )
 		else ( return result )
 	)
 

Then in “update_history_display”, change the following:


 -- local image_index = (val*get_image_files.count/100.0 as integer)+1
 local image_index = numRound ((val*get_image_files.count/100.0 as integer)+1)
 

Again, though – ideally the function would be adjusted to take the image index directly and handling the 0.0% … 100.0% bit in the progressbar only. Lots of little bits of code in the source to adjust if doing so

I know almost nothing about maxscript and I actualy understood what you said. Very straightforward thanks. I changed the code but it seemed to have no affect on the script. This is the changed code based on Bobo’s script and your suggestions. Am I doing something wrong?

Thanks.


macroScript RHistoryToggle category:"Bobo_s Tools" buttontext:"RHistory"
(
--------------------------------------------
--RealRenderHistory 
--version 0.0.2 (Beta)
--Last Edited: 12/01/2004
--Copyright (c) 2002-2004 by Borislav Petrov
--bobo@franticfilms.com
-- http://www.scriptspot.com/bobo/darkmoon/rrh 
--------------------------------------------
global RRH_StoreLastRenderData 
persistent global RRH_RenderHistoryEnabled
on isChecked return RRH_RenderHistoryEnabled
on execute do
(
if RRH_RenderHistoryEnabled == undefined then 
RRH_RenderHistoryEnabled = true
else 
RRH_RenderHistoryEnabled = not RRH_RenderHistoryEnabled
 
if RRH_RenderHistoryEnabled then
(
--Make sure there is a RenderHistory directory to store images into...
makedir ((GetDir #preview)+"/renderHistory")
 
fn RRH_StoreLastRenderData =
(
local frame_info = 
local last_image = GetLastRenderedImage()
local check_for_files = getFiles ((GetDir #preview)+"/renderHistory/RRH_"+(getFileNameFile maxFileName)+"*.rpf")
local file_exist = true
local increment = 1
while file_exist do
(
	local out_file_name = (GetDir #preview)+"/renderHistory/RRH_"+(getFileNameFile maxFileName)+"_"+(check_for_files.count+increment) as string + ".rpf"
	if (getFiles out_file_name).count == 0 then 
	 file_exist = false
	else
	 increment += 1
)
local scene_info_path = out_file_name+".ini"
scene_info_file = createFile scene_info_path
setIniSetting scene_info_path "General" "SceneName" (getFileNameFile maxFileName)
setIniSetting scene_info_path "General" "RenderDate" localtime
setIniSetting scene_info_path "General" "ImageWidth" (last_image.width as string)
setIniSetting scene_info_path "General" "ImageHeight" (last_image.height as string)
setIniSetting scene_info_path "General" "CacheFile" out_file_name
if (maxVersion())[1] < 6000 then
(
	if getUseDraftRenderer() then 
	 current_renderer = "Draft" 
	else 
	 current_renderer = "Production" 
)
else 
	 current_renderer = "Production" 
 
setIniSetting scene_info_path "Renderer" "Renderer" (classof (renderers.current) as string)
setIniSetting scene_info_path "Renderer" "RendererSetup" current_renderer
setIniSetting scene_info_path "Renderer" "OutputPath" rendOutputFilename
setIniSetting scene_info_path "Renderer" "RenderWidth" (renderWidth as string)
setIniSetting scene_info_path "Renderer" "RenderHeight" (renderHeight as string)
setIniSetting scene_info_path "Renderer" "ImageAspect" (getRendImageAspect() as string)
setIniSetting scene_info_path "Renderer" "PixelAspect" (renderPixelAspect as string)
setIniSetting scene_info_path "Renderer" "ApertureWidth" (getRendApertureWidth() as string)
setIniSetting scene_info_path "Renderer" "ColorCheck" (rendColorCheck as string)
setIniSetting scene_info_path "Renderer" "SuperBlack" (rendSuperBlack as string)
setIniSetting scene_info_path "Renderer" "SuperBlackThreshold" (rendSuperBlackThresh as string)
setIniSetting scene_info_path "Renderer" "RenderHidden" (rendHidden as string) 
setIniSetting scene_info_path "Renderer" "Force2Sided" (rendForce2Side as string)
setIniSetting scene_info_path "Renderer" "RenderAtmosphere" (rendAtmosphere as string)
setIniSetting scene_info_path "Renderer" "RenderDisplacements" (renderDisplacements as string)
setIniSetting scene_info_path "Renderer" "RenderEffects" (renderEffects as string)
setIniSetting scene_info_path "Renderer" "DitherTrueColor" (rendDitherTrue as string)
setIniSetting scene_info_path "Renderer" "Dither256Color" (rendDither256 as string)
setIniSetting scene_info_path "Renderer" "MultiThreaded" (rendMultiThread as string)
 
setIniSetting scene_info_path "AntiAliasing" "Filter" (classof (scanlineRender.antiAliasFilter) as string)
setIniSetting scene_info_path "AntiAliasing" "FilterSize" (scanlineRender.antiAliasFilterSize as string)
setIniSetting scene_info_path "AntiAliasing" "PixelSampler" (scanlineRender.enablePixelSampler as string)
 
 
setIniSetting scene_info_path "SceneInfo" "TotalObjectsCount" (objects.count as string)
setIniSetting scene_info_path "SceneInfo" "GeometryObjectsCount" (geometry.count as string)
setIniSetting scene_info_path "SceneInfo" "CameraObjectsCount" (cameras.count as string)
setIniSetting scene_info_path "SceneInfo" "LightsObjectsCount" (lights.count as string)
 
last_image.filename = out_file_name 
save last_image
close last_image
last_image = undefined
try(rrh_rollout.update_history_display 100.0)catch()
)
callbacks.removeScripts #postRender id:#rrhistory
callbacks.addScript #postRender "RRH_StoreLastRenderData()" id:#rrhistory
)
else 
(
callbacks.removeScripts #postRender id:#rrhistory
)--end if 
)--end on execute
)--end script
 
macroScript RHistoryBrowse category:"Bobo_s Tools" buttontext:"See RHistory"
(
global rrh_rollout 
local preview_image = bitmap 320 240
local vfb_image = bitmap 320 240
local image_index = 1
local get_image_files = #()
local LeftMouseDown = false
rollout rrh_rollout "RealRenderHistory"
(
bitmap rrh_preview width:320 height:240 bitmap:preview_image pos:[1,0]
progressbar rrh_slider align:#center value:0 width:320 height:20 pos:[1,240] 
checkbutton rrh_display_vfb "Show VFB" height:20 width:70 checked:false pos:[2,260] highlightcolor:(color 200 255 200) tooltip:"Show Images in VFB"
button rrh_load_ramplayer "RAMplayer" height:20 width:70 pos:[2,280] tooltip:"Load Images in RAMplayer"
checkbutton rrh_scene_only "Scene Only" height:20 width:70 pos:[72,260] highlightcolor:(color 200 255 200) checked:true tooltip:"Show Current Scene Images only / Show All Images"
checkbutton rrh_drag_image "Image Drag" height:20 width:70 pos:[72,280] highlightcolor:(color 200 200 255) tooltip:"Click and Drag Mouse over Image to Scroll History"
 
button rrh_delete_image "Delete" height:20 width:60 pos:[142,260] tooltip:"Delete Current Image"
button rrh_delete_all "Delete All" height:20 width:60 pos:[142,280] tooltip:"Delete All Images"
button rrh_image_info "Settings" height:20 width:60 pos:[202,260] enabled:false
button rrh_scene_info "Report" height:20 width:60 pos:[202,280] tooltip:"Generate Image Report"
 
spinner rrh_current_frame range:[1,1,1] type:#integer pos:[262,262] fieldwidth:40
 
fn numRound val digits:0 = (
local negator, mult, valInt, valDec, result
negator = 1
if (val != abs(val)) do (
	negator = -1
	val = abs(val)
)
mult = 10.0 ^ digits
val = val * mult
valInt = val as integer
valDec = val - valInt
if (valDec < 0.5) then ( result = valInt )
else if (valDec > 0.5) then ( result = valInt + 1 )
else (
	if ((mod valInt 2) == 0) then ( result = valInt )
	else ( result = valInt + 1 )
)
result = result / mult * negator
if (digits == 0) then ( return (result as integer) )
else ( return result )
)
 
fn build_image_report scene_info_path image_info_path =
(
image_info_file = createFile image_info_path
format "==========================================
" to:image_info_file
format "RENDER HISTORY - IMAGE REPORT
" to:image_info_file
format "==========================================
" to:image_info_file
 
str = getIniSetting scene_info_path "General" "SceneName" 
format "Scene Name: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "General" "RenderDate" 
format "Render Date: 		%
" str to:image_info_file
str1 = getIniSetting scene_info_path "General" "ImageWidth" 
str2 = getIniSetting scene_info_path "General" "ImageHeight" 
format "Image Size: 		% x %
" str1 str2 to:image_info_file
str = getIniSetting scene_info_path "General" "CacheFile" 
format "RRH Cache Name: 	%
" str to:image_info_file
format "==========================================
" to:image_info_file
format "RENDERER SETTINGS:
" to:image_info_file
str = getIniSetting scene_info_path "Renderer" "Renderer" 
format "Current Renderer: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "RendererSetup" 
format "Renderer Setup: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "OutputPath" 
format "Output Path: %
" str to:image_info_file 
 
str1 = getIniSetting scene_info_path "Renderer" "RenderWidth" 
str2 = getIniSetting scene_info_path "Renderer" "RenderHeight" 
format "Render Size: 		% x %
" str1 str2 to:image_info_file
str = getIniSetting scene_info_path "Renderer" "ImageAspect" 
format "Image Aspect: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "PixelAspect" 
format "Pixel Aspect: 		%
" str to:image_info_file
 
str = getIniSetting scene_info_path "Renderer" "ApertureWidth" 
format "Aperture Width: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "ColorCheck" 
format "Color Check: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "SuperBlack" 
format "Super Black: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "SuperBlackThreshold" 
format "S.Black Threshold: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "RenderHidden" 
format "Render Hidden: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "Force2Sided" 
format "Force 2 Sided: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "RenderAtmosphere" 
format "Atmosphere: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "RenderDisplacements" 
format "Displacement: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "RenderEffects" 
format "RenderEffects: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "DitherTrueColor" 
format "Dither TrueColor: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "Dither256Color" 
format "Dither 8-bit: 		%
" str to:image_info_file
str = getIniSetting scene_info_path "Renderer" "MultiThreaded" 
format "Multi-Threaded: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "AntiAliasing" "Filter" 
format "AA-Filter:	 	%
" str to:image_info_file
str = getIniSetting scene_info_path "AntiAliasing" "FilterSize" 
format "AA-Filter Size: 	%
" str to:image_info_file
str = getIniSetting scene_info_path "AntiAliasing" "PixelSampler" 
format "Pixel Sampler: 	%
" str to:image_info_file
 
format "==========================================
" to:image_info_file
format "SCENE INFO:
" to:image_info_file
str = getIniSetting scene_info_path "SceneInfo" "TotalObjectsCount" 
format "Total Objects Count:	%
" str to:image_info_file
str = getIniSetting scene_info_path "SceneInfo" "GeometryObjectsCount" 
format "Geometry Objects Count: %
" str to:image_info_file
str = getIniSetting scene_info_path "SceneInfo" "CameraObjectsCount" 
format "Cameras Count:		 %
" str to:image_info_file
str = getIniSetting scene_info_path "SceneInfo" "LightsObjectsCount" 
format "Lights Count:		 %
" str to:image_info_file
format "==========================================
" to:image_info_file
 
close image_info_file
edit image_info_path
)
 
fn build_ramplayer_ifl =
(
if rrh_scene_only.checked then file_name = (getFileNameFile maxFileName) else file_name = ""
local get_image_files = getFiles ((GetDir #preview)+"/renderHistory/RRH_"+file_name+"*.rpf")
local ifl_path_1 = ((GetDir #preview)+"/renderHistory/RRH_List_1.ifl")
local ifl_path_2 = ((GetDir #preview)+"/renderHistory/RRH_List_2.ifl")
local temp_ifl_1 = createfile ifl_path_1
local temp_ifl_2 = createfile ifl_path_2
format "%
" (fileNameFromPath get_image_files[1]) to:temp_ifl_1
for i in get_image_files do
(
format "%
" (fileNameFromPath i) to:temp_ifl_1
format "%
" (fileNameFromPath i) to:temp_ifl_2
)
close temp_ifl_1
close temp_ifl_2
RAMplayer ifl_path_1 ifl_path_2
)
 
fn update_history_display val =
(
if rrh_scene_only.checked then file_name = (getFileNameFile maxFileName) else file_name = ""
local get_image_files = getFiles ((GetDir #preview)+"/renderHistory/RRH_"+file_name+"*.rpf")
local image_index = numRound ((val*get_image_files.count/100.0 as integer)+1)
if image_index > get_image_files.count then image_index = get_image_files.count
if image_index > 0 then
(
current_image = openbitmap get_image_files[image_index]
copy current_image preview_image 
rrh_preview.bitmap = preview_image
 
if rrh_display_vfb.checked then 
(
	if vfb_image.height != current_image.height or vfb_image.width != current_image.width then
	(
	 close vfb_image
	 vfb_image = bitmap current_image.width current_image.height
	)
	copy current_image vfb_image
	display vfb_image 
)
close current_image 
) 
else
(
current_image = bitmap 32 24
copy current_image preview_image 
rrh_preview.bitmap = preview_image
copy current_image vfb_image
image_index= 1
)
rrh_current_frame.range = [1,get_image_files.count, image_index]
rrh_slider.value = 100.0 * image_index / get_image_files.count 
)
 
on rrh_slider clicked val do update_history_display val 
 
on rrh_current_frame changed val do 
(
new_val = (100.0*(val-1)/rrh_current_frame.range.y)
update_history_display new_val 
) 
on rrh_display_vfb changed state do 
(
if state == false then 
undisplay vfb_image
else
update_history_display rrh_slider.value
)
 
on rrh_load_ramplayer pressed do build_ramplayer_ifl()
 
on rrh_delete_all pressed do
( 
if rrh_scene_only.checked then 
(
file_name = (getFileNameFile maxFileName)
q = queryBox "Delete Current Scene Images from History?" title:"RRH"
) 
else 
(
file_name = ""
q = queryBox "Delete ALL Images from History?" title:"RRH"
) 
if q then
(
local get_image_files = getFiles ((GetDir #preview)+"/renderHistory/RRH_"+file_name+"*.rpf")
for i in get_image_files do 
(
	deleteFile i
	deleteFile (i+".ini")
	deleteFile (i+".txt")
) 
update_history_display rrh_slider.value
) 
) 
on rrh_delete_image pressed do
( 
if rrh_scene_only.checked then 
file_name = (getFileNameFile maxFileName)
else 
file_name = ""
q = queryBox "Delete Current Image from History?" title:"RRH"
if q then
(
local get_image_files = getFiles ((GetDir #preview)+"/renderHistory/RRH_"+file_name+"*.rpf")
deleteFile get_image_files[rrh_current_frame.value]
deleteFile (get_image_files[rrh_current_frame.value]+".ini")
deleteFile (get_image_files[rrh_current_frame.value]+".txt")
update_history_display rrh_slider.value
) 
) 
on rrh_scene_info pressed do
(
if rrh_scene_only.checked then 
file_name = (getFileNameFile maxFileName)
else 
file_name = ""
local get_image_files = getFiles ((GetDir #preview)+"/renderHistory/RRH_"+file_name+"*.rpf")
build_image_report (get_image_files[rrh_current_frame.value]+".ini") (get_image_files[rrh_current_frame.value]+".txt") 
)
 
on rrh_scene_only changed state do update_history_display rrh_slider.value
on rrh_rollout close do undisplay vfb_image
on rrh_rollout lButtonDown pos do LeftMouseDown = True
on rrh_rollout lButtonUp pos do LeftMouseDown = False
 
on rrh_rollout mouseMove pos do
(
if LeftMouseDown and rrh_drag_image.checked then 
(
val = 100.0*((pos.x/320.0))
if val < 0 then val = 0
update_history_display val
) 
)
 
)
freescenebitmaps()
gc light:true
destroyDialog rrh_rollout
createDialog rrh_rollout 320 300 100 100
rrh_rollout.update_history_display 100.0
)

nope – that looks like (and just tested) it should work just fine. Did you re-evaluate the scripts after you edited them (not just saved). Did you try replacing the toolbar button(s) (or however you use the macroscripts)?

I’m attaching a zip file with the renders I rendered out to check what would happen (presumably you’ll have to extract them with file/date tags intact or else getFiles() will grab the files out of order; each image has been frame stamped).

Beyond that – perhaps your problem isn’t the same one I tackled? As I understood it, the problem was that if you rendered a number of frames, you may run into the problem that if your spinner value says ‘10’, it’s not actually loading the 10th image you rendered but the 9th. Is that a correct description of the problem you were/are seeing? If not – can you elaborate on the problem?

yea that’s correct.

I copied your images into the history folder. The history browser says theres 13 images. #1 displays “0f”, #2 displays “9f”, #3 displays “10f”, then #6 displays “1f” etc

I noticed in the ini files that your using max5. maybe its a max9 only bug. I’m also using dual monitors so maybe the script is getting confused? meaning its using the wrong monitor for the mouse positions for the progress bar or something?

I edited the script in notepad, saved it then went to max and ran the script.

2 Replies
(@bobo)
Joined: 11 months ago

Posts: 0

Just came back from Hellboy II and it is almost 1 am here, so I am going to bed, but will take a closer look (and probably cringe ;)) tomorrow.

(@zeboxx2)
Joined: 11 months ago

Posts: 0

The file date/time indices were probably not extracted correctly; or the files were written out asynchronously.

Try with this script:


myText = text()
addModifier myText (mesh_select())
for i = 1 to 20 do (
	myText.text = i as string
	-- drat, getLastRenderedImage() doesn't work with render(), crashed RHistory.
	max quick render 
)

Basically it makes a text shape that shows up when rendering and counts up from 1 to 20. Enable RHistory before running the above code, then view RHistory – should be fine.

Tested the above with the code you pasted in Max 9

Seems doubtful – then you would also get wrong feedback in the progressbar itself.

Try with the above code that should write out files in the correct sequence; if that still fails, check for Bobo’s major rewriting of the code tomorrow

The problem is this:

When this was written back in 2002/2004, I was running FAT32, which returns files in creation order as opposed to NTFS which returns files in alphabetical order. Thus, I never saw the problem before because it was returning the files correctly on the machine I wrote it on.

Now it does
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__1.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__10.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__2.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__3.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__4.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__5.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__6.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__7.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__8.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__9.rpf”

which is obviously the cause for the 10th file to appear second.

I will simply include a large leading zeroes prefix to the number to align them correctly, so it would look like

“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00001.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00002.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00003.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00004.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00005.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00006.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00007.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00008.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00009.rpf”
“C:\Program Files\Autodesk\3ds Max 2008\previews\renderHistory\RRH__00010.rpf”

after a sort call.

The alternative would be to add some sorting code to deal with the old numbering in a new way by collecting the number strings, converting to numbers, doing an indexed sort and using that. I might do both for backwards compatibility…

ooooh… why yes, I -am- running FAT32 on this thing

eyes the craziness that is NTFS

Should the render history basically hold an actual render history file that refers to the files directly? Essentially an IFL, if you will?

I made all changes I mentioned, including adding 6 digits with leading zeros and using qsort() for backwards compatibility so now it should both create better file names and sort the old files based on their numbering, with zeros or not.
This also improves the handling of deleted frames – if you delete frames in the middle of the numbering, the next rendering will be stored with the highest currently available number plus one. Previously, it had some ugly iterative code based on the number of files found and whether the corresponding file existed or not. I was glad to kick that code out
I also fixed the RAM Player option to sort using the same code.

There might still be issues, please report them here.

Well, I don’t trust a single file. The way it is now, copying the history around between machines would be easy as the “list” is collected on the fly… Two IFLs are created when pressing the RAM Player button, but they are temp. files, not the main storage.

Thanks ZeBoxx2 for the help and the script. I used it to test Bobo’s new script.

Bobo thanks a lot for fixing the script! Images are now displayed in the correct order. There are a few major bugs when deleting images though. When I press the delete button it deletes the wrong file, it does not delete the .ini file and sometimes after deleting a file and then making a new render the script does not save the new render with the next highest image #. It get’s saved as one of the missing image #s.

Edit – hmm. I was going write the steps required to execute the bug but… It seems so be working fine now? I tried your updated script last night and if I remember correctly the file names were “RRH__1.rpf” and didn’t have zeros. But now this morning I can’t seem to re-create the bug and the file names are now “RRH__000001.rpf”

hehe must have been user error or something…or the script wasn’t refreshed properly in max…? sorry :banghead:

Page 1 / 2