In this paper we develop a generalized approach to visualizing and controlling an optimization process. Our framework, called Human-Guided Search, actively involves people in the process of optimization. We provide simple and general visual metaphors that allow users to focus and constrain the exploration of the search space. We demonstrate that these metaphors apply to a wide variety of problems and optimization algorithms. Our software toolkit supports rapid development of human-guided search systems. Our approach addresses many often-neglected aspects of the optimization task that are critical to providing people with practical solutions to their optimization problems. Users need to understand and trust the generated solutions in order to effectively implement, justify, and modify them. Furthermore, it is often impossible for users to specify, in advance, all appropriate constraints and selection criteria for their problem. Thus, automatic methods can only find solutions that are optimal with regard to an invariably over-simplified problem description. In contrast, human-in-the-loop optimization allows people to find and better understand solutions that reflect their knowledge of real-world constraints. Finally, interactive optimization leverages people's abilities in areas in which humans currently outperform computers, such as visual perception, learning from experience, and strategic assessment. Given a good visualization of the problem, people can employ these skills to direct a computer search into the more promising regions of the search space. The software we describe is written in Java and is available under a free research license for research or educational purposes.