Action editor - saving (animation) actions is error prone and counter intuitive- DATA LOSS is too likely!
Open, NormalPublic

Description

System Information
any

Blender Version
Broken: 2.73

Short description of error
In blender when you duplicate an animation clip or add a new animation Action, that Animation is by default set to be purged when you close the blender scene.
In order to tell blender to keep the Action- the user has to toggle on a small "F" button every time he or she creates a new Action.
What makes matters even worse is that blender gives absolutely no warning message that it is going to purge your animation and the "F" button is really easy to overlook.

It has in facts caused me to lose a massive amount of work more than twice.
I posted about this at the forum to see if others have had the same problem and it turns out yes- they had lost data too:
http://blenderartists.org/forum/showthread.php?360573-Some-ideas-on-making-blender-better-for-Animators-Add-yours/page2

This is absolutely unacceptable design. No other software deletes your data when you close it- WITHOUT A WARNING. When you save your scene, you expect the application to save everything that is on the screen. The only case where you want the software to delete datablocks is when specifically told to by the user- with a confirmation message. Since blender does the opposite of that- people coming from other software will almost always lose their animation before learning that little detail about blender. Even after knowing about it, I keep making the same mistake. When there is time pressure it is easy to overlook this and lose ALL of your animation work.

This is really bad design here. I am not against data blocks. I am against how they are managed at the moment - the fact that the software is not transparent enough and it wipes your data without warning! It is doing something really bad without any warning and it is badly communicated too.

So my proposal is to Blender's GUI design team and to Blender's main developer theme. Starting from low hanging fruits to higher hanging fruits:

  1. When the Action has no users (F button is toggled off) Add some visual clue that is clearly warning the user that the clip will be purged by blender. You can use color coding - like marking the text in red. And also append to the name of the clip a string - like "<name of clip> (wipe data)"
  2. When closing blender- Warn the user about Actions that are going to be wiped.
  3. Blender defaults-when the user creates a new clip, set it's "F" button to be switched on by default. That way the user tells blender to erase the action when erasure is needed, rather than telling blender to KEEP the action. That way the decision to delete the action is their hands.
  4. Blender needs a better way of managing data blocks. -There should be an operator to wipe data blocks that have no users- a command the the user calls. Clearing data blocks without users should be done only when demanded by the users, NOT automatically by the software.
  5. Editing data blocks should not be done in the list where they are selected. It should be done in the outliner instead. A dedicated editor to find, select, copy, paste, and delete datablocks.
  6. In case you decide to keep the insane "F" button design - A BIG warning message prompt before closing the scene - listing all data blocks that the software is about to purge.

That is all, I hope you consider fixing this.

Exact steps for others to reproduce the error
Based on a (as simple as possible) attached .blend file with minimum amount of steps

Details

Type
Design
Todor Imreorov (blurymind) updated the task description. (Show Details)
Todor Imreorov (blurymind) raised the priority of this task from to Needs Triage.

+1 from me.

Just so we're clear what the issue is: In games, you typically animate actions. Then in Unity, Unreal, or whatever, you can reference those actions from the code. eg if player is holding down the w key, play the walk action, if they hit lmb, play the attack action, and so on.

So what happens is someone can easily spend an entire day animating those actions, completely unaware that they aren't being saved in the blend because they haven't flagged a fake user. Even if they're exporting and testing, everything seems to work. It's just when they finally close and reopen the blend file do they realize all their work gone, and often have no idea why. Which is frustrating, and if it's a game being made with a budget, it's expensive.

And that is exactly what happened to me at the global game jam event the other day :)
Blender's design put our team in a lot of trouble near the deadline.

+1 as well. This definitely needs to be fixed. Lost data = lost time and money.

In addition to being error prone, this problem makes it especially hard on new users of the software.

First of all, that's no bug, it's a design task.

We indeed have something that's broken by design here. I'm afraid this is a bigger task to discuss on, as it seems to touch the whole data block design/workflow, so let's take the time to find a good solution that works fine in all cases.

well, the first you can do is communicate/warn the user that data is under the danger of being wiped. The "F" button is too easy to overlook. So underlining the text with red when it has no fake user would be a nice temporary semi-solution. When an F-curve is dead for example- blender puts a red line under it's name.

After learning how data blocks work in Blender I didn't have any problems managing things (Scene,Mesh,Brush,Material,Particle,Action,etc...); and the system bypasses this problem with the NLA editor. Applying a temp track automatically sets a new user (track) to the action. And when a new key is formed on any kind of transformation a new "temp" track and a new action is created. So you don't really need to set user with the action editor manually.

