[X3D-Ecosystem] Loading into X3DPSAIL (for Maya and Blender)
John Carlson
yottzumm at gmail.com
Tue Jan 27 11:38:50 PST 2026
Note, W index is 0 in quaternions. Could be critical!
John
To export Non-Linear Animation (NLA) with detailed
*X, Y, Z coordinates* (and other channels) as XML in Blender (2026), you
must iterate through the fcurves of each action linked to an NLA strip.
In Blender
<https://blenderartists.org/t/list-all-keyframes-of-an-action/632353>,
transform data is stored in fcurves. Each curve has a data_path(e.g.,
"location") and an array_index (0 for X, 1 for Y, 2 for Z).
XML Export Script with Keyframe Data
This script iterates through all objects, their NLA tracks, and every
individual keyframe point within those tracks.
python
import bpyimport xml.etree.ElementTree as ET
def export_nla_detailed_xml(filepath):
root = ET.Element("BlenderNLAExport", date="2026-01-27")
for obj in bpy.context.scene.objects:
if not (obj.animation_data and obj.animation_data.nla_tracks):
continue
obj_node = ET.SubElement(root, "Object", name=obj.name)
for track in obj.animation_data.nla_tracks:
track_node = ET.SubElement(obj_node, "Track", name=track.name)
for strip in track.strips:
if not strip.action:
continue
strip_node = ET.SubElement(track_node, "Strip", {
"name": strip.name,
"action": strip.action.name,
"start": str(strip.frame_start),
"end": str(strip.frame_end)
})
# Iterate through F-Curves for X, Y, Z and other data
for fcu in strip.action.fcurves:
channel_node = ET.SubElement(strip_node, "Channel", {
"path": fcu.data_path,
"index": str(fcu.array_index) # 0=X, 1=Y, 2=Z
})
# Extract every keyframe point (Time, Value)
for kp in fcu.keyframe_points:
ET.SubElement(channel_node, "Keyframe", {
"frame": str(round(kp.co[0], 4)),
"value": str(round(kp.co[1], 4)),
"interpolation": kp.interpolation
})
# Save with formatting
tree = ET.ElementTree(root)
ET.indent(tree, space=" ")
tree.write(filepath, encoding="utf-8", xml_declaration=True)
print(f"Detailed NLA XML exported to: {filepath}")
# Usage
export_nla_detailed_xml("C:/path/to/animation_data.xml")
Use code with caution.
Key Technical Notes
- *Coordinate Mapping:* In the keyframe_points property, kp.co[0] is the
frame number (time), and kp.co[1] is the actual value (e.g., location in
meters or rotation in radians).
- *Array Indices:*
- *Location/Scale:* 0 = X, 1 = Y, 2 = Z.
- *Rotation (Quaternion):* 0 = W, 1 = X, 2 = Y, 3 = Z.
- *Local vs. Global:* NLA strips store *local* action data. If you move
an NLA strip in the timeline, the kp.co[0]values do *not* change
automatically. To get the "world" frame, you must add the strip's
frame_start to the keyframe's time.
- *Baking for Complex Data:* If your animation uses *Constraints* or
*Drivers*, the keyframes won't exist in the fcurves directly. You must
use Bake Action first to convert these into raw keyframes before running
the script.
Would you like to include *bone hierarchy data* in the XML as well, or is
object-level transform data sufficient?
On Tue, Jan 27, 2026 at 1:19 PM John Carlson <yottzumm at gmail.com> wrote:
> 1. Object Parent/Child Hierarchy
> To traverse the parenting structure (e.g., a car body with child wheels),
> use a recursive function that accesses object.children.
> python
>
> import bpy
> def traverse_objects(obj, depth=0):
> print(" " * depth + obj.name)
> for child in obj.children:
> traverse_objects(child, depth + 1)
> # Start from root objects in the scene (objects without parents)roots = [o for o in bpy.context.scene.objects if not o.parent]for root in roots:
> traverse_objects(root)
>
> Use code with caution.
> 2. Collection Hierarchy
> To traverse the organizational structure of collections in the Outliner,
> use a similar recursive approach on collection.children.
> python
>
> import bpy
> def traverse_collections(col, depth=0):
> print(" " * depth + col.name)
> # Perform actions on objects within this collection
> for obj in col.objects:
> print(" " * (depth + 1) + f"Object: {obj.name}")
>
> # Recurse into sub-collections
> for child in col.children:
> traverse_collections(child, depth + 1)
> # Start from the Scene's Master Collection
> traverse_collections(bpy.context.scene.collection)
>
>
>
> On Tue, Jan 27, 2026 at 1:16 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> Well, just asked Google, duh!
>>
>> The most prominent top-level data-block types, which can be accessed
>> directly from bpy.data, include:
>>
>> - *bpy.data.objects*: Contains all Object instances in the scene
>> (meshes, cameras, lights, etc.).
>> - *bpy.data.scenes*: Contains all Scenes.
>> - *bpy.data.collections*: Contains all Collections (used to organize
>> objects).
>> - *bpy.data.meshes*: Contains mesh data-blocks.
>> - *bpy.data.materials*: Contains material data-blocks.
>> - *bpy.data.images*: Contains loaded images.
>> - *bpy.data.armatures*: Contains armature data.
>> - *bpy.data.curves*: Contains curve data.
>> - *bpy.data.worlds*: Contains world data.
>>
>>
>> Traversing all hierarchies in Blender—spanning objects, bone chains,
>> animation data, and node trees—requires a recursive Python approach using
>> the
>> bpy module to navigate bpy.data and parent-child relationships.
>> Here is a comprehensive guide on how to traverse these hierarchies,
>> categorized by data type.
>> 1. Scene Object Hierarchy (Parents & Children)
>> To traverse all objects, including their child objects (recursive
>> structure), use the following script.
>> python
>>
>> import bpy
>> def traverse_objects(obj, level=0):
>> print(" " * level + "Object:", obj.name, "Type:", obj.type)
>>
>> # Traverse children
>> for child in obj.children:
>> traverse_objects(child, level + 1)
>> # Start traversal from root objects (objects with no parent)for obj in bpy.context.scene.objects:
>> if obj.parent is None:
>> traverse_objects(obj)
>>
>> 2. Armature Bone Hierarchy (Rigging)
>> Bones exist within armature data. You must iterate through the bonescollection,
>> focusing on root bones (those without a parent) and navigating down.
>> python
>>
>> import bpy
>> def traverse_bones(bone, level=0):
>> print(" " * level + "Bone:", bone.name)
>> # Traverse children
>> for child in bone.children:
>> traverse_bones(child, level + 1)
>> # Assumes an Armature object is selectedarm_obj = bpy.context.active_objectif arm_obj and arm_obj.type == 'ARMATURE':
>> # Use bone.parent is None to find root bones
>> for bone in arm_obj.data.bones:
>> if bone.parent is None:
>> traverse_bones(bone)
>>
>> 3. Animation Hierarchy (Actions & Keyframes)
>> Animations are stored in bpy.data.actions and linked to objects via
>> animation_data. To traverse keyframes within an action:
>> python
>>
>> import bpy
>> # Traverse all actions in the blend filefor action in bpy.data.actions:
>> print("Action:", action.name)
>> # Traverse F-Curves (animation channels)
>> for fcurve in action.fcurves:
>> print(" FCurve:", fcurve.data_path, "Array Index:", fcurve.array_index)
>> # Traverse keyframe points
>> for keyframe in fcurve.keyframe_points:
>> print(" Keyframe:", keyframe.co)
>>
>> 4. Node Hierarchy (Shader/Geometry Nodes)
>> Nodes are structured within tree structures. You can traverse node trees
>> in material nodes or geometry nodes.
>> python
>>
>> import bpy
>> def traverse_nodes(node_tree):
>> if node_tree is None: return
>> print("Node Tree:", node_tree.name)
>> for node in node_tree.nodes:
>> print(" Node:", node.name, "Type:", node.type)
>> # Check for node groups
>> if node.type == 'GROUP' and node.node_tree:
>> traverse_nodes(node.node_tree)
>> # Example: Traversing active object's material nodesobj = bpy.context.active_objectif obj and obj.material_slots:
>> for slot in obj.material_slots:
>> if slot.material and slot.material.use_nodes:
>> traverse_nodes(slot.material.node_tree)
>>
>>
>>
>> On Tue, Jan 27, 2026 at 1:06 PM John Carlson <yottzumm at gmail.com> wrote:
>>
>>> Aaron, it would be helpful to me to get the top-level Blender objects
>>> that hold the scene:
>>>
>>> The object hierarchy.
>>> The actions, key frames and animations.
>>> The node graph roots (materials)
>>> Anything else you can think of relevant to X3D.
>>>
>>> Thanks,
>>>
>>> John
>>>
>>> On Tue, Jan 27, 2026 at 12:17 PM John Carlson <yottzumm at gmail.com>
>>> wrote:
>>>
>>>> I am now considering traversing the Blender object hierarchy and
>>>> exporting “Blender XML,” such that I can translate Blender object
>>>> structures directly to XML. Then I will work towards translating X3D XML
>>>> to Blender XML for loading using Blender XML examples, and write a Blender
>>>> XML import for Blender. Maybe I should use JSON? What extension
>>>> should I use?
>>>>
>>>> Somehow this seems very brittle.
>>>>
>>>> H**k,
>>>>
>>>> John
>>>>
>>>> On Tue, Jan 27, 2026 at 11:16 AM John Carlson <yottzumm at gmail.com>
>>>> wrote:
>>>>
>>>>> I’m totally on board with that for X3D encodings in general, but I’m
>>>>> currently narrowing down to using an X3D Python “encoding,” not a binding.
>>>>>
>>>>> On Tue, Jan 27, 2026 at 10:39 AM Bergstrom, Aaron <
>>>>> aaron.bergstrom at und.edu> wrote:
>>>>>
>>>>>> All,
>>>>>>
>>>>>>
>>>>>>
>>>>>> I keep a python dictionary that I pass a node type to in the form of
>>>>>> a string, and it returns an x3d.py node object.
>>>>>>
>>>>>>
>>>>>>
>>>>>> I keep a custom version of x3d.py to which I’ve added CGE, X_ITE, and
>>>>>> X3DOM (sort of) node classes, so I can also export experimental nodes such
>>>>>> as a CGE Skin, X_ITE material extensions, or X3DOM CommonSurfaceShader.
>>>>>>
>>>>>>
>>>>>>
>>>>>> The dictionary includes all of the X3D 4.0 node types, as well as a
>>>>>> variety of pending 4.1 nodes and browser specific nodes as described above.
>>>>>>
>>>>>>
>>>>>>
>>>>>> It basically looks like this:
>>>>>>
>>>>>>
>>>>>>
>>>>>> def instantiateNodeFromString(x3dType):
>>>>>>
>>>>>> x3dNodeMapping = {
>>>>>>
>>>>>> ####################################### A
>>>>>>
>>>>>> 'AcousticProperties':AcousticProperties,
>>>>>>
>>>>>> 'Analyser':Analyser,
>>>>>>
>>>>>> 'Anchor':Anchor,
>>>>>>
>>>>>> 'AnisotropyMaterialExtension':AnisotropyMaterialExtension, #
>>>>>> X_ITE - glTF extension
>>>>>>
>>>>>> ***snip***
>>>>>>
>>>>>> 'VolumeData':VolumeData,
>>>>>>
>>>>>> 'VolumeEmitter':VolumeEmitter,
>>>>>>
>>>>>> 'VolumePickSensor':VolumePickSensor,
>>>>>>
>>>>>> ####################################### W
>>>>>>
>>>>>> 'WaveShaper':WaveShaper,
>>>>>>
>>>>>> 'WindPhysicsModel':WindPhysicsModel,
>>>>>>
>>>>>> 'WorldInfo':WorldInfo
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>> return x3dNodeMapping[x3dType]()
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Aaron
>>>>>>
>>>>>>
>>>>>>
>>>>>> *From:* John Carlson <yottzumm at gmail.com>
>>>>>> *Sent:* Tuesday, January 27, 2026 1:30 AM
>>>>>> *To:* Don Brutzman <don.brutzman at gmail.com>
>>>>>> *Cc:* Bergstrom, Aaron <aaron.bergstrom at und.edu>; X3D Ecosystem
>>>>>> public discussion <x3d-ecosystem at web3d.org>
>>>>>> *Subject:* Re: Loading into X3DPSAIL (for Maya and Blender)
>>>>>>
>>>>>>
>>>>>>
>>>>>> I think that Aaron was writing something that converted class names
>>>>>> into X3D Python classes (and to scene graph objects?), but I haven’t heard
>>>>>> much about it or if he imports X3D directly into Maya or some X3DPSAIL
>>>>>> derivative (and then to Maya). I am will to work on something that
>>>>>> generates a XML Python loader (from X3DUOM), just realize I haven’t decided
>>>>>> on a single loader class or multiple loader classes. Opinions? At least I
>>>>>> can take a first crack at it. I probably won’t use AI at all. I’ll study
>>>>>> the structure of the Java version, but I do prefer ElementTree over DOM for
>>>>>> this use case.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Likely, it will be an adjunct to X3DPSAIL.
>>>>>>
>>>>>>
>>>>>>
>>>>>> I think the best test for reliability is to do roundtrip testing on
>>>>>> the archive, which will also test XML output.
>>>>>>
>>>>>>
>>>>>>
>>>>>> John
>>>>>>
>>>>>> On Mon, Jan 26, 2026 at 6:01 PM Don Brutzman <don.brutzman at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Yes "X3DLoaderDOM.java (load DOM into scenegraph)" was difficult to
>>>>>> write, requires manual coding and time-consuming to debug. It works and
>>>>>> the generator for it is checked into open source as a key part of X3DJSAIL.
>>>>>>
>>>>>> -
>>>>>> https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/X3DLoaderDOM.html
>>>>>> - (on web3d.org but direct access is blocked, library not is
>>>>>> version control since it is large and changeable; copy attached)
>>>>>>
>>>>>> The PythonX3dSmokeTests.py program builds a lot of snippets of python
>>>>>> scene graph. The same approach might be used to walk any X3D tree and
>>>>>> construct a python scene graph. If such code works, and is reliable, we
>>>>>> can promote that code and integrate it as part of the x3d.py distribution.
>>>>>>
>>>>>> -
>>>>>> https://www.web3d.org/x3d/stylesheets/python/examples/PythonX3dSmokeTests.py
>>>>>>
>>>>>> all the best, Don
>>>>>>
>>>>>> --
>>>>>>
>>>>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>>>>>
>>>>>> Relative Motion Consulting https://RelativeMotion.info
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Jan 26, 2026 at 2:54 PM John Carlson <yottzumm at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Thanks for fixing the TODO to add XML!
>>>>>>
>>>>>>
>>>>>>
>>>>>> I have tried to add Python code which loads JSON into an X3DPSAIL
>>>>>> scene graph and failed. I have zero confidence in my ability to load stuff
>>>>>> into in memory scene graphs, preferring to load things into DOM first.
>>>>>> This applies to much of my work, including JSON validation with X3D XML
>>>>>> schema.
>>>>>>
>>>>>>
>>>>>>
>>>>>> I am attempting to load JSON into a CGE scene graph, but there’s no
>>>>>> real evidence that it works yet. I have a mostly working DOM solution.
>>>>>>
>>>>>>
>>>>>>
>>>>>> I realize X3DLoaderDOM.java (load DOM into scenegraph) is a lot of
>>>>>> work, and if this was mostly automated, please tell us how if it’s
>>>>>> not a national secret. If we have that, then Python might be a lot easier!
>>>>>>
>>>>>>
>>>>>>
>>>>>> My overall plan is to push JSON things into DOM for loading, but
>>>>>> Aaron might have a good solution for all encodings!
>>>>>>
>>>>>>
>>>>>>
>>>>>> I am reminded how Xj3D translated XML into a VRML scene graph. Not
>>>>>> ideal, but.
>>>>>>
>>>>>>
>>>>>>
>>>>>> My priorities are first CGE, then Blender import. I realize my
>>>>>> priorities change a lot. If we had a way to export into Blender from
>>>>>> X3DPSAIL, this would make working on X3DPSAIL import much more attractive.
>>>>>> Easier said than done.
>>>>>>
>>>>>>
>>>>>>
>>>>>> John
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Jan 26, 2026 at 3:51 PM Don Brutzman <don.brutzman at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Regarding C/C++/C# open source, no such library has yet been shared.
>>>>>> As with our autogenerated Java and Python libraries, these are strong
>>>>>> candidates for autogeneration once proper design patterns are written.
>>>>>> Once written, library testing using the X3D Example Archives would be
>>>>>> essential for success and straightforward to perform.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Regarding X3D loaders in Python for X3DPSAIL, none has been written
>>>>>> yet. Please be aware that .x3d files are written in valid XML. Refreshed
>>>>>> TODO list:
>>>>>>
>>>>>> - Python X3D Package x3d.py, X3D Python Scene Access Interface
>>>>>> Library (X3DPSAIL)
>>>>>> - The x3d.py Python X3D Package supports programmers with Python
>>>>>> interfaces and objects for standards-based X3D programming, all as open
>>>>>> source.
>>>>>> - https://www.web3d.org/x3d/stylesheets/python/python.html#TODO
>>>>>>
>>>>>> 🔖 <https://www.web3d.org/x3d/stylesheets/python/python.html#TODO>
>>>>>> TODO
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Lots! Much progress continues. For a release-summary log, please see *history
>>>>>> log for this page*.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>>
>>>>>> - *TODO: clean up x3d.html documentation autogenerated by pydoc.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>> - *TODO: We need a "Getting Started" tutorial on this page.
>>>>>> This is a good opportunity... who wants to help?!
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>> - *TODO: utility support for loaders from XML (.x3d or .xml),
>>>>>> ClassicVRML (.x3dv), VRML97 (.wrl), and JSON (.json or .x3dj) files.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>> - *TODO: distribution support for Jupyter Notebook (initial
>>>>>> example works), Apache Zeppelin notebook, Anaconda distribution of Python,
>>>>>> and other data-science platforms.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>*
>>>>>>
>>>>>> To facilitate library review, I was recently able to autogenerate
>>>>>> Python documentation for x3d.py using the pydoc tool.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> - *https://www.web3d.org/x3d/stylesheets/python/x3d.html*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Please note that each X3D node has the following methods listed.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Methods defined here:
>>>>>> *HTML5*(self, indentLevel=0)
>>>>>> Provide HTML5 output serialization using modified
>>>>>> XML encoding with no singleton self-closing elements.
>>>>>> *JSON*(self, indentLevel=0, syntax='JSON')
>>>>>> Provide *X3D*
>>>>>> output serialization using JSON encoding (usable for .json file suffix).
>>>>>> *VRML*(self, indentLevel=0, VRML97=False)
>>>>>> Provide *X3D*
>>>>>> output serialization using VRML encoding (usable for .x3dv or .wrl file suffix).
>>>>>> *XML*(self, indentLevel=0, syntax='XML')
>>>>>> Provide Canonical *X3D*
>>>>>> output serialization using XML encoding (usable for .x3d file suffix).
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Am thinking the HTML5 method is no longer needed, this was written
>>>>>> when X3DOM had trouble with self-closing elements.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Thanks for all efforts that might improve x3d.py.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> all the best, Don
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> -- <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Relative Motion Consulting *https://RelativeMotion.info*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> On Sun, Jan 25, 2026 at 4:18 AM John Carlson <*yottzumm at gmail.com*>
>>>>>> wrote: <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> I guess I didn't send this earlier.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> I did see the standards progress page. For C/C++/C#, are any
>>>>>> libraries open source? I’m thinking COIN 3D, OpenInventor, H3D. Maybe
>>>>>> others. I see there’s an ISO documentation for each language, but
>>>>>> apparently the standard isn’t open source???? I’m looking for
>>>>>> opportunities for X3DJSONLD serialization. OpenInventor (COIN 3D) looks
>>>>>> super complex.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> For X3DPSAIL, can you point me at an example of loading XML or DOM
>>>>>> into a scenegraph? Maybe I missed something???? I’m looking for something
>>>>>> like CreateX3DFromString()??? I realized I can create Python from XML,
>>>>>> just like my tools can go from JSON to DOM to Python; but my toolchain
>>>>>> isn’t Python. Running stylesheets in Python would be a great example.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Looking here:
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>>
>>>>>> *https://www.web3d.org/x3d/stylesheets/python/examples/PythonX3dSmokeTests.py*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> On Sun, Jan 25, 2026 at 12:19 AM Don Brutzman <
>>>>>> *don.brutzman at gmail.com*> wrote:
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Standards planning status appears on the following page.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> - *X3D Standards Progress | Web3D Consortium*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>> - *https://www.web3d.org/x3d/progress*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Scroll past overview prose to find links to each version completed,
>>>>>> in progress and planned.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> all the best, Don
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> -- <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Relative Motion Consulting *https://RelativeMotion.info*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> On Fri, Jan 23, 2026 at 7:44 PM John Carlson via X3D-Ecosystem <
>>>>>> *x3d-ecosystem at web3d.org*> wrote:
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> A quick search reveals this page:
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> *https://wiki.web3d.org/wiki/index.php/X3D_Python_Language_Binding*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> This link on the page is dead?
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> *https://github.com/Web3DConsortium/X3D/tree/master/ISO-IEC%2019777*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>>
>>>>>> Btw: both 19776-4 and 19776-5 are titled JSON encoding?????
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> ==================================
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> I could start writing a Python binding standard? Except we have
>>>>>> three versions, one based on GraalPy/X3DJSAIL and one based on “normal”
>>>>>> python-X3DPSAIL, and if course H3D, which AFAIK, has C++ underneath? I
>>>>>> believe CGE may also have plans for Python.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> GraalPy examples are here:
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>>
>>>>>> *https://github.com/coderextreme/X3DJSONLD/tree/master/src/main/graalpy/net/coderextreme*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Python examples are on the X3D archives, some duplicated here:
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>>
>>>>>> *https://github.com/coderextreme/X3DJSONLD/tree/master/src/main/python/net/x3djsonld/data*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> It seems like the pure python implementation (pythonic) has more sway
>>>>>> and implementations, so I am willing to capitulate, even though, in my
>>>>>> experience, X3DJSAIL generates better JSON! It was never really my idea to
>>>>>> go with a pure python version though, but I don’t know how to install
>>>>>> GraalPy in Blender! I will pay anyone $100 if they can make blender run
>>>>>> GraalPy for import/export addons on Windows! I’m guessing X3DPSAIL can run
>>>>>> stylesheets as well? Perhaps it’s time to convert stylesheets to pure
>>>>>> Java, with a stylesheet of course!
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> As far as support, GraalPy is supported by Oracle, and Python is
>>>>>> supported by Microsoft (Does Guido still work there?).
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> It would be very nice to have a renderer for X3DJSAIL and X3DPSAIL
>>>>>> (see previous post)!
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Has anyone used Xj3D from GraalPy?
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> ==================================
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> On Fri, Jan 23, 2026 at 8:52 PM John Carlson <*yottzumm at gmail.com*>
>>>>>> wrote: <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Apologies, I just noticed I meant X3D python binding.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> On Fri, Jan 23, 2026 at 8:50 PM John Carlson <*yottzumm at gmail.com*>
>>>>>> wrote: <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> What’s the status of the Python encoding standard? Would my
>>>>>> participation help?
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> Instead of spending time on Blender currently, my thought is to go
>>>>>> back to developing an “X3D” JSON to CGE scenegraph converter, as that can
>>>>>> be developed beyond DOM loading. Does anyone know a good Pascal LLM? I
>>>>>> do find begin/end rather tedious.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> If there’s a lot of demand for a Blender HAnim export currently, I
>>>>>> will reconsider. Or X3D to glTF conversion.
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> John <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>> --
>>>>>> X3D-Ecosystem mailing list
>>>>>> *X3D-Ecosystem at web3d.org*
>>>>>> *http://web3d.org/mailman/listinfo/x3d-ecosystem_web3d.org*
>>>>>> <https://www.web3d.org/x3d/stylesheets/python/python.html>
>>>>>>
>>>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-ecosystem_web3d.org/attachments/20260127/f209565f/attachment-0001.html>
More information about the X3D-Ecosystem
mailing list