I made looks an object instead of std::string because there is a semantic difference between None and an empty string. None means "do not override looks", while an empty string means "override looks with empty string". And std::string cannot encode a null, so hence the object and extract.

Line 377 is comparing from to None (object() is None in boost::python, not at all obvious and I should have commented that).

ImageBufAlgo::ociodisplay has looks defined as a const char * instead of a std::string for the same reason. 

It seemed simpler than adding a boolean parameter called "override_looks", and a default value of None is pythonic.