refactor simple portrait
support complex portrait