Network Blender

I wasn’t sure which forum area to put this in so I put this here, out of interest, has a script or version of blender to allow two people on different computers to work on the same file at once ever been made?

If it doesn’t exist does anyone know how you would go about making one?

Should be pretty easy to set up a xml-rpc client/server model in 2.5 to send the commands between the different blender instances with a little python magic since the whole macro/last operator thing is built in.

Or at least that’s what I’d try.

So I take nobody has made it?

You’re looking for something like OpenCanvas, but for Blender, correct? If so, then I think you can safely interpret what people have said up-thread as “no.” It would have been very difficult to code something like this for pre-2.5 Blender, as far as I know. Since the python API is being completely rewritten for 2.5, it might be possible to do now, but it would require some smart coding to make sure that the program state is maintained between both clients. If you have a compelling use-case for such a feature that’s shared by many in the community, you might be able to get a developer onboard. I’m not sold on the return on investment, though…

You say pre 2.5 like its available, it isn’t yet is it?

I think that should fulfill your needs.
It’s official too!

I don’t think anyone’s worked on that for a long time.

Duo, the developers have been working on 2.5 in the public subversion repositories for months. You can download working preview/alpha builds from (be aware these are definitely alpha – a lot of features that will be implemented have not yet been implemented, and there are bugs). I’m not a developer, but I do follow the development. The concepts (modifiers, etc) are pretty firmly established, and a lot of the APIs are… well, I wouldn’t stay stable, quite, but you can get an idea. It’ll be a few more months at least before it’s out of beta, but an enterprising developer could start working on the necessary code to synch UIs/scene data over the network, and maybe be done not too long after the “official” release.

Disclaimer: I haven’t looked at exactly how to do what you’re asking, but it doesn’t seem impossible. I don’t have any desire to write it myself but maybe you can either find someone who has both skill and desire, or learn the skills yourself (since you have the desire already)!

I think, unless you clearly separate your work, like developing different parts of a script which are to get assembled together at a later stage, you will have AT LEAST sharing problem(s), provided both persons work on the same shared .blend file in LAN. I dont think it is possible over the Internet due to the same reason… :eek:

Since .blend files are almost 100% datablocks, they practically work as databases. Therefore, at the user there will be a replica opened (in a situation of a ,blend at a shared place. Once opened, the file should be locked… If NOT locked => another user can open he file too and paint the cube, for example, in pink, while you’re painting it in green. Obviously, the past to save the file will save its modifications for longer time :rolleyes:

The trick would be to implement something like OpenCanvas (for raster art) or SubEthaEdit (for text) where all clients’ local instances of Blender keep the state synchronized in realtime by transmitting what edits are made to all the other clients’ instances. E.g: Client #1 transmits to everyone else, “I select vertices a,b, and c and translate them by vector (x,y,z)” or something; other clients would have to receive this message and update their own state to match.

I can see a way to do it, but the only way i can think of is to aqquire a list of every object in the scene, get a list for each of them containing thier attributes and properties
and send it to the other person, who has a script at the other end which update thier version in real-time, Is that the right way to go about it, or am I barking up the wrong tree?

This is actually a project which interests me (but I don’t have the time to devote to it). My thinking was that you could access blender’s new history (which should contain all the information to replicate a command) and then send that along.

The script could differentiate between new commands to send and commands which were done by the local user, or commands which were done by the remote user, but already duplicated in two ways:

  1. Add some sort of mark to blender’s entry in the history log for commands which have already been processed.
  2. Keep an array which has the same length of the history buffer, mark slots in the same way (so if send[0] is 0, then history[0] was done by local user and already sent on), and pop and append items to the list such that it syncs up with the official history list.

I’m not sure how much detail the history log keeps track of, and my 2.5 build isn’t working (that annoying python error again), so I can’t verify that any of what I just said is reasonable, but it might give somebody ideas.

I’ll look into that thanks

verse does the same thing.
try it and see, you don’t really have anything to lose

Yeah, Verse-Blender works great and fun for modelling on-line in the OpenCanvas fashion. From what i recall though, the project got frozen on that 2.37a version, because it would’ve been too hacky to implement in full. There are rumors that 2.50 would allow for the verse support project to get restarted and implemented properly. That, and there are plans for a net-render function, to allow hooking up renderfarms. All i can say is that the future is going to be exciting:)

I’ve just tried verse, it’s really amazing, you can make a test with two running blender copies on the same machine !; hope to see more collaborative tools on future blender releases :smiley:

When i start the verse server tool i get an error:
Verse Server r5p0 by Eskil Steenberg <>
Loaded 512-bit host ID key successfully
v_network: Failed to bind(), code 98 (Address already in use)

What can i do?
I think this could be really awesome!

See if you can change the port number which verse uses to communicate. Set it to a very high arbitrary number (such as 3456).

J09: Thanks, it is working now. This is really nice!