However I do agree this is a bit obscured , the default view layout for "Animation" doesn't have a NLA editor. This should be fixed imao.

So ever since learning this functionality , I presumed the correct workflow was >>

Animate (bones,objects)

NLA Track (when temp track is applied, a new track with new action is created and set as user every time, this prevents data loss )

GraphEditor or DopeSheet (clean and finalize animation).

So the problem occurs when the user doesn't use NLA tracks and is not aware of the "Fake" user.

If this is a consistency problem maybe there should be an option in the preferences to save all data blocks.Which of course can inflate a blend file pretty quickly.

Personally I like the current system which prevents inflated files . On small projects saving all data blocks might not be a problem but for development purposes and big projects keeping all the data might be a problem and this "Auto Purge" is great.

Can't you see that this is an intrerface/design issue. Blender has absolutely no warning when deleting user data. and it can not be undone. It does it by default, if you dont click on an obscure little icon every time you create new actions. Why cant we just keep that icon ticked by default? Or at least have the option to do so. Why are developers so against it. At least issue a warning when you close the blender scene.

Of course there is another way, but what you are telling me is not the default way a user would do it. They will open the animation layout and click to add a new action. Then animate.

When you do looped animations for games, you rarely even think of using an NLA editor.
Opening the NLA editor just to add a new clip is a bad workaround to this issue- since nobody would even think of doing it in many other scenarios where NLA is not needed.

So I will continue to argue that the design is simply broken atm, but still thank you for letting me know of an approach that will reduce the risk of losing data.

People at blender artists generally agree with me that the current design is bad:
http://blenderartists.org/forum/showthread.php?360573-Some-ideas-on-making-blender-better-for-Animators-Add-yours/page4

The close blender confirmation dialogue could also say:

" You have the following Animation Actions that have no Fake user assigned to them.
<clip1 name>
<clip2 name>
<etc etc>
Closing blender will purge them. Are you sure you want to do this?

Keep Actions (Assign fake user) and close
Purge Actions and close
Cancel


That is the least that any other software would do

The problem is best described in this document:
[[ https://docs.google.com/document/d/1ScPMbHv8WRCU2znB7IU2l-W9hH-NLs5weQKLkjqmgpA/edit#

| Blender UI and Functionality Proposals ]]

Data Handling

The "fake user", and not used data vanishing when closing Blender, is not very intuitive. More intuitive would be if the data, along with unlink (the X at the moment), would have a delete data option (with a "Are you sure?" confirmation).

The necessity to set a fake user for a material, or other data, for it not to vanish, and data vanishing without a confirmation, is against all UI design principles - where an action is required to not do an operation.

That would allow, for instance, remove a material that is no longer needed, from all objects that are using it in some material slot. At the moment, you have to manually remove the material from each slot.

Shift-click on X won’t remove the materials in the current session.

It is also bad design to use th e closing and opening of the program as an interface element. Currently, when you delete for instance, a high-poly object, and save the file, the file’s size won’t change. You have to save the file, close and reopen the program, and save the file again, to get the reduced file size.

Another use case (my own) where animation is being lost due to that detested fake user:

I have duplicated character among my scenes. The data is shared (so I have only one pose library for it for instance), the object's themselves are "single user". This works great for the armatures, but the facial expressions are done with shape keys.

Unfortunately, separate objects sharing data share also the shape key animations. So for each scene, I have to manually switch the shape key action to a new one, named accordingly to the scene for good organization. And I was doing that - not that big of a deal, I thought.

But then, when I started coming back to scenes I did before, I realized that Blender was deleting my shape key animations - without asking, without warning, all because I didn't click the obscure F button. And so months of work was lost.

Now, I'm exaggerating the story a bit for dramatic effect. I'm a long time Blender user, so I knew all about the F button - but a newer user would not. And I still lost a couple of animations anyway, because it's easy to forget about it. The fake user and data handling is bad design, needs a temporary solution now (warnings etc), and a big fix eventually (like the one from my doc, mentioned a post above).

Blurymind , we have talked about this in the forums, I was explaining what I said in the forum here, since developer.blender.org is more formal.Maybe a developer might read it and find it useful.

But like I said it is not a design issue in my opinion, what I explained about NLA is not a workaround. Its how blender works. If your want to bypass NLA no problem, but the data block structure is consistent and once you directly use action editor its the users responsibility.

