< Previous | Contents | Manuals Home | Boris FX | Next >
Scene
These are read only except as noted. See the additional condensed lists below for attributes related to the perspective, hold-prep, and fine-tuning panels.
.activeObj/.activeObject Object that is “active” within the scene.
Read/Write. Writing makes some UI elements adjust properly also, do this after changing a shot.
.activeRoom The name of the active room in the user interface. Read/write, but note that changes occur after the script has terminated. In the meantime, the pending change will be listed as the activeRoom. To see the actual current room name again, set the active room back to the empty string “”, then it will report the underlying current name. Detached floating scripts will make the change soon after the activeRoom is changed.
.ambientColor Ambient illumination color for the perspective view(s)
.appearFlags Bit collection controlling appearance of trackers in various viewports, see the
View/Tracker Appearance menu. Subject to periodic change, determine experimentally.
.AprilTagDetector(family#) Creates and returns an AprilTag detector
object, configured to look for a specific tag family, 16H5 = 0, 25H9 = 1, 36H11 = 2, Cir21H7 = 3, Cir49H12 = 4, Cus48H12 = 5,
Std41H12 = 6, Std52H13 = 7. See the AprilTags section.
.ARGV List of command-line arguments to SynthEyes. See the section on Command- Line Arguments.
.autoClean Automatic tracker cleanup enabled or not.
.autoPlace Automatic auto-place enabled or not.
.axisMode SynthEyes scene axis-mode setting, which is not necessarily the same as the local axis mode used in the Sizzle environment.
.Beep() Beep alert sound on the computer
.branchName The current user-named branch name for Undo branching, ie via double-click in the multi-way branch selection dialog. Note that there is no Undo on this attribute itself!
.build SynthEyes build number, integer such as 1005
.burnInWhat Camera and Perspective view burn- in:0=frame number, 1=timestamp (if available, frame number if not), 2=timecode (if available, frame number if not).
.burnInWhen Camera and Perspective view, when to burn in, bits: 0=never, 1=perspective interactive, 2=preview movies, 4=camera view, 8=Save Sequence.
.cameraViewType Camera image view override, see it on the Feature Panel's Advanced dialog.
.CancellableCall(function_name, args…) Starts a cancellable background task
for long-running activities. This requires carefully structured code, see Cancellable Tasks.
.cleanupBadF Threshold for bad frames, or desired percentage, on the Tracker Cleanup panel.
.cleanupFarish Minimum required perspective shift to avoid being labeled as "far".
.cleanupFixes Bit mask of settings from the Tracker Cleanup panel.
.cleanupHiErr Allowable percentage bad frames.
.cleanupNetErr Threshold on allowable total error.
.cleanupShort Minimum number of required valid frames.
.cleanupShowing Bit mask of settings of things to show, from the Tracker Cleanup panel.
.ClearMRUexport() Clears the most-recently-used export list. See also .GetMRUexport() and .MRUexport
.ClearMRUfile() Clears the most-recently-used SNI file list.
See also .GetMRUfile() and .MRUfile.
.ClearMRUscript() Clears the most-recently-used-script list. See also .GetMRUscript() and .MRUscript
.ClearSelection() Unselect all trackers, meshes, objects, ... ie Edit/Clear Selection.
.clipboard Operating system’s clipboard, read/write
.clipXML XML-based clipboard used by graph editors for channel data (this is an XMLNode) R/W
.codePage Windows code page (GetACP). Zero on Mac.
R/O
.codeLanguage First preferred language on Mac. A localized name for the active code page on Windows. R/O.
.colorMaps Returns a list of color map names, for example to supply to a Choice selector in a script user interface.
.constrain Constrain checkbox on solver panel, R/W
.CreateDirectory(foldername) Create the specified directory, OK if it already
exists. Returns 1 if it was created, 0 if it already exists or couldn't be created (ambiguous).
.creatorID Unique identifier (string) of the user who initially created this scene. (Read only) See also .userID and .writerID
.editMesh Mesh being edited, or null if none. R/W.
.editMeshIndex 0-based index of the mesh being edited, or -
1. R/W.
.editNoteID Unique ID (string) of the note being edited in the Notes Editor, if any. R/W. The editor updates if the value is changed, and will close if the new value doesn't correspond to a note.
.EmptyXMLNode() Create a new empty XML node for manipulation and writing.
.Env(var) Fetch environment variable by name. Null if not defined.
.executable Name of the SynthEyes executable. Note that Scene.executable returns the name of the
.exe on Windows, the .app on macOS, and
the executable (which has no extension) on Linux.
.ExportABC(filename, argstr) Export the scene as an Alembic (ABC) file.
The single argument, argstr, contains a heavily-encoded string version of the control parameters for the exporter, see the Sizzle include file alembic.szl for details.
.exportAgain If the script is being run as a result of an “Export Again.” If so, Sizzle dialog overrides should probably be suppressed.
.ExportFBX(filename, argstr) Export the scene as a Filmbox (FBX) file, or
several other supported options, such as DXF and Collada DAE. The single argument, argstr, contains a heavily-encoded string version of the control parameters for the exporter, see the Sizzle include file fbxlib.szl for details.
.exportFile Export file name (r/w)
.exportMultiple String consisting of the multiple exports configured for the scene, separated by a vertical bar. The entry for each export consists of its name, plus an optional filename suffix or subfolder, separated from the exporter name by a semicolon and a space.
All data must be exact, no typos! (r/w)
.exportMultiplePref String consisting of the multiple exports preferences, separated by a vertical bar. The entry for each export consists of its name, plus an optional filename suffix or subfolder separated from the exporter name by a semicolon and space. All data must be exact, no typos! (r/w)
.exportType Export file type (r/w)
.exportUnits Export units: “in”, “ft”, “yd”, “mi”, “mm”, “cm”, “m”, “km”
.FindNewScripts() Places a request for a scan for new scripts, color maps, and lens presets. The actual scan will occur asynchronously sometime later, after the current script has finished executing.
.FlashSelection() Flash the selected trackers.
.FolderPref(i) Returns the folder preference setting for the given index: 1:BatchIn, 2:BatchOut, 3:Images, 4:Scene, 5:Imports, 6:Exports, 7:Previews, 8:Script, 9:Phase. See also the FolderPref object.
.ftuneAutomatic Fine-Tune Trackers parameter.
.ftuneKeySpacing Fine-Tune Trackers parameter.
.ftuneTrackerSize Fine-Tune Trackers parameter.
.ftuneTrackerAspect Fine-Tune Trackers parameter.
.ftuneUSearch Fine-Tune Trackers parameter.
.ftuneVSearch Fine-Tune Trackers parameter.
.GetMRUexport(i) Gets the i'th most-recently-used export type (human-readable name), where 1 is the most recently used, and increases from there, eventually returning an empty string. See also
.MRUexport.
.GetMRUfile(i) Gets the i'th most-recently-used SNI file, where 1 is the most recently used, and increases from there, eventually returning an empty string. See also .MRUfile.
.GetMRUscript(i) Gets the i'th most-recently-used script (human-readable name), where 1 is the most recently used, and increases from there, eventually returning an empty string. See also
.MRUscript.
.geoDirection Tracking direction for all geometry tracking in the scene. 0: forward, 1:backward. Note that changing the direction results in extensive rework on the lock keys!
.geoEffortFine The density used for all "fine" GeoH tracking in this scene.
.geoEffortReg The density used for all "regular" GeoH tracking in this scene.
.geoSlope Slope limit controlling how close to edge-on pixels can be and still be considered.
.holdMode Hold Region Tracker Prep setting.
.holdAllTrackers Hold Region Tracker Prep setting.
.holdAllTransitions Hold Region Tracker Prep setting.
.holdMinimumLength Hold Region Tracker Prep setting.
.holdFarOverlap Hold Region Tracker Prep setting.
.holdCombineFar Hold Region Tracker Prep setting.
.holdFraction Hold Region Tracker Prep setting.
.HTTP_Encode(string)* URL-encode the given string: preserves
ordinary characters, but changes space to + and other non-alphanumeric characters to a hexadecimal string.
.HTTP_Get(site, page)* Does a HTTP Get (web page access) to the
specified site’s page, returning the string returned from the web server (not intended for
retrieving binary data). The site should not
have any “http:” prefix.
.HTTP_Post(site, page, args)* Does an HTTP Post (send a web form) to the
specified site’s page, returning whatever string the server returns. Not suitable for binary data. The args must be an encoded string of name=value&name2=value2&name3=value3 etc, where the values have been URL- encoded. The site should not have any “http:” prefix.
.importFile During a Sizzle Import, the name of the file being imported ( note import file name, not openinp-type input file name).
.info Access to the user’s Description of the scene file on the File/File Info dialog, read/write.
.InvertUVMap(srcfnm, w, h, pxasp, dstfnm) Write the inverse of the RG-color-
coded distortion map stored in the file srcfnm to the file dstfnm. The new map will have the given width, height, and pixelaspect (which should be 1.0!). Note that inversion is slow and subject to edge effects, always use Shot.WriteRedistortImage() for SynthEyes- generated maps—this is only for externally supplied maps. The source map should have floating point channels; 16bit may have artifacts.
.IsScriptIgnored(fnm) Returns 1 if the filename (script, toolbar, etc)
is being ignored as a result of the tidy up scripts analysis, zero if it is not.
.JSONdecode(string) Produce a general potentially-nested Sizzle
object from a JSON-encoded string. Note that the special values true and false can be produced, see Builtin Variables.
.JSONencode(jsonobj) Produce a JSON-encoded string from a
general Sizzle object with nested generic lists.
.JSONread(filename) Read a JSON-encoded file, producing a
general Sizzle object with nested generic lists etc. In the event of an error, the result is null. Note that the special values true and false can be produced, see Builtin Variables.
.JSONwrite(fnm, obj) Write a potentially nested Sizzle object to a
file in JSON format. Returns 1 for success, 0 for failure. An error will be reported if there is an illegal component in obj (eg a Vector).
.keepWorldSize Keep the same world size while solving; don’t change it automatically. SynthEyes’s automatic world size update routine is designed to maximize numeric accuracy while solving, so turning that off should only be done carefully. Use Edit/Scene Settings to directly control scene-size-related numbers, rather than disabling the auto-update.
.lastSavedFileName This is the filename from when this file was
last saved and re-opened. It is NOT affected by any saves that took place during the current session. This is used to re-find files when the whole project moves.
.lensPresets Returns a list of lens preset names.
.level Return 0: Demo, 2: Pro. (Obsolete 1: Intro)
.LoadColorMap(fnm) Loads or reloads a colormap file, so that a
recently-written file is seen.
.LoadLens(fnm) Loads or reloads a lens preset file or image, so that a recently-written file is seen.
.macaddr The computer's reference MAC address, for use generating standard unique identifiers. Fields may separated by hyphens (Win) or colons (Mac/Linux).
.mapColor(colorvec, mapname) Maps a color, stored as an rgb vector,
through the named 3-D LUT — any currently- available map, independent of whether or not it is used for any shot. Result is also a vector. Uses floating-point path with nominal range of 0..1 for each channel, though out of range elements can be handled with the 1-D pre- maps, and any output range is permissible as set by the map. Use for tasks such as composing two maps.
.marketing The BorisFX marketing version of SynthEyes, ie a year plus fraction number like SynthEyes 2024.5. This is a string not a number, to accommodate whatever may come along.
See also .release and .version.
.matchFrameNumbers OBSOLETE. Use Shot.matchFrameNumbers.
Using this value will trigger an error. The match-frames value (read-only).
.maxiters Maximum solver iterations before moving on.
.meshDeDupeMode Mesh de-duplication mode for the current
scene. If -1, go to the preference instead.
.mon0Position The main monitor's top-left position in pixels (a point).
.mon0Size The main monitor's size in pixels (a point)
.mon1Position The secondary monitor's top-left position in pixels (a point), or (0,0) if none.
.mon1Size The secondary monitor's size in pixels (a point), or (0,0) if none.
.mon2Position The tertiary monitor's top-left position in pixels (a point), or (0,0) if none.
.mon2Size The tertiary monitor's size in pixels (a point) , or (0,0) if none.
.mon3Position The fourth monitor's top-left position in pixels (a point), or (0,0) if none.
.mon3Size The fourth monitor's size in pixels (a point), or (0,0) if none.
.MRUexport The most-recently-used exporter. When written, adds the new one to the head of the list and bumps the others down. See also
.ClearMRUexport and .GetMRUexport.
.MRUfile The most-recently-used SNI file. When written, adds the new one to the head of the list and bumps the others down. See also
.ClearMRUfile and .GetMRUfile.
.MRUscript The most-recently-used script. When written, adds the new one to the head of the list and bumps the others down. See also
.ClearMRUscript and .GetMRUscript.
.NewImage(format, wid, hei) Create a new RGB image with the specified
format (see Image.format for definitions). Write the new image's .hasAlpha to add an alpha channel if needed.
.NewPhase(kind) Creates a new solver phase of the specified kind. The kind can be either a small integer, from a phase.kind, or the exact phase name from the Add-phase menu. Since it's possible the names may change occasionally for clarity, using the number is preferred. Returns
-1 for invalid kind numbers.
.nMonitor The number of monitors on the current machine
.NPhaseKind() Number of phase kinds, ie the small integers run from 1 to NPhaseKind() inclusive, with the possibility of occasional gaps (returning -1 from NewPhase).
.OpenFile(prompt, starting, extensions) Opens a file-open selection dialog with
the given prompt (dialog title), starting filename and/or directory, and space- separated list of extensions. The operating system may ignore starting specifications that include solely a directory, unfortunately.
Unlike SaveFile, OpenFile requires that the file already exist. Returns the filename with full path and extension.
.OpenInBrowser(fnm)* Open the local file in the browser, taken
liberally to mean the program defined to open that type of file on the machine.
.OSbits 32 on 32-bit operating systems, 64 on Windows XP-64 or Vista-64. Note that 64-bit operation requires a 64-bit processor, a 64-bit Operating System, and a 64-bit license and installation of SynthEyes.
.onlySelected Track only selected trackers flag. R/W
.platform The machine, either “PC”, “LINUX”, “MACTEL” (for Intel-based Macs), or “MAC” for Apple Silicon (M1) Macs (originally, for PowerPC macs!)
.perspNear Near clipping distance. If zero, a default based on the world size will be used.
.perspFar Far clipping distance. If zero, a default based on the world size will be used.
.perspTrackerSize Tracker mark size. If zero, a default based on the world size will be used.
.perspKeyMarkSize Key mark size. If zero, a default based on the
world size will be used.
.perspCameraSize Camera mark size. If zero, a default based on the world size will be used.
.perspObjectSize Object gnomon size. If zero, a default based on the world size will be used.
.perspLightSize Light object size. If zero, a default based on the world size will be used.
.perspOrbit Orbit distance with nothing selected.
.perspMeshVertexSize Same as .perspBigVertexSize, obsolete!
.perspBigVertexSize Size in pixels for selected or edit-mesh
vertices. Initialized to the preference. If zero, an internal default will be used.
.perspSmallVertexSize Size in pixels for small normal vertices, such
as lidar. Initialized to the preference. If zero, an internal default will be used.
.perspInterOcular Default inter-ocular distance for stereo.
.perspVergeDistance Default vergence distance for stereo views
generated by the perspective view.
.playStart Start of playback range on time bar. Keep to a valid value for the active shot, less than the playEnd value. This means you will need to change Start or End first, depending on the situation.
.playStart1 ─ .playStart4 Starting frame for each of the four user-
defined playback ranges on the time bar.
.playEnd End of playback range on time bar. Keep to a valid value for the active shot, greater than the playStart value. This means you will need to change Start or End first, depending on the situation.
.playEnd1 ─ .playEnd4 Ending frame for each of the four user-
defined playback ranges on the time bar.
.playRate Relative playback rate multiplier, positive or negative. The value 0.001 means step-by- step.
.ReadDirectory(template) Takes a simple template like
"D:/Shots/Project1/*.png" and returns the list of file names matching the template. The file names do not have the directory, they do have the extension. There can be a single * in the template's filename, and the extension can be given or be a *. (Simple version of FindFirst/NextFile.) For more complex matching, do it directly.
.ReadFile(filename) Read the contents of a text file (with any file
extension) and return the contents as one long string. Returns null if the file can’t be opened or read.
.ReadImage(filename) Read the image from this filename, returning
the new Image object, or null if it can't be read.
.ReadJSON(filename) See JSONread()
.ReadLidar(filename)* Reads a Lidar (.xyz) file, returning either the
new mesh, or a null pointer if the file can not be read properly. Includes per-vertex color if present.
.ReadMesh(filename)* Reads a mesh from the given file (the file
extension is examined to determine its type), returning 1 on success, or 0 on failure.
.ReadOBJ(filename)* Reads an OBJ file, returning either the new
mesh, or a null pointer if the file can not be read properly.
.ReadSBM(filename)* Reads an SBM file, returning either the new
mesh, or a null pointer if the file can not be read properly.
.ReadXMLFile(filename) Reads an XML file from disk, creating and
returning a new XMLNode for examination and manipulation. Returns null if the file can not be read.
.ReadYAML(filename) See YAMLread()
.recalcSplines Set this to zero before making many changes to a camera or moving object's seed or solved paths (regular or FOV) to save time and reduce memory consumption.
.Redraw() Redraw the main user interface. Make sure the scene is in a consistent state before doing this.
.release Traditional SynthEyes NNNN release version, for example the number 2304. See also
.marketing and .version.
.releaseAsWritten The release as last written, ie as seen when this file was opened, before it was upgraded for the current release.
.ResetTimeBar() Resets the time bar to show the entire current shot.
.rootPhase Returns the root solver phase in the scene, or null if there is none.
.runTextures Rerun texture extractions after a solve.
.RunTrackersBwd() Run all "backwards" trackers at the current frame. Returns the total number of auto-keys that were set.
.RunTrackersFwd() Run all "forwards" trackers at the current frame. Returns the total number of auto-keys that were set.
.Save(filename) Saves the .sni file to this name, intended only for setting up batch operations, as it doesn’t save ancillary window positions etc. Use SaveDeferred for the full regular Save. Return value is 1 for success, 0 failure.
.SaveDeferred(yesorno) Enable(1) or disable(0) a deferred (posted)
File/Save at the completion of this script. Returns the old value of this flag. Use this for a full user-interface File/Save; it happens
asynchronously after the script has completed.
.SaveFile(prompt, starting, extensions) Opens a file-save dialog with the given
prompt (dialog title), starting filename and/or directory, and space-separated list of extensions. The operating system may ignore starting specifications that include solely a directory, unfortunately. Note that unlike OpenFile, this version allows you to select a non-existent file, and prompts for overwrite if it exists. Returns the filename, including full path and extension.
.scriptFile The file name of the running script
.ScrollSolverViewToEnd() Scrolls all solver views to their end, ie after
appending more text.
.selected The (single) thing selected in the user interface. Use typeof to determine what it is: SynMesh, SynObj, SynTrk, SynLite, SynExtraPt. Can be written to select some single thing, including setting it to null to unselect.
.selectedSpline Currently-selected spline, read/write.
.SetCompression(extn, initial) Show the output image/movie compression
setting dialog for files with the given extension extn, starting with the given initial setting. If the initial setting is blank or from a different extension, the most-recent settings for this extension will be used, or if unused in this run, its default settings (which is the standard sequence). Conveniently stored in a Hidden() UI field and launched from a Button().
.SetFolderPref(i, foldername) Set the preference for the given index (see
FolderPref) to the given foldername. See also the FolderPref object.
.SetFrame(frm) Sets the user-interface frame number to the specified frame. This is independent of the frame variable within Sizzle.
.shadowColor 24b RGB color of shadows in the perspective view, at full blending. Initialized from the preference.
.Shutdown(quietly) Immediately terminate running the script, and shut down SynthEyes. If the file has changed, a save dialog will appear, but if the numeric quiet argument is non-zero, the file will be marked as already-written, and no dialog will
appear. Running a script will often constitute a change, if it does something! The function will terminate any type of script, but only a tool script can close SynthEyes.
.Solve()* Solve entire scene, as per Go! button. No user interface or cancellation while running.
.solverOutput Long text string: all the messages produced during the last solve. WARNING: not thread- safe, don't read or write during a solve. Is this matters to you, let us know!
.sourceFile Source .sni file name
.spinalLockWeight Spinal Editing parameter.
.spinalDragTime Spinal Editing parameter.
.spinalReleaseTime Spinal Editing parameter.
.spinalUpdateFlag Spinal Editing parameter.
.splinesChanged Flag to force re-linking after a script has changed the roto-splines.
.startFrame Starting frame number preference
.statusLine Set (and read) the contents of the SynthEyes status line
.stopOnHPix Stop if the overall solver hpix value exceeds this at the completion of any pass.
.stopOnIters Stop if the solver iteration limit is hit.
.systemPath The path to \Program Files\SynthEyes or
/Applications/SynthEyes or the install folder on linux.
.threadsMax Maximum number of threads the processor can execute at once, ie either the number of cores, or twice the number of cores if hyper- threading is enabled.
.threadsUse The number of threads, as modified by SynthEyes’s Multi-processing preference. Can be zero if multithreading is disabled.
.TidyUpScripts(force) Runs the process to tidy up scripts. Its user
interface will appear if ignored files are detected, or if force is nonzero. Returns the number of ignored files ( after the dialog, if it opens).
.troubleMode What to do if the solver encounters trouble; see the tooltip for “Solving trouble mode” on the Advanced Solver Settings.
.txComputeTextures() Extract all textures in the scene. This is more
efficient than computing each texture separately. No cancellation is possible. Return: 0:fail, 1:pass.
.uniqueID A unique ID string (representing a 64-bit integer)
.UpdatePrepSetsFromFile(kind, fnm) Update all prepsets on all shots from
those stored in a .prp file earlier by SavePrepSetsToFile(). No new prepsets are created: only existing ones are updated. The prepsets are labeled as the specified kind: scene:0, imported:1, preference:2. Returns the number of affected prepsets, or -1 in the case of an error (such as unreadable file).
See also Shot.LoadPrepSetsFromFile().
.useAltColor Use the alternate color slot for trackers, see Tracker's .color, .primColor, .altColor
.userID Identifier for the current active user (independent of this scene!). The string is decimal representation of a 64-bit identifying number, for comparison to the other ID attributes: there is no other information to be found here. Read only. See also .creatorID and .writerID.
.userName User's login name.
.userPath Path to per-user SynthEyes folder, containing scripts, prefs, etc.
.version SynthEyes version string, something like 2023.5.1057. See also .release and
.marketing.
.viewFlags Bit collection with display controls, mostly from the main View menu. Subject to periodic revision, determine experimentally.
.ViewShift(args, fnm, compr) Fire up the ViewShift engine for use by
scripts. Contact support for a description of the args string if needed; fnm is the filename to be written, and compr is the compression specification for writing.
.writerID Identifier (string) for the user who last wrote this scene. (Read only). See also .userID and
.creatorID.
.WriteJSON(fnm, obj) See JSONwrite()
.WriteYAML(fnm, obj) See YAMLwrite()
.WriteTranslationTemplate(fnm) Writes a CSV template file for machine
translation of tooltips and menus. Should have a .csv extension.
.YAMLdecode(string) Produce a general potentially-nested Sizzle
object from a YAML-encoded string. Note that the special values true and false can be
produced, see Builtin Variables. Use JSON over YAML if possible.
.YAMLencode(jsonobj) Produce a YAML-encoded string from a
general Sizzle object with nested generic lists. Use JSON over YAML if possible.
.YAMLread(filename) Read a YAML-encoded file, producing a
general Sizzle object with nested generic lists etc. In the event of an error, the result is null. Note that the special values true and false can be produced, see Builtin Variables. Use JSON over YAML if possible.
.YAMLwrite(fnm, obj) Write a potentially nested Sizzle object to a
file in YAML format. Returns 1 for success, 0 for failure. An error will be reported if there is an illegal component in obj (eg a Vector). Use JSON over YAML if possible.
The following Scene attributes are also available to control the perspective settings panel. All are read/write. If the value is zero, a default will be used in the system, but the attributes will report the zero. See the panel and documentation for explanation.
.perspNear, .perspFar, .perspTrackerSize, .perspKeyMarkSize,
.perspCameraSize, .perspObjectSize, .perspLightSize, .perspOrbit,
.perspMeshVertexSize, .perspInterOcular, .perspVergeDistance
The following read/write Scene attributes correspond to the spinal solving
panel:
.spinalLockWeight, .spinalDragTime, .spinalReleaseTime,
.spinalUpdateFlag
The following read/write Scene attributes correspond to the hold preparation panel:
.holdMode, .holdAllTrackers, .holdAllTransitions, .holdMinimumLength,
.holdFarOverlap, .holdCombineFar, .holdFraction
The following read/write Scene attributes correspond to the fine-tuning
panel:
.ftuneAutomatic, .ftuneKeySpacing, .ftuneTrackerSize,
.ftuneTrackersAspect, .ftuneUSearch, .ftuneVSearch
©2024 Boris FX, Inc. — UNOFFICIAL — Converted from original PDF.