Because the moment you create an animation, its action is assigned to the object. So if you animate a bone or object then save and exit. Nothing is lost.But the moment you add a` new action` from the action editor it means you are discarding the old one.

Don't you think its strange that the action editor is a sub-editor inside dopesheet ? It is because its used to edit actions not manage them. That's why I say its not a design issue...

The management of actions are made on the NLA part. And like i explained it is a editor and clip manager similar to video sequence editor.
I am an indie game developer , and I do use NLA for looping animations. Its both an animation clip manager and editor at the same time.

I don't reject your proposal to make some changes to the preferences to manage this auto-purge, but like I said It should be optional.

Keeping all the data-blocks in blender might be ok for small projects or individual files. But for big projects and testing purposes it is not helpful.

Anyway I also don't think this is a UI issue , because making "F" button flash and pulse might still not stop you from forgetting about it.

It is going against basic software design principles and plain human intuition. :)
If you want blender to be widely adopted, you have to have some common sense. I understand that there will always be people who get used to something and tend to protect it no matter what.

No other software deletes your data without a warning - by default.
It is not only me who wants to change this. Look into blenderartist's archive.

Long time blender users want this changed as well.
You seem to be the only one against it. Maybe blender devs should have a tick box added in preferences to keep the current behavior ("Purge datablocks without fake users when closing the application") - but it shouldnt be the default.

@Yigit Savtur (ygtsvtr)

It should be optional.

Or even better - manual. Delete single datablocks by hand, purge unused by hand. If anything is going to be deleted, it should be done by the user's choice.

As the author stated on the forum: "When you click the "add new action" button, 99% of the time you would expect blender to keep the action you just added [or even keep the previous action you replaced with the new one]. Who the hell adds an action and doesnt expect the software to keep it. (...) Come on, saving the scene should be enough to keep it."

"It's like [leaving a loaded gun inside the code]. People will hurt themselves, then blame the software".

Sane UI design tackles the issues themselves, and not adds more confusement like 'are you sure you want to delete" requesters.

Blender should just never delete data you intended to be using. That's where the design challenge is.

In 2012 there was a long discussion on this with the animation system maintainer. He responded with this long blog post:

http://aligorith.blogspot.co.nz/2012/03/response-to-action-fake-user-issue.html

Somehow - as it goes more often in such long discussions - people forget about it and move on. That's too bad, things should not lie around so long. We're excused for being busy maybe - and especially not having enough developers who work on animation code.

All ideas on usability and defaults or 'sane ui design aside - our loyalty and support should always be with the people who actually work on code in Blender. They should be empowered and taken very seriously. Unfortunately our animation system only had 1 developer for half a decade or so. We better recruit or train or invite more developers in to work on this module....

And to be clear, until 2012 (since the beginning of Blender) Actions were added with 'Fake' user flag.
It was changed for rational reasons that make sense, but not without having users in control again over the assets they lose.

Yes I agree that would be even better, as confirmation dialogues before closing the software tend to be annoying sometimes.

It is generaly better to never delete data that is intended to be used.

I completely agree with plyczkowski > Let the user clean up the scene when that needs to be done.
Let the user delete datablocks that are not wanted.

Purging them automatically when closing the software by default is really really bad.

You can add these operators to the object mode menu:

  • delete unused materials

pose mode menu:

  • delete unused actions

other modes:

  • delete unused etc

When you add a new data block to something, blender should automatically assign the thing you added it to as the user.

Some developers and users complain that having to close blender and reopen it to clean up datablocks is counter-intuitive and causes issues.
For example it has recently caused a problem for the developer of the muscle generator add on:
Link to the demonstration video- the part where datablocks management becomes an issue

Since when is conflicting identifiers are Blender's fault... This is really pushing it and its on addon developers side of things; if you duplicate a file with the same identifier (string) you will get a conflict. Try to do this in operating system windows and your file will automatically get renamed with a new identifier ex: if "File.txt" exists in a folder duplicating it will make the duplicate "File-Copy.txt" , if duplicated again it will be "File-Copy(2).txt".

In Blender if you create a group its called "Group" by default. if you create a new group without renaming the new group it will be called "Group.001" and if you duplicate again it will be called "Group.002"... so as you can see the renaming functionality is there by default.

So if the addon developer would like to simplify the renaming process in his addon , its up to him to manage it in the background... ex: Get identifier string from user input, find the duplicate and rename it to the original by deleting ".001" , so the addon would swap datablocks this way...

do you have to close a file browser and reopen it in order to delete a file you dont want ? :D
Do you have to mark it with an f button in order to tell the operating system not to delete the file when you close the file manager?
How do you not see how counter intuitive this is at the moment. No other software behaves this way

Actually you need to empty the trash can in windows ;) ...

and if we do need to compare if you shift delete a file its deleted permanently... to a dump file which is purged when you restart windows...

I haven't read the blog of Aligorith (developer). And I was talking about experience when I said files getting too big and hard to manage. I presume most of the people who object to this do not use a versioning system (svn , mercurial ).

There are artist who don't manage their files properly and leave a bunch of unused things in the files, this is very common in a studio and when you open a file someone else created you have to manage it yourself because the person who created the file might not be around. In such cases this system is a life saver. I have seen this a lot working with Max , For example the mocap / rigger artist creates a file then after couple of months there is some big changes and the rig is altered. To save some time the rigger just imports everything from the old file, makes the new changes ,renames it to "human_skeleton_final" and commits to svn. Then he tells you he has commited and goes home. When you update your version and open the file , you see "human_skeleton_new" , "human_skeleton_forearmFix" ,"human_skeleton_new_2", "human_skeleton_old", and human_skeleton_final"...

its same thing with meshes and animations too, keeping everything seems logical when working with single files, or couple of artist. On bigger scale its a bigger burden than you can think.Its prone to spelling errors ,file corruption, outdated work, and redoing the work .

only that blender has no trash can. It deletes the file without a warning and you can not get it back.

And the operating system never empties your trash bin without your consent - especially not when you reboot it. There is a confirmation even when you empty the trash bin.
it never puts your files in the trash by default when you create them. You can not use files that are in the trash.

Blender literally lets the user work on files that are about to get wiped without a warning- marked by the software for a purge upon their creation.

@Yigit Savtur (ygtsvtr)

keeping everything seems logical when working with single files

No one is saying that there shouldn't be "purge unused" function. But currently this function is ran automatically and without warning.

@Paweł Łyczkowski (plyczkowski) I explained that I'm not against and option in preferences either. However like I said setting this from preferences is better in my opinion.

What I'm against is the argument some people make that the design itself is "bad".

The base of the argument for that I have explained above, and I urge people who claim it is so, to write a better Data system for Blender. But I'm sure they will find some logical excuse to ignore this.

if it has consistently led to data loss, to many users - as confirmed by people at blenderartist, then yes- it has to change somehow. In way in which everyone is happy.

I do not wish to turn this to an argument however would like to point that , change is not based on endless pages of blenderartist threads, or generally speaking, the disrespectful rants from users (There are some people like that in the forums). The changes are decided and talked during the making of short movies like Big buck bunny , Sintel, Tears of Steel and Gooseberry.

Yes there will always be users who are disrespectful to other users. Internet is like the wild west. However in this case, I presented you with a number of logical arguments to correct a design issue.
Some of the users at BA are actual developers , who also support the idea that this is currently an issue.

Whether this is approved or not depends on blenders GUI team now :)
If not then at least I brought it to the bug tracker did what I could.

Statements like this are discouraging me from filing bug reports in the first place. I don't see how it will help the issue. If change wasnt based on user feedback, then what is this bug tracker made for?

So did I present a logical argument which also turns out is similar to the main developers concerns in the first place...

If a Blender developer is against the current implementation I'm sure he has spoken to the main developer already to fix the issue so no problem there. By developer if you mean a BA user who is a script/add-on writer or a programmer who has just an opinion, well that's just their opinion.They would be contributing more if they would commit code instead of making blunt criticism.

Demanding huge changes which are not easy to make which require multiple code refactoring is not bug reporting. It's requesting a rewrite; on top of that if you wanted to give feedback , you did so in BA forums. However here in the "bug" tracker we are discussing the system itself , not a bug.

I am not requesting change in the underlying structure.

Instead I am asking for at least change of the default behavior in blender. At least assign a fake user to an Action when that action is created. If I want to delete it- it is my choice, not the software's.
Does that require a rewrite of the entire datablocks system? Make that optional if you are so much against it. We have a preferences window, dont we?

Removing a purge behavior when closing the application and triggering upon the user's request instead - does that require a complete rewrite or merely a change in the conditions in which this purge action is executed?

I am requesting user interaction changes - not rewrite of whats under the hood.
I am giving you examples upon examples of user feedback - and you disregard it because it is not from people working for the blender foundation.

I do remember you saying the design is bad in BA forums , and also here "This is absolutely unacceptable design" , "This is really bad design here".

I was referring to these comments. The issue is not a UI issue, you either prefer to keep data blocks or not. If you do then the pressing of F button is not important since Blender will keep everything ; if you don't want to keep unused data blocks then there is no need to change it because users who are aware know to press the F button.

naturally I got angry because I lost hours of work. I dont understand your reasoning anymore. :D
Would I have taken the time to write this bug report and invest time in arguing on why its a bad design if I didnt get personally affected by it?

Anyway, you are talking about people issues and not software issues- turning this comments section into another BA thread. Let's keep on topic and talk about the design. Why are you defending it so desperately? How would a change ruin your workflow?

So naturally you thought your loss of work is due to a design fault rather than your own fault. When I explained you how to solve your problem with NLA editor. You assumed your way usage is correct and design is still at fault and trying to bypass problem the with an UI implementation.

The problem is created by peoples issues (for example yours), I explained your problem (using action editor to manage actions) and explained the solution (use NLA to manage actions) and explained why auto purge is a needed function (for versioning and management). Ton posted a blog post from the developer which explains everything in detail including its reasons which corresponds with what I wrote. At this point I can only assume the user is at fault here but still for user-friendliness sake I agree that there should be and option in preferences so people can keep their datablocks.

So its not a design issue , its not a UI issue its a user issue...

I hope I explained my reasoning...

Thats why I first posted at blender artist, to collect data from other users. Surprise surprise, there are others who lost data just like me.
Experienced blender users.
I've been using it for more than 3 years btw. This has happened to me twice.

If you need to explain a feature to someone, in order to prevent them of losing data by mistake- then that makes the software you are explaining counter-intuitive in a harmful way.
Intuition. We build a set of rules in our heads- based on experience with other software and computers in general.

Ok, I think I see where this is headed so I'm going to stop here, I don't have anything to add.

Another way to suggest to the user that their Action editor data is not going to be saved (when the "F" button is not toggled) - is to append an asterisk (*) symbol to the end of its name.

If you want to make it even more obvious, you can underline it with red like this:


or this

This would at least visually hint that blender is not going to keep the data when you close it.
It is a very minimal solution - it's not really fixing the problem at the moment, but it is at least improving things by adding a subtle warning that the counter intuitive design is going to wipe the data if you dont click on the F button.
If you are against changing it, you can at least communicate it better.

When you add an Action to an object, shouldnt that object be automatically the user of the action and the action kept (not purged by default without a warning when you close blender)?
Clicking on the "F" button does not make it the owner, instead it communicates to the user that the action now has 2 users.
Having to give an action an extra fake user in order to keep it is kind of strange don't you think? A bit misleading too?

Now thinking about it, I think part of the problem is that blender's action editor successfully misleads the user to the idea that an armature can be the owner of multiple actions. And that the drop down list is not there to select which one is being owned by the armature- but more like a way to switch between them and work on multiple actions simultaneously - similar to the way you switch between editing modes in the 3d viewport. That is what an animator would use it for in most cases in my opinion.
It's just also very unexpected that blender would delete all of the other ones in the list if they dont have a fake user.

Is this the place to rant? Nah, i am ok already =) After i relatively quickly repeated everything i has done(in a ~7 hours) i feel relaxed.
At first i wanted to fill a bug report but its already here, an then reading more about this problem i feel like nothing will change anyway because people like to work on something exciting and not fixing underhood problems.

But something tells me that making a simple warning would save alot of troubles(as was suggested here) and for a programmer should be super simple to make. Also make it a modal window right in the face so to say.

Now that there is a patch to easily do it with the outliner, I think it should be done manually by the user instead of by blender without a warning and no ability to undo. Be it manual or optional, default or not - It would stop this madness of people losing their work.

That said, I would be happy to get ANY solution to this. A visual asterisk warning would be an amazingly clear hint, but if you can think of other design ways to approach it, it would be great to add them to the bug report.

Tell us more on what happened :)
How did you lose your animation?

To reproduce this bug:
1.open blender and make a bunch of animation actions , dont touch the F button

  1. Work for several hours on these actions
  2. Ctrl+s to save your scene
  3. close blender
  4. Open blender

All of your work is now gone, just the clip that you last worked on is there

When I save blender, I expect it to keep my work, even if it has no fake users on it.
Datablocks with no users, if easy to clean up by the user should be kept by the software.