<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://gramps-project.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aglebov</id>
	<title>Gramps - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://gramps-project.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aglebov"/>
	<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php/Special:Contributions/Aglebov"/>
	<updated>2026-06-22T01:47:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.3</generator>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46989</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46989"/>
		<updated>2013-11-03T20:14:24Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Wrote a portion of the manual&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right|The gramplet window consists of the toolbar, the selection area (center-left) and the list of tagged people (center-right).]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Selection area ===&lt;br /&gt;
&lt;br /&gt;
The selection area displays the image and highlights the regions that have been associated with person in the Gramps database. &lt;br /&gt;
&lt;br /&gt;
The mouse wheel can be used to zoom in and out of the image. Alternatively, you can use the corresponding toolbar buttons.&lt;br /&gt;
&lt;br /&gt;
Left click inside of one the regions makes this region active. Right-click causes the context menu to be displayed.&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected region. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, first make it active by clicking inside the region. Move the mouse pointer to one of the borders or corners of the selection box. A grabbing handle will appear that you can drag to modify the shape of the box. &lt;br /&gt;
&lt;br /&gt;
To change the person associated with the region, use the toolbar buttons or the context menu.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The gramplet toolbar (the exact appearance can depend on the operating system and the version of the GTK library used).]]&lt;br /&gt;
&lt;br /&gt;
Use the toolbar to modify the associations of the current image.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== List of tagged people ===&lt;br /&gt;
&lt;br /&gt;
The list contains the people tagged in the current image, as well as the selection boxes that have not yet been associated with a particular person. A thumbnail image of the corresponding region of the image is displayed in every row.&lt;br /&gt;
&lt;br /&gt;
Left-click on a row in the list selects the corresponding region in the image. Further manipulations can be&lt;br /&gt;
&lt;br /&gt;
Double-click on a row with a person opens the Gramps 'Person' dialog for this person. This is equivalent to pressing the 'Edit' button in the gramplet toolbar.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
Some of the ideas to be implemented in future versions of the gramplet:&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46655</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46655"/>
		<updated>2013-10-16T09:45:38Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Edited the caption for the screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right|The gramplet window consists of the toolbar, the selection area (center-left) and the list of tagged people (center-right).]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Selection area ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== List of tagged people ===&lt;br /&gt;
&lt;br /&gt;
The list contains the people tagged in the current image, as well as the selection boxes that have not yet been associated with a particular person.&lt;br /&gt;
&lt;br /&gt;
Clicking on a row in the list selects the corresponding region in the image.&lt;br /&gt;
&lt;br /&gt;
Double-clicking on a row with a person opens the Gramps 'Person' dialog for this person. This is equivalent to pressing the 'Edit' button in the gramplet toolbar.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46654</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46654"/>
		<updated>2013-10-16T09:43:34Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Moved the text from the Workflow subsection to the Selection Area subsection and removed the Workflow subsection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right|The main window.]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Selection area ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== List of tagged people ===&lt;br /&gt;
&lt;br /&gt;
The list contains the people tagged in the current image, as well as the selection boxes that have not yet been associated with a particular person.&lt;br /&gt;
&lt;br /&gt;
Clicking on a row in the list selects the corresponding region in the image.&lt;br /&gt;
&lt;br /&gt;
Double-clicking on a row with a person opens the Gramps 'Person' dialog for this person. This is equivalent to pressing the 'Edit' button in the gramplet toolbar.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46653</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46653"/>
		<updated>2013-10-16T09:42:14Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* List of tagged people */ Filled the list of tagged people subsection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right|The main window.]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Selection area ===&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== List of tagged people ===&lt;br /&gt;
&lt;br /&gt;
The list contains the people tagged in the current image, as well as the selection boxes that have not yet been associated with a particular person.&lt;br /&gt;
&lt;br /&gt;
Clicking on a row in the list selects the corresponding region in the image.&lt;br /&gt;
&lt;br /&gt;
Double-clicking on a row with a person opens the Gramps 'Person' dialog for this person. This is equivalent to pressing the 'Edit' button in the gramplet toolbar.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46651</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46651"/>
		<updated>2013-10-16T09:16:23Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Added subsections for selection area and list of tagged people&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right|The main window.]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Selection area ===&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== List of tagged people ===&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46650</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46650"/>
		<updated>2013-10-16T09:14:44Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right|The main window.]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.jpg&amp;diff=46649</id>
		<title>File:Photo-Tagging-Screenshot.jpg</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.jpg&amp;diff=46649"/>
		<updated>2013-10-16T09:12:17Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Aglebov uploaded a new version of &amp;amp;quot;File:Photo-Tagging-Screenshot.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46648</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46648"/>
		<updated>2013-10-16T09:02:39Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.jpg&amp;diff=46647</id>
		<title>File:Photo-Tagging-Screenshot.jpg</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.jpg&amp;diff=46647"/>
		<updated>2013-10-16T09:02:12Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46646</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46646"/>
		<updated>2013-10-16T08:57:17Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Added a screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo-Tagging-Screenshot.gif|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.gif&amp;diff=46645</id>
		<title>File:Photo-Tagging-Screenshot.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.gif&amp;diff=46645"/>
		<updated>2013-10-16T08:56:36Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Aglebov uploaded a new version of &amp;amp;quot;File:Photo-Tagging-Screenshot.gif&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.gif&amp;diff=46644</id>
		<title>File:Photo-Tagging-Screenshot.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Screenshot.gif&amp;diff=46644"/>
		<updated>2013-10-16T08:54:44Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46643</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46643"/>
		<updated>2013-10-16T08:37:54Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar contains nine buttons that are made active in accordance with the current state of selection.&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
Each buttons carries a specific function.&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog. Once selection is made, the person is tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46642</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46642"/>
		<updated>2013-10-16T08:33:57Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:New.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46641</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46641"/>
		<updated>2013-10-16T08:33:12Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* Toolbar */ Added toolbar buttons with descriptions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
[[File:Select.gif]] Displays the Gramps 'Select Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Add.gif]] Creates a new person and displays the Gramps 'Person' dialog.&lt;br /&gt;
&lt;br /&gt;
[[File:Clear.gif]] Removes the tag from the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Remove.gif]] Removes the current box together with the tag.&lt;br /&gt;
&lt;br /&gt;
[[File:Edit.gif]] Displays the Gramps 'Person' dialog for the person tagged in the current box.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomin.gif]] Zooms the image in.&lt;br /&gt;
&lt;br /&gt;
[[File:Zoomout.gif]] Zooms the image out.&lt;br /&gt;
&lt;br /&gt;
[[File:Detect.gif]] Runs the detection algorithm.&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.gif]] Displays the gramplet settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Workflow ===&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Settings-icon.gif&amp;diff=46640</id>
		<title>File:Photo-Tagging-Settings-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Settings-icon.gif&amp;diff=46640"/>
		<updated>2013-10-16T08:26:48Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Detect-icon.gif&amp;diff=46639</id>
		<title>File:Photo-Tagging-Detect-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Detect-icon.gif&amp;diff=46639"/>
		<updated>2013-10-16T08:26:39Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Zoomout-icon.gif&amp;diff=46638</id>
		<title>File:Photo-Tagging-Zoomout-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Zoomout-icon.gif&amp;diff=46638"/>
		<updated>2013-10-16T08:26:28Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Zoomin-icon.gif&amp;diff=46637</id>
		<title>File:Photo-Tagging-Zoomin-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Zoomin-icon.gif&amp;diff=46637"/>
		<updated>2013-10-16T08:26:18Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Edit-icon.gif&amp;diff=46636</id>
		<title>File:Photo-Tagging-Edit-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Edit-icon.gif&amp;diff=46636"/>
		<updated>2013-10-16T08:26:04Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Remove-icon.gif&amp;diff=46635</id>
		<title>File:Photo-Tagging-Remove-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Remove-icon.gif&amp;diff=46635"/>
		<updated>2013-10-16T08:25:50Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Clear-icon.gif&amp;diff=46634</id>
		<title>File:Photo-Tagging-Clear-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Clear-icon.gif&amp;diff=46634"/>
		<updated>2013-10-16T08:25:39Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-New-icon.gif&amp;diff=46633</id>
		<title>File:Photo-Tagging-New-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-New-icon.gif&amp;diff=46633"/>
		<updated>2013-10-16T08:25:24Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Select-icon.gif&amp;diff=46632</id>
		<title>File:Photo-Tagging-Select-icon.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Select-icon.gif&amp;diff=46632"/>
		<updated>2013-10-16T08:25:09Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46631</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46631"/>
		<updated>2013-10-16T08:18:34Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* Toolbar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.]]&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46630</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46630"/>
		<updated>2013-10-16T08:18:17Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[Image:toolbar.gif|The toolbar.|thumb]]&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46629</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46629"/>
		<updated>2013-10-16T08:17:20Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Separate subsection for toolbar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
[[File:toolbar.gif|The toolbar.|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46628</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46628"/>
		<updated>2013-10-16T08:15:35Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Added caption to the toolbar image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
[[File:toolbar.gif|The toolbar.|]]&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Toolbar-34.gif&amp;diff=46627</id>
		<title>File:Photo-Tagging-Toolbar-34.gif</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=File:Photo-Tagging-Toolbar-34.gif&amp;diff=46627"/>
		<updated>2013-10-16T08:13:35Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: The Photo Tagging Gramplet toolbar (as appears in Gramps 3.4 under Debian Linux 7.1, GTK v2.24).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Photo Tagging Gramplet toolbar (as appears in Gramps 3.4 under Debian Linux 7.1, GTK v2.24).&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46626</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46626"/>
		<updated>2013-10-16T08:10:57Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* Usage */ Components of the gramplet window&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
The gramplet window consists of:&lt;br /&gt;
* the toolbar&lt;br /&gt;
* the selection area&lt;br /&gt;
* the list of people tagged in the image&lt;br /&gt;
&lt;br /&gt;
[[File:toolbar.gif]]&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46625</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46625"/>
		<updated>2013-10-16T07:59:24Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* To do */ Removed the features that have been implemented&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addons_development&amp;diff=46594</id>
		<title>Addons development</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addons_development&amp;diff=46594"/>
		<updated>2013-10-08T09:06:21Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* Config */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{man warn|Warning:|This page documents the API, methods, and best practices for developing a 3rd-party addon for Gramps 3.2 and later }}&lt;br /&gt;
&lt;br /&gt;
Addons for Gramps can extend the program in many different ways. You can add any of the following [http://svn.code.sf.net/p/gramps/code/trunk/gramps/gen/plug/_pluginreg.py types] of addons:&lt;br /&gt;
&lt;br /&gt;
#Report&lt;br /&gt;
#Quickreport&lt;br /&gt;
#Tool&lt;br /&gt;
#Importer&lt;br /&gt;
#Exporter&lt;br /&gt;
#Doc creator&lt;br /&gt;
#Plugin lib&lt;br /&gt;
#Map service&lt;br /&gt;
#Gramps View&lt;br /&gt;
#Relationships&lt;br /&gt;
#Gramplet&lt;br /&gt;
#Sidebar&lt;br /&gt;
&lt;br /&gt;
Writing an addon is fairly straightforward if you have just a little bit of Python experience. And sharing your addon is the right thing to do. The general steps to writing an addon and sharing your own addons are:&lt;br /&gt;
&lt;br /&gt;
# Develop your addon&lt;br /&gt;
# Create a Gramps Plugin Registration file (.gpr.py)&lt;br /&gt;
# Get translators to translate your addon into multiple languages&lt;br /&gt;
# Package your addon&lt;br /&gt;
# List and document your addon&lt;br /&gt;
# Support it through issue tracker&lt;br /&gt;
# Maintain the code as Gramps continues to evolve&lt;br /&gt;
&lt;br /&gt;
We'll now look at each of these steps in detail.&lt;br /&gt;
&lt;br /&gt;
== Develop your addon ==&lt;br /&gt;
&lt;br /&gt;
The [http://svn.code.sf.net/p/gramps-addons/code/ gramps-addons] subversion repository has the following structure:&lt;br /&gt;
&lt;br /&gt;
* /gramps-addons&lt;br /&gt;
** /trunk&lt;br /&gt;
*** /contrib&lt;br /&gt;
*** /download&lt;br /&gt;
** /branches&lt;br /&gt;
*** /gramps{{stable_branch}}&lt;br /&gt;
*** /gramps32&lt;br /&gt;
**** /contrib&lt;br /&gt;
**** /download&lt;br /&gt;
&lt;br /&gt;
The contrib subdirectories hold the source code for the addons for a particular version. If you are working on a addon for gramps{{stable_branch}} then you should be working in gramps-addons/branches/gramps{{stable_branch}}/contrib. If you are working in gramps/trunk then you should use gramps-addons/trunk/contrib.&lt;br /&gt;
&lt;br /&gt;
==== Setup the addon development tools====&lt;br /&gt;
These steps show how to download and work with the addon development tools.&lt;br /&gt;
&lt;br /&gt;
{{man tip| 1=Tip |2=To use make.py as shown throughout this document, you may have to use:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;GRAMPSPATH=/path/to/gramps python make.py ...&amp;lt;/pre&amp;gt; &amp;lt;br /&amp;gt; if the default (&amp;quot;../../..&amp;quot;) is not correct.}}&lt;br /&gt;
&lt;br /&gt;
# Checkout the gramps-addons files from the [https://sourceforge.net/projects/gramps-addons/ gramps-addons] project:&lt;br /&gt;
## cd into gramps trunk, for example:&lt;br /&gt;
### cd ~/gramps/trunk&lt;br /&gt;
## Checkout gramps-addons:&lt;br /&gt;
### svn co https://svn.code.sf.net/p/gramps-addons/code gramps-addons&lt;br /&gt;
## Change to trunk or branches/gramps{{stable_branch}} directory:&lt;br /&gt;
### cd gramps-addons/branches/gramps{{stable_branch}}/contrib&lt;br /&gt;
# Make a new project directory in gramps-addon/branches/gramps{{stable_branch}}/contrib:&lt;br /&gt;
## mkdir NewProjectName&lt;br /&gt;
# Initialize the addon:&lt;br /&gt;
## ./make.py init NewProjectName&lt;br /&gt;
&lt;br /&gt;
===Follow the development API for your tool===&lt;br /&gt;
Follow the development API for your tool, [[Report-writing_tutorial|report]], view, or [[Gramplets]]. Place all of your associated .py, .glade, etc. files in this directory. For general information on Gramps development see [[Portal:Developers]] and [[Writing a Plugin]] specifically.&lt;br /&gt;
&lt;br /&gt;
=== Test your addon as you develop ===&lt;br /&gt;
To test your addon as you develop it it is suggested that you replace your Gramps user plugin directory with a link to your addon development directory, like so:&lt;br /&gt;
&lt;br /&gt;
 cd ~/.gramps/gramps{{stable_branch}}/&lt;br /&gt;
 mv plugins/* /wherever/trunk/gramps-addons/branches/gramps{{stable_branch}}/contrib/&lt;br /&gt;
 rm -rf plugins&lt;br /&gt;
 ln -s /wherever/trunk/gramps-addons/branches/gramps{{stable_branch}}/contrib plugins&lt;br /&gt;
&lt;br /&gt;
Gramps will search this folder (and subdirectories) for .grp.py files, and add them to the plugin list.&lt;br /&gt;
&lt;br /&gt;
If you have code that you want to share between addons, you don't need to do anything special. Currently, Gramps adds each directory in which a .gpr.py is found onto the PYTHONPATH which is searched when you perform an import. Thus &amp;quot;import NewProjectName&amp;quot; will work from another addon. You should always make sure you name your addons with a name appropriate for Python imports.&lt;br /&gt;
&lt;br /&gt;
=== Commit your changes ===&lt;br /&gt;
&lt;br /&gt;
To commit your changes so that others can use your addon, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Get an http://sourceforge.net account if you don't already have one.&lt;br /&gt;
# Request SVN write access for the gramps-addon project by emailing one of the admins of the project (listed under the gramps-addon title next to the group icon) from http://sourceforge.net/projects/gramps-addons/&lt;br /&gt;
# Remove the files that should not be added to SVN:&lt;br /&gt;
## ./make.py clean NewProjectName&lt;br /&gt;
# Add the project to the repository:&lt;br /&gt;
## svn add NewProjectName&lt;br /&gt;
## svn commit -m &amp;quot;A message describing what this addon is&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Before making additional edits to your addon, you should:&lt;br /&gt;
&lt;br /&gt;
# svn update&lt;br /&gt;
# svn status&lt;br /&gt;
# svn commit -m &amp;quot;A message describing the changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Config ===&lt;br /&gt;
&lt;br /&gt;
Some addons may want to have persistent data (data settings that remain between sessions). You can handle this yourself, or you can use Gramps' built-in configure system. &lt;br /&gt;
&lt;br /&gt;
At the top of the source file of your addon, you would do this:&lt;br /&gt;
&lt;br /&gt;
 from config import config as configman&lt;br /&gt;
 config = configman.register_manager(&amp;quot;grampletname&amp;quot;)&lt;br /&gt;
 # register the values to save:&lt;br /&gt;
 config.register(&amp;quot;section.option-name1&amp;quot;, value1)&lt;br /&gt;
 config.register(&amp;quot;section.option-name2&amp;quot;, value2)&lt;br /&gt;
 ...&lt;br /&gt;
 # load an existing file, if one:&lt;br /&gt;
 config.load()&lt;br /&gt;
 # save it, it case it didn't exist:&lt;br /&gt;
 config.save()&lt;br /&gt;
&lt;br /&gt;
This will create the file &amp;quot;grampletname.ini&amp;quot; and put in the same directory as the addon. If the config file already exists, it remains intact.&lt;br /&gt;
&lt;br /&gt;
In the addon, you can then:&lt;br /&gt;
&lt;br /&gt;
 x = config.get(&amp;quot;section.option-name1&amp;quot;)&lt;br /&gt;
 config.set(&amp;quot;section.option-name1&amp;quot;, 3)&lt;br /&gt;
&lt;br /&gt;
and when this code is exiting, you might want to save the config. In a Gramplet that would be:&lt;br /&gt;
&lt;br /&gt;
 def on_save(self):&lt;br /&gt;
     config.save()&lt;br /&gt;
&lt;br /&gt;
If your code is a system-level file, then you might want to save the config in the Gramps system folder:&lt;br /&gt;
&lt;br /&gt;
 config = configman.register_manager(&amp;quot;system&amp;quot;, use_config_path=True)&lt;br /&gt;
&lt;br /&gt;
This, however, would be rare; most .ini files would go into the plugins directory.&lt;br /&gt;
&lt;br /&gt;
In other code that might use this config file, you would do this:&lt;br /&gt;
&lt;br /&gt;
 from config import config as configman&lt;br /&gt;
 config = configman.get_manager(&amp;quot;grampletname&amp;quot;)&lt;br /&gt;
 x = config.get(&amp;quot;section.option-name1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Localization ===&lt;br /&gt;
&lt;br /&gt;
For general help on translations in Gramps, see [[Coding for translation]]. However, that will only use translations that come with Gramps, or allows you to contribute translations to the Gramps core. To have your own managed translations that will be packaged with your addon, read the rest of this page.&lt;br /&gt;
&lt;br /&gt;
For any addon which you have translations into other languages, you will need to add a way to retrieve the translation. You need to add this to the top of your NewProjectName.py file:&lt;br /&gt;
==== For Gramps 3: ====&lt;br /&gt;
 from TransUtils import get_addon_translator&lt;br /&gt;
 _ = get_addon_translator(__file__).gettext&lt;br /&gt;
&lt;br /&gt;
==== For Gramps 4: ====&lt;br /&gt;
&lt;br /&gt;
 from gramps.gen.const import GRAMPS_LOCALE as glocale&lt;br /&gt;
 _ = glocale.get_addon_translator(__file__).gettext&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can use the standard &amp;quot;_()&amp;quot; function to translate phrases in your addon. &lt;br /&gt;
&lt;br /&gt;
You can use one of a few different types of translation functions:&lt;br /&gt;
&lt;br /&gt;
# gettext&lt;br /&gt;
# lgettext&lt;br /&gt;
# ngettext&lt;br /&gt;
# lngettext&lt;br /&gt;
# sgettext&lt;br /&gt;
&lt;br /&gt;
Gramps 3 also provides:&lt;br /&gt;
&lt;br /&gt;
# ugettext&lt;br /&gt;
# ungettext&lt;br /&gt;
&lt;br /&gt;
These have become obsolete in Gramps 4; gettext, ngettext, and sgettext always return translated strings in unicode for consistent portability between Python 2 and Python3.&lt;br /&gt;
&lt;br /&gt;
See the [http://docs.python.org/3/library/gettext.html#the-gnutranslations-class python documentation] for documentation of gettext and ngettext. The &amp;quot;l&amp;quot; versions return the string encoded according to the [http://docs.python.org/3/library/locale.html#locale.setlocale currently set locale]; the &amp;quot;u&amp;quot; versions return unicode strings in Python2 and are not available in Python 3.&lt;br /&gt;
&lt;br /&gt;
'''sgettext''' is a Gramps extension that filters out clarifying comments for translators, such as&lt;br /&gt;
 _(&amp;quot;Remaining names | rest&amp;quot;)&lt;br /&gt;
Where &amp;quot;rest&amp;quot; is the English string that we want to present and &amp;quot;Remaining names&amp;quot; is a hint for translators.&lt;br /&gt;
&lt;br /&gt;
== Create a Gramps Plugin Registration file ==&lt;br /&gt;
&lt;br /&gt;
First, create the NewProjectName.gpr.py file. The registration takes this general form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(PTYPE,&lt;br /&gt;
     gramps_target_version = &amp;quot;3.4&amp;quot;,&lt;br /&gt;
     version = &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
     ATTR = value,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PTYPE is TOOL, GRAMPLET, REPORT, QUICKVIEW, IMPORT, EXPORT, DOCGEN, GENERAL, MAPSERVICE, VIEW, or RELCALC.&lt;br /&gt;
&lt;br /&gt;
ATTR depends on the PTYPE. But you must have '''gramps_target_version''' and '''version'''. gramps_target_version should be a string of the form &amp;quot;X.Y&amp;quot; version number matching Gramps X major, Y minor integer. version is a string of the form &amp;quot;X.Y.Z&amp;quot; representing the version of your addon. X, Y, and Z should all be integers.&lt;br /&gt;
&lt;br /&gt;
Here is a sample Tool GPR file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(TOOL, &lt;br /&gt;
         id    = 'AttachSource',&lt;br /&gt;
         name  = _(&amp;quot;Attach Source&amp;quot;),&lt;br /&gt;
         description =  _(&amp;quot;Attaches a shared source to multiple objects.&amp;quot;),&lt;br /&gt;
         version = '1.0.0',&lt;br /&gt;
         gramps_target_version = '3.4',&lt;br /&gt;
         status = STABLE,&lt;br /&gt;
         fname = 'AttachSourceTool.py',&lt;br /&gt;
         authors = [&amp;quot;Douglas S. Blank&amp;quot;],&lt;br /&gt;
         authors_email = [&amp;quot;doug.blank@gmail.com&amp;quot;],&lt;br /&gt;
         category = TOOL_DBPROC,&lt;br /&gt;
         toolclass = 'AttachSourceWindow',&lt;br /&gt;
         optionclass = 'AttachSourceOptions',&lt;br /&gt;
         tool_modes = [TOOL_MODE_GUI]&lt;br /&gt;
         )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see examples of the kinds of addons [http://svn.code.sf.net/p/gramps/code/trunk/gramps/plugins/ here] (for example, see [http://svn.code.sf.net/p/gramps/code/trunk/gramps/plugins/drawreport/drawplugins.gpr.py trunk/gramps/plugins/drawreport/drawplugins.gpr.py]) and see the full documentation [http://svn.code.sf.net/p/gramps/code/trunk/gramps/gen/plug/_pluginreg.py here] in the comments and docstrings.&lt;br /&gt;
&lt;br /&gt;
Note that this .gpr.py will automatically use translations if you have them (see below). That is, the function &amp;quot;_&amp;quot; is predefined to use your locale translations; you only need to mark the text with _(&amp;quot;TEXT&amp;quot;) and include a translation of &amp;quot;TEXT&amp;quot; in your translation file. For example, in the above example, _(&amp;quot;Attach Source&amp;quot;) is marked for translation. If you have developed and packaged your addon with translation support, then that phrase will be converted into the user's language.&lt;br /&gt;
&lt;br /&gt;
=== Report plugins ===&lt;br /&gt;
The possible report categories are (gen/plug/_pluginreg.py):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#possible report categories&lt;br /&gt;
CATEGORY_TEXT       = 0&lt;br /&gt;
CATEGORY_DRAW       = 1&lt;br /&gt;
CATEGORY_CODE       = 2&lt;br /&gt;
CATEGORY_WEB        = 3&lt;br /&gt;
CATEGORY_BOOK       = 4&lt;br /&gt;
CATEGORY_GRAPHVIZ   = 5&lt;br /&gt;
REPORT_CAT          = [ CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_CODE,&lt;br /&gt;
                        CATEGORY_WEB, CATEGORY_BOOK, CATEGORY_GRAPHVIZ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each report category has a set of standards and interface. The categories CATEGORY_TEXT and CATEGORY_DRAW use the Document interface of Gramps. See also [[Report API]] for a draft view on this.&lt;br /&gt;
The application programming interface or API for reports is treated at [[Report-writing_tutorial]]. For general information on Gramps development see [[Portal:Developers]] and [[Writing a plugin]] specifically.&lt;br /&gt;
&lt;br /&gt;
=== General plugins ===&lt;br /&gt;
&lt;br /&gt;
The plugin framework also allows you to create generic plugins for use. This includes the ability to create libraries of functions, and plugins of your own design.&lt;br /&gt;
&lt;br /&gt;
==== Example: A library of functions ====&lt;br /&gt;
&lt;br /&gt;
In this example, a file name library.py will be imported at time of registration (when Gramps starts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: library.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
   id    = 'My Library',&lt;br /&gt;
   name  = _(&amp;quot;My Library&amp;quot;),&lt;br /&gt;
   description =  _(&amp;quot;Provides a library for doing something.&amp;quot;),&lt;br /&gt;
   version = '1.0',&lt;br /&gt;
   gramps_target_version = '3.4',&lt;br /&gt;
   status = STABLE,&lt;br /&gt;
   fname = 'library.py',&lt;br /&gt;
   load_on_reg = True,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code in the file library.py will be imported when Gramps begins. You can access the loaded module in other code by issuing an &amp;quot;import library&amp;quot; as Python keeps track of files already imported. However, the amount of useful code that you can run when the program is imported is limited. You might like to have the code do something that requires a dbstate or uistate object, and neither of these is available when just importing a file.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;load_on_reg&amp;quot; was not True, then this code would be unavailable until manually loaded. There is no automatic mechanism in Gramps to load GENERAL plugins automatically.&lt;br /&gt;
&lt;br /&gt;
In addition to importing a file at startup, one can also run a single function inside a GENERAL plugin, and it will be passed the dbstate, the uistate, and the plugin data. The function must be called &amp;quot;load_on_reg&amp;quot;, and take those three parameters, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: library.py&lt;br /&gt;
&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Runs when plugin is registered.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    print &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, you could connect signals to the dbstate, open windows, etc.&lt;br /&gt;
&lt;br /&gt;
Another example of what one can do with the plugin interface is to create a general purpose plugin framework for use by other plugins. Here is the basis for a plugin system that:&lt;br /&gt;
&lt;br /&gt;
* allows plugins to list data files&lt;br /&gt;
* allows the plugin to process all of the data files&lt;br /&gt;
&lt;br /&gt;
First, the gpr.py file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = &amp;quot;ID&amp;quot;,&lt;br /&gt;
  category = &amp;quot;CATEGORY&amp;quot;,&lt;br /&gt;
  load_on_reg = True,&lt;br /&gt;
  process = &amp;quot;FUNCTION_NAME&amp;quot;,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example uses three new features:&lt;br /&gt;
&lt;br /&gt;
# GENERAL plugins can have a category&lt;br /&gt;
# GENERAL plugins can have a load_on_reg function that returns data&lt;br /&gt;
# GENERAL plugins can have a function (called &amp;quot;process&amp;quot;) which will process the data&lt;br /&gt;
&lt;br /&gt;
If you (or someone else) create additional general plugins of this category, and they follow your load_on_reg data format API, then they could be used just like your original data. For example, here is an additional general plugin in the 'WEBSTUFF' category:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# anew.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = 'a new plugin',&lt;br /&gt;
  category = &amp;quot;WEBSTUFF&amp;quot;,&lt;br /&gt;
  version = '1.0',&lt;br /&gt;
  gramps_target_version = '3.4',&lt;br /&gt;
  data = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn't have load_on_reg = True, nor does it have a fname or process, but it does set the data directly in the .gpr.py file. Then we have the following results:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gui.pluginmanager import GuiPluginManager&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN = GuiPluginManager.get_instance()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN.get_plugin_data('WEBSTUFF')&lt;br /&gt;
[&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;Stylesheet.css&amp;quot;, &amp;quot;Another.css&amp;quot;]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN.process_plugin_data('WEBSTUFF')&lt;br /&gt;
[&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;STYLESHEET.CSS&amp;quot;, &amp;quot;ANOTHER.CSS&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Registered GENERAL Categories ===&lt;br /&gt;
&lt;br /&gt;
The following are the published secondary plugins API's (type GENERAL, with the following categories):&lt;br /&gt;
&lt;br /&gt;
==== WEBSTUFF ====&lt;br /&gt;
&lt;br /&gt;
A sample gpr.py file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# stylesheet.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = 'system stylesheets',&lt;br /&gt;
  category = &amp;quot;WEBSTUFF&amp;quot;,&lt;br /&gt;
  name  = _(&amp;quot;CSS Stylesheets&amp;quot;),&lt;br /&gt;
  description =  _(&amp;quot;Provides a collection of stylesheets for the web&amp;quot;),&lt;br /&gt;
  version = '1.0',&lt;br /&gt;
  gramps_target_version = '3.4',&lt;br /&gt;
  fname = &amp;quot;stylesheet.py&amp;quot;,&lt;br /&gt;
  load_on_reg = True,&lt;br /&gt;
  process = &amp;quot;process_list&amp;quot;,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the associated program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: stylesheet.py&lt;br /&gt;
&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Runs when plugin is registered.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return [&amp;quot;Stylesheet.css&amp;quot;, &amp;quot;Another.css&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
def process_list(files):&lt;br /&gt;
    return [file.upper() for file in files]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Filters ====&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(GENERAL,&lt;br /&gt;
   category=&amp;quot;Filters&amp;quot;,&lt;br /&gt;
   ...&lt;br /&gt;
   load_on_reg = True&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    # returns a function that takes a namespace, 'Person', 'Family', etc.&lt;br /&gt;
&lt;br /&gt;
    def filters(namespace):&lt;br /&gt;
        print &amp;quot;Ok...&amp;quot;, plugin.category, namespace, uistate&lt;br /&gt;
        # return a Filter object here&lt;br /&gt;
    return filters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get translators to translate your addon into multiple languages ==&lt;br /&gt;
&lt;br /&gt;
# Initialize and update the template.pot for your addon:&lt;br /&gt;
## ./make.py init NewProjectName&lt;br /&gt;
# Initialize a language for your addon (say French, fr):&lt;br /&gt;
## ./make.py init NewProjectName fr&lt;br /&gt;
# Update it from gramps and other addons:&lt;br /&gt;
## ./make.py update NewProjectName fr&lt;br /&gt;
# Edit contrib/NewProjectName/po/fr-local.po&lt;br /&gt;
# Compile the language:&lt;br /&gt;
## ./make.py compile NewProjectName&lt;br /&gt;
# Add or update your local language file, and commit changes:&lt;br /&gt;
## svn add NewProjectName/po/fr-local.po&lt;br /&gt;
## svn commit NewProjectName/po/fr-local.po -m &amp;quot;Added fr po file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Package your addon ==&lt;br /&gt;
&lt;br /&gt;
To create a downloadable package:&lt;br /&gt;
&lt;br /&gt;
 python make.py build NewProjectName&lt;br /&gt;
&lt;br /&gt;
That will build and copy your addon to ../download&lt;br /&gt;
&lt;br /&gt;
NOTE: Running the '''make.py build''' will increment the third number in your dotted version number of all addons in the gpr.py file. Consider this number to be a &amp;quot;build number&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== List your addon in the Gramps Plugin Manager==&lt;br /&gt;
''New for Gramps 3.4'': You need to then make your addon available in listings of various languages. &lt;br /&gt;
&lt;br /&gt;
'''Make sure you have already built gramps34 or trunk'''&lt;br /&gt;
&lt;br /&gt;
To create a listing:&lt;br /&gt;
&lt;br /&gt;
 python make.py listing&lt;br /&gt;
&lt;br /&gt;
That will create a series of files in the ../listings/ &lt;br /&gt;
&lt;br /&gt;
Then add the package to SVN:&lt;br /&gt;
&lt;br /&gt;
 svn add ../download/NewProjectName.addon.tgz ../listings/*&lt;br /&gt;
 cd ..&lt;br /&gt;
 svn commit -m &amp;quot;Message describing changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== List and document your addon on the wiki==&lt;br /&gt;
&lt;br /&gt;
Document the addon in the wiki using the name '''&amp;quot;Addon:NewProjectName&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
Edit [[Plugins3.4]] or [[Plugins4.0]] and describe your addon. You can point to the addon.tgz in SVN as the downloadable file. &lt;br /&gt;
&lt;br /&gt;
== Miscellaneous commands ==&lt;br /&gt;
&lt;br /&gt;
To build and compile translations for all projects to their download/Addon.addon.tgz files:&lt;br /&gt;
&lt;br /&gt;
 python make.py build all&lt;br /&gt;
&lt;br /&gt;
To compile translations for all projects :&lt;br /&gt;
&lt;br /&gt;
 python make.py compile all&lt;br /&gt;
&lt;br /&gt;
== Support it through issue tracker ==&lt;br /&gt;
&lt;br /&gt;
Visit http://www.gramps-project.org/bugs/view_all_bug_page.php and become a user. Suggest to check it regularly.&lt;br /&gt;
&lt;br /&gt;
== Maintain the code as Gramps continues to evolve ==&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
* https://sourceforge.net/p/gramps-addons/ - Gramps Addons site &lt;br /&gt;
&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Developers/Tutorials]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Reports]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addons_development&amp;diff=46593</id>
		<title>Addons development</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addons_development&amp;diff=46593"/>
		<updated>2013-10-08T09:03:37Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* Config */ Fixed the names of the variables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{man warn|Warning:|This page documents the API, methods, and best practices for developing a 3rd-party addon for Gramps 3.2 and later }}&lt;br /&gt;
&lt;br /&gt;
Addons for Gramps can extend the program in many different ways. You can add any of the following [http://svn.code.sf.net/p/gramps/code/trunk/gramps/gen/plug/_pluginreg.py types] of addons:&lt;br /&gt;
&lt;br /&gt;
#Report&lt;br /&gt;
#Quickreport&lt;br /&gt;
#Tool&lt;br /&gt;
#Importer&lt;br /&gt;
#Exporter&lt;br /&gt;
#Doc creator&lt;br /&gt;
#Plugin lib&lt;br /&gt;
#Map service&lt;br /&gt;
#Gramps View&lt;br /&gt;
#Relationships&lt;br /&gt;
#Gramplet&lt;br /&gt;
#Sidebar&lt;br /&gt;
&lt;br /&gt;
Writing an addon is fairly straightforward if you have just a little bit of Python experience. And sharing your addon is the right thing to do. The general steps to writing an addon and sharing your own addons are:&lt;br /&gt;
&lt;br /&gt;
# Develop your addon&lt;br /&gt;
# Create a Gramps Plugin Registration file (.gpr.py)&lt;br /&gt;
# Get translators to translate your addon into multiple languages&lt;br /&gt;
# Package your addon&lt;br /&gt;
# List and document your addon&lt;br /&gt;
# Support it through issue tracker&lt;br /&gt;
# Maintain the code as Gramps continues to evolve&lt;br /&gt;
&lt;br /&gt;
We'll now look at each of these steps in detail.&lt;br /&gt;
&lt;br /&gt;
== Develop your addon ==&lt;br /&gt;
&lt;br /&gt;
The [http://svn.code.sf.net/p/gramps-addons/code/ gramps-addons] subversion repository has the following structure:&lt;br /&gt;
&lt;br /&gt;
* /gramps-addons&lt;br /&gt;
** /trunk&lt;br /&gt;
*** /contrib&lt;br /&gt;
*** /download&lt;br /&gt;
** /branches&lt;br /&gt;
*** /gramps{{stable_branch}}&lt;br /&gt;
*** /gramps32&lt;br /&gt;
**** /contrib&lt;br /&gt;
**** /download&lt;br /&gt;
&lt;br /&gt;
The contrib subdirectories hold the source code for the addons for a particular version. If you are working on a addon for gramps{{stable_branch}} then you should be working in gramps-addons/branches/gramps{{stable_branch}}/contrib. If you are working in gramps/trunk then you should use gramps-addons/trunk/contrib.&lt;br /&gt;
&lt;br /&gt;
==== Setup the addon development tools====&lt;br /&gt;
These steps show how to download and work with the addon development tools.&lt;br /&gt;
&lt;br /&gt;
{{man tip| 1=Tip |2=To use make.py as shown throughout this document, you may have to use:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;GRAMPSPATH=/path/to/gramps python make.py ...&amp;lt;/pre&amp;gt; &amp;lt;br /&amp;gt; if the default (&amp;quot;../../..&amp;quot;) is not correct.}}&lt;br /&gt;
&lt;br /&gt;
# Checkout the gramps-addons files from the [https://sourceforge.net/projects/gramps-addons/ gramps-addons] project:&lt;br /&gt;
## cd into gramps trunk, for example:&lt;br /&gt;
### cd ~/gramps/trunk&lt;br /&gt;
## Checkout gramps-addons:&lt;br /&gt;
### svn co https://svn.code.sf.net/p/gramps-addons/code gramps-addons&lt;br /&gt;
## Change to trunk or branches/gramps{{stable_branch}} directory:&lt;br /&gt;
### cd gramps-addons/branches/gramps{{stable_branch}}/contrib&lt;br /&gt;
# Make a new project directory in gramps-addon/branches/gramps{{stable_branch}}/contrib:&lt;br /&gt;
## mkdir NewProjectName&lt;br /&gt;
# Initialize the addon:&lt;br /&gt;
## ./make.py init NewProjectName&lt;br /&gt;
&lt;br /&gt;
===Follow the development API for your tool===&lt;br /&gt;
Follow the development API for your tool, [[Report-writing_tutorial|report]], view, or [[Gramplets]]. Place all of your associated .py, .glade, etc. files in this directory. For general information on Gramps development see [[Portal:Developers]] and [[Writing a Plugin]] specifically.&lt;br /&gt;
&lt;br /&gt;
=== Test your addon as you develop ===&lt;br /&gt;
To test your addon as you develop it it is suggested that you replace your Gramps user plugin directory with a link to your addon development directory, like so:&lt;br /&gt;
&lt;br /&gt;
 cd ~/.gramps/gramps{{stable_branch}}/&lt;br /&gt;
 mv plugins/* /wherever/trunk/gramps-addons/branches/gramps{{stable_branch}}/contrib/&lt;br /&gt;
 rm -rf plugins&lt;br /&gt;
 ln -s /wherever/trunk/gramps-addons/branches/gramps{{stable_branch}}/contrib plugins&lt;br /&gt;
&lt;br /&gt;
Gramps will search this folder (and subdirectories) for .grp.py files, and add them to the plugin list.&lt;br /&gt;
&lt;br /&gt;
If you have code that you want to share between addons, you don't need to do anything special. Currently, Gramps adds each directory in which a .gpr.py is found onto the PYTHONPATH which is searched when you perform an import. Thus &amp;quot;import NewProjectName&amp;quot; will work from another addon. You should always make sure you name your addons with a name appropriate for Python imports.&lt;br /&gt;
&lt;br /&gt;
=== Commit your changes ===&lt;br /&gt;
&lt;br /&gt;
To commit your changes so that others can use your addon, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Get an http://sourceforge.net account if you don't already have one.&lt;br /&gt;
# Request SVN write access for the gramps-addon project by emailing one of the admins of the project (listed under the gramps-addon title next to the group icon) from http://sourceforge.net/projects/gramps-addons/&lt;br /&gt;
# Remove the files that should not be added to SVN:&lt;br /&gt;
## ./make.py clean NewProjectName&lt;br /&gt;
# Add the project to the repository:&lt;br /&gt;
## svn add NewProjectName&lt;br /&gt;
## svn commit -m &amp;quot;A message describing what this addon is&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Before making additional edits to your addon, you should:&lt;br /&gt;
&lt;br /&gt;
# svn update&lt;br /&gt;
# svn status&lt;br /&gt;
# svn commit -m &amp;quot;A message describing the changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Config ===&lt;br /&gt;
&lt;br /&gt;
Some addons may want to have persistent data (data settings that remain between sessions). You can handle this yourself, or you can use Gramps' built-in configure system. &lt;br /&gt;
&lt;br /&gt;
At the top of the source file of your addon, you would do this:&lt;br /&gt;
&lt;br /&gt;
 from config import config as configman&lt;br /&gt;
 config = configman.register_manager(&amp;quot;grampletname&amp;quot;)&lt;br /&gt;
 # register the values to save:&lt;br /&gt;
 config.register(&amp;quot;section.option-name1&amp;quot;, value1)&lt;br /&gt;
 config.register(&amp;quot;section.option-name2&amp;quot;, value2)&lt;br /&gt;
 ...&lt;br /&gt;
 # load an existing file, if one:&lt;br /&gt;
 config.load()&lt;br /&gt;
 # save it, it case it didn't exist:&lt;br /&gt;
 config.save()&lt;br /&gt;
&lt;br /&gt;
This will create the file &amp;quot;grampletname.ini&amp;quot; and put in the same directory as the addon. If the settings file already exists, it remains intact.&lt;br /&gt;
&lt;br /&gt;
In the addon, you can then:&lt;br /&gt;
&lt;br /&gt;
 x = config.get(&amp;quot;section.option-name1&amp;quot;)&lt;br /&gt;
 config.set(&amp;quot;section.option-name1&amp;quot;, 3)&lt;br /&gt;
&lt;br /&gt;
and when this code is exiting, you might want to save the config. In a Gramplet that would be:&lt;br /&gt;
&lt;br /&gt;
 def on_save(self):&lt;br /&gt;
     config.save()&lt;br /&gt;
&lt;br /&gt;
If your code is a system-level file, then you might want to save the config in the Gramps system folder:&lt;br /&gt;
&lt;br /&gt;
 config = configman.register_manager(&amp;quot;system&amp;quot;, use_config_path=True)&lt;br /&gt;
&lt;br /&gt;
This, however, would be rare; most .ini files would go into the plugins directory.&lt;br /&gt;
&lt;br /&gt;
In other code that might use this config file, you would do this:&lt;br /&gt;
&lt;br /&gt;
 from config import config as configman&lt;br /&gt;
 config = configman.get_manager(&amp;quot;grampletname&amp;quot;)&lt;br /&gt;
 x = config.get(&amp;quot;section.option-name1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Localization ===&lt;br /&gt;
&lt;br /&gt;
For general help on translations in Gramps, see [[Coding for translation]]. However, that will only use translations that come with Gramps, or allows you to contribute translations to the Gramps core. To have your own managed translations that will be packaged with your addon, read the rest of this page.&lt;br /&gt;
&lt;br /&gt;
For any addon which you have translations into other languages, you will need to add a way to retrieve the translation. You need to add this to the top of your NewProjectName.py file:&lt;br /&gt;
==== For Gramps 3: ====&lt;br /&gt;
 from TransUtils import get_addon_translator&lt;br /&gt;
 _ = get_addon_translator(__file__).gettext&lt;br /&gt;
&lt;br /&gt;
==== For Gramps 4: ====&lt;br /&gt;
&lt;br /&gt;
 from gramps.gen.const import GRAMPS_LOCALE as glocale&lt;br /&gt;
 _ = glocale.get_addon_translator(__file__).gettext&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can use the standard &amp;quot;_()&amp;quot; function to translate phrases in your addon. &lt;br /&gt;
&lt;br /&gt;
You can use one of a few different types of translation functions:&lt;br /&gt;
&lt;br /&gt;
# gettext&lt;br /&gt;
# lgettext&lt;br /&gt;
# ngettext&lt;br /&gt;
# lngettext&lt;br /&gt;
# sgettext&lt;br /&gt;
&lt;br /&gt;
Gramps 3 also provides:&lt;br /&gt;
&lt;br /&gt;
# ugettext&lt;br /&gt;
# ungettext&lt;br /&gt;
&lt;br /&gt;
These have become obsolete in Gramps 4; gettext, ngettext, and sgettext always return translated strings in unicode for consistent portability between Python 2 and Python3.&lt;br /&gt;
&lt;br /&gt;
See the [http://docs.python.org/3/library/gettext.html#the-gnutranslations-class python documentation] for documentation of gettext and ngettext. The &amp;quot;l&amp;quot; versions return the string encoded according to the [http://docs.python.org/3/library/locale.html#locale.setlocale currently set locale]; the &amp;quot;u&amp;quot; versions return unicode strings in Python2 and are not available in Python 3.&lt;br /&gt;
&lt;br /&gt;
'''sgettext''' is a Gramps extension that filters out clarifying comments for translators, such as&lt;br /&gt;
 _(&amp;quot;Remaining names | rest&amp;quot;)&lt;br /&gt;
Where &amp;quot;rest&amp;quot; is the English string that we want to present and &amp;quot;Remaining names&amp;quot; is a hint for translators.&lt;br /&gt;
&lt;br /&gt;
== Create a Gramps Plugin Registration file ==&lt;br /&gt;
&lt;br /&gt;
First, create the NewProjectName.gpr.py file. The registration takes this general form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(PTYPE,&lt;br /&gt;
     gramps_target_version = &amp;quot;3.4&amp;quot;,&lt;br /&gt;
     version = &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
     ATTR = value,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PTYPE is TOOL, GRAMPLET, REPORT, QUICKVIEW, IMPORT, EXPORT, DOCGEN, GENERAL, MAPSERVICE, VIEW, or RELCALC.&lt;br /&gt;
&lt;br /&gt;
ATTR depends on the PTYPE. But you must have '''gramps_target_version''' and '''version'''. gramps_target_version should be a string of the form &amp;quot;X.Y&amp;quot; version number matching Gramps X major, Y minor integer. version is a string of the form &amp;quot;X.Y.Z&amp;quot; representing the version of your addon. X, Y, and Z should all be integers.&lt;br /&gt;
&lt;br /&gt;
Here is a sample Tool GPR file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(TOOL, &lt;br /&gt;
         id    = 'AttachSource',&lt;br /&gt;
         name  = _(&amp;quot;Attach Source&amp;quot;),&lt;br /&gt;
         description =  _(&amp;quot;Attaches a shared source to multiple objects.&amp;quot;),&lt;br /&gt;
         version = '1.0.0',&lt;br /&gt;
         gramps_target_version = '3.4',&lt;br /&gt;
         status = STABLE,&lt;br /&gt;
         fname = 'AttachSourceTool.py',&lt;br /&gt;
         authors = [&amp;quot;Douglas S. Blank&amp;quot;],&lt;br /&gt;
         authors_email = [&amp;quot;doug.blank@gmail.com&amp;quot;],&lt;br /&gt;
         category = TOOL_DBPROC,&lt;br /&gt;
         toolclass = 'AttachSourceWindow',&lt;br /&gt;
         optionclass = 'AttachSourceOptions',&lt;br /&gt;
         tool_modes = [TOOL_MODE_GUI]&lt;br /&gt;
         )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see examples of the kinds of addons [http://svn.code.sf.net/p/gramps/code/trunk/gramps/plugins/ here] (for example, see [http://svn.code.sf.net/p/gramps/code/trunk/gramps/plugins/drawreport/drawplugins.gpr.py trunk/gramps/plugins/drawreport/drawplugins.gpr.py]) and see the full documentation [http://svn.code.sf.net/p/gramps/code/trunk/gramps/gen/plug/_pluginreg.py here] in the comments and docstrings.&lt;br /&gt;
&lt;br /&gt;
Note that this .gpr.py will automatically use translations if you have them (see below). That is, the function &amp;quot;_&amp;quot; is predefined to use your locale translations; you only need to mark the text with _(&amp;quot;TEXT&amp;quot;) and include a translation of &amp;quot;TEXT&amp;quot; in your translation file. For example, in the above example, _(&amp;quot;Attach Source&amp;quot;) is marked for translation. If you have developed and packaged your addon with translation support, then that phrase will be converted into the user's language.&lt;br /&gt;
&lt;br /&gt;
=== Report plugins ===&lt;br /&gt;
The possible report categories are (gen/plug/_pluginreg.py):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#possible report categories&lt;br /&gt;
CATEGORY_TEXT       = 0&lt;br /&gt;
CATEGORY_DRAW       = 1&lt;br /&gt;
CATEGORY_CODE       = 2&lt;br /&gt;
CATEGORY_WEB        = 3&lt;br /&gt;
CATEGORY_BOOK       = 4&lt;br /&gt;
CATEGORY_GRAPHVIZ   = 5&lt;br /&gt;
REPORT_CAT          = [ CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_CODE,&lt;br /&gt;
                        CATEGORY_WEB, CATEGORY_BOOK, CATEGORY_GRAPHVIZ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each report category has a set of standards and interface. The categories CATEGORY_TEXT and CATEGORY_DRAW use the Document interface of Gramps. See also [[Report API]] for a draft view on this.&lt;br /&gt;
The application programming interface or API for reports is treated at [[Report-writing_tutorial]]. For general information on Gramps development see [[Portal:Developers]] and [[Writing a plugin]] specifically.&lt;br /&gt;
&lt;br /&gt;
=== General plugins ===&lt;br /&gt;
&lt;br /&gt;
The plugin framework also allows you to create generic plugins for use. This includes the ability to create libraries of functions, and plugins of your own design.&lt;br /&gt;
&lt;br /&gt;
==== Example: A library of functions ====&lt;br /&gt;
&lt;br /&gt;
In this example, a file name library.py will be imported at time of registration (when Gramps starts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: library.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
   id    = 'My Library',&lt;br /&gt;
   name  = _(&amp;quot;My Library&amp;quot;),&lt;br /&gt;
   description =  _(&amp;quot;Provides a library for doing something.&amp;quot;),&lt;br /&gt;
   version = '1.0',&lt;br /&gt;
   gramps_target_version = '3.4',&lt;br /&gt;
   status = STABLE,&lt;br /&gt;
   fname = 'library.py',&lt;br /&gt;
   load_on_reg = True,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code in the file library.py will be imported when Gramps begins. You can access the loaded module in other code by issuing an &amp;quot;import library&amp;quot; as Python keeps track of files already imported. However, the amount of useful code that you can run when the program is imported is limited. You might like to have the code do something that requires a dbstate or uistate object, and neither of these is available when just importing a file.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;load_on_reg&amp;quot; was not True, then this code would be unavailable until manually loaded. There is no automatic mechanism in Gramps to load GENERAL plugins automatically.&lt;br /&gt;
&lt;br /&gt;
In addition to importing a file at startup, one can also run a single function inside a GENERAL plugin, and it will be passed the dbstate, the uistate, and the plugin data. The function must be called &amp;quot;load_on_reg&amp;quot;, and take those three parameters, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: library.py&lt;br /&gt;
&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Runs when plugin is registered.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    print &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, you could connect signals to the dbstate, open windows, etc.&lt;br /&gt;
&lt;br /&gt;
Another example of what one can do with the plugin interface is to create a general purpose plugin framework for use by other plugins. Here is the basis for a plugin system that:&lt;br /&gt;
&lt;br /&gt;
* allows plugins to list data files&lt;br /&gt;
* allows the plugin to process all of the data files&lt;br /&gt;
&lt;br /&gt;
First, the gpr.py file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = &amp;quot;ID&amp;quot;,&lt;br /&gt;
  category = &amp;quot;CATEGORY&amp;quot;,&lt;br /&gt;
  load_on_reg = True,&lt;br /&gt;
  process = &amp;quot;FUNCTION_NAME&amp;quot;,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example uses three new features:&lt;br /&gt;
&lt;br /&gt;
# GENERAL plugins can have a category&lt;br /&gt;
# GENERAL plugins can have a load_on_reg function that returns data&lt;br /&gt;
# GENERAL plugins can have a function (called &amp;quot;process&amp;quot;) which will process the data&lt;br /&gt;
&lt;br /&gt;
If you (or someone else) create additional general plugins of this category, and they follow your load_on_reg data format API, then they could be used just like your original data. For example, here is an additional general plugin in the 'WEBSTUFF' category:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# anew.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = 'a new plugin',&lt;br /&gt;
  category = &amp;quot;WEBSTUFF&amp;quot;,&lt;br /&gt;
  version = '1.0',&lt;br /&gt;
  gramps_target_version = '3.4',&lt;br /&gt;
  data = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn't have load_on_reg = True, nor does it have a fname or process, but it does set the data directly in the .gpr.py file. Then we have the following results:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gui.pluginmanager import GuiPluginManager&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN = GuiPluginManager.get_instance()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN.get_plugin_data('WEBSTUFF')&lt;br /&gt;
[&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;Stylesheet.css&amp;quot;, &amp;quot;Another.css&amp;quot;]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN.process_plugin_data('WEBSTUFF')&lt;br /&gt;
[&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;STYLESHEET.CSS&amp;quot;, &amp;quot;ANOTHER.CSS&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Registered GENERAL Categories ===&lt;br /&gt;
&lt;br /&gt;
The following are the published secondary plugins API's (type GENERAL, with the following categories):&lt;br /&gt;
&lt;br /&gt;
==== WEBSTUFF ====&lt;br /&gt;
&lt;br /&gt;
A sample gpr.py file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# stylesheet.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = 'system stylesheets',&lt;br /&gt;
  category = &amp;quot;WEBSTUFF&amp;quot;,&lt;br /&gt;
  name  = _(&amp;quot;CSS Stylesheets&amp;quot;),&lt;br /&gt;
  description =  _(&amp;quot;Provides a collection of stylesheets for the web&amp;quot;),&lt;br /&gt;
  version = '1.0',&lt;br /&gt;
  gramps_target_version = '3.4',&lt;br /&gt;
  fname = &amp;quot;stylesheet.py&amp;quot;,&lt;br /&gt;
  load_on_reg = True,&lt;br /&gt;
  process = &amp;quot;process_list&amp;quot;,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the associated program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: stylesheet.py&lt;br /&gt;
&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Runs when plugin is registered.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return [&amp;quot;Stylesheet.css&amp;quot;, &amp;quot;Another.css&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
def process_list(files):&lt;br /&gt;
    return [file.upper() for file in files]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Filters ====&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(GENERAL,&lt;br /&gt;
   category=&amp;quot;Filters&amp;quot;,&lt;br /&gt;
   ...&lt;br /&gt;
   load_on_reg = True&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    # returns a function that takes a namespace, 'Person', 'Family', etc.&lt;br /&gt;
&lt;br /&gt;
    def filters(namespace):&lt;br /&gt;
        print &amp;quot;Ok...&amp;quot;, plugin.category, namespace, uistate&lt;br /&gt;
        # return a Filter object here&lt;br /&gt;
    return filters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get translators to translate your addon into multiple languages ==&lt;br /&gt;
&lt;br /&gt;
# Initialize and update the template.pot for your addon:&lt;br /&gt;
## ./make.py init NewProjectName&lt;br /&gt;
# Initialize a language for your addon (say French, fr):&lt;br /&gt;
## ./make.py init NewProjectName fr&lt;br /&gt;
# Update it from gramps and other addons:&lt;br /&gt;
## ./make.py update NewProjectName fr&lt;br /&gt;
# Edit contrib/NewProjectName/po/fr-local.po&lt;br /&gt;
# Compile the language:&lt;br /&gt;
## ./make.py compile NewProjectName&lt;br /&gt;
# Add or update your local language file, and commit changes:&lt;br /&gt;
## svn add NewProjectName/po/fr-local.po&lt;br /&gt;
## svn commit NewProjectName/po/fr-local.po -m &amp;quot;Added fr po file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Package your addon ==&lt;br /&gt;
&lt;br /&gt;
To create a downloadable package:&lt;br /&gt;
&lt;br /&gt;
 python make.py build NewProjectName&lt;br /&gt;
&lt;br /&gt;
That will build and copy your addon to ../download&lt;br /&gt;
&lt;br /&gt;
NOTE: Running the '''make.py build''' will increment the third number in your dotted version number of all addons in the gpr.py file. Consider this number to be a &amp;quot;build number&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== List your addon in the Gramps Plugin Manager==&lt;br /&gt;
''New for Gramps 3.4'': You need to then make your addon available in listings of various languages. &lt;br /&gt;
&lt;br /&gt;
'''Make sure you have already built gramps34 or trunk'''&lt;br /&gt;
&lt;br /&gt;
To create a listing:&lt;br /&gt;
&lt;br /&gt;
 python make.py listing&lt;br /&gt;
&lt;br /&gt;
That will create a series of files in the ../listings/ &lt;br /&gt;
&lt;br /&gt;
Then add the package to SVN:&lt;br /&gt;
&lt;br /&gt;
 svn add ../download/NewProjectName.addon.tgz ../listings/*&lt;br /&gt;
 cd ..&lt;br /&gt;
 svn commit -m &amp;quot;Message describing changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== List and document your addon on the wiki==&lt;br /&gt;
&lt;br /&gt;
Document the addon in the wiki using the name '''&amp;quot;Addon:NewProjectName&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
Edit [[Plugins3.4]] or [[Plugins4.0]] and describe your addon. You can point to the addon.tgz in SVN as the downloadable file. &lt;br /&gt;
&lt;br /&gt;
== Miscellaneous commands ==&lt;br /&gt;
&lt;br /&gt;
To build and compile translations for all projects to their download/Addon.addon.tgz files:&lt;br /&gt;
&lt;br /&gt;
 python make.py build all&lt;br /&gt;
&lt;br /&gt;
To compile translations for all projects :&lt;br /&gt;
&lt;br /&gt;
 python make.py compile all&lt;br /&gt;
&lt;br /&gt;
== Support it through issue tracker ==&lt;br /&gt;
&lt;br /&gt;
Visit http://www.gramps-project.org/bugs/view_all_bug_page.php and become a user. Suggest to check it regularly.&lt;br /&gt;
&lt;br /&gt;
== Maintain the code as Gramps continues to evolve ==&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
* https://sourceforge.net/p/gramps-addons/ - Gramps Addons site &lt;br /&gt;
&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Developers/Tutorials]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Reports]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addons_development&amp;diff=46592</id>
		<title>Addons development</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addons_development&amp;diff=46592"/>
		<updated>2013-10-08T09:02:06Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* Config */ Modified example of config initialisation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{man warn|Warning:|This page documents the API, methods, and best practices for developing a 3rd-party addon for Gramps 3.2 and later }}&lt;br /&gt;
&lt;br /&gt;
Addons for Gramps can extend the program in many different ways. You can add any of the following [http://svn.code.sf.net/p/gramps/code/trunk/gramps/gen/plug/_pluginreg.py types] of addons:&lt;br /&gt;
&lt;br /&gt;
#Report&lt;br /&gt;
#Quickreport&lt;br /&gt;
#Tool&lt;br /&gt;
#Importer&lt;br /&gt;
#Exporter&lt;br /&gt;
#Doc creator&lt;br /&gt;
#Plugin lib&lt;br /&gt;
#Map service&lt;br /&gt;
#Gramps View&lt;br /&gt;
#Relationships&lt;br /&gt;
#Gramplet&lt;br /&gt;
#Sidebar&lt;br /&gt;
&lt;br /&gt;
Writing an addon is fairly straightforward if you have just a little bit of Python experience. And sharing your addon is the right thing to do. The general steps to writing an addon and sharing your own addons are:&lt;br /&gt;
&lt;br /&gt;
# Develop your addon&lt;br /&gt;
# Create a Gramps Plugin Registration file (.gpr.py)&lt;br /&gt;
# Get translators to translate your addon into multiple languages&lt;br /&gt;
# Package your addon&lt;br /&gt;
# List and document your addon&lt;br /&gt;
# Support it through issue tracker&lt;br /&gt;
# Maintain the code as Gramps continues to evolve&lt;br /&gt;
&lt;br /&gt;
We'll now look at each of these steps in detail.&lt;br /&gt;
&lt;br /&gt;
== Develop your addon ==&lt;br /&gt;
&lt;br /&gt;
The [http://svn.code.sf.net/p/gramps-addons/code/ gramps-addons] subversion repository has the following structure:&lt;br /&gt;
&lt;br /&gt;
* /gramps-addons&lt;br /&gt;
** /trunk&lt;br /&gt;
*** /contrib&lt;br /&gt;
*** /download&lt;br /&gt;
** /branches&lt;br /&gt;
*** /gramps{{stable_branch}}&lt;br /&gt;
*** /gramps32&lt;br /&gt;
**** /contrib&lt;br /&gt;
**** /download&lt;br /&gt;
&lt;br /&gt;
The contrib subdirectories hold the source code for the addons for a particular version. If you are working on a addon for gramps{{stable_branch}} then you should be working in gramps-addons/branches/gramps{{stable_branch}}/contrib. If you are working in gramps/trunk then you should use gramps-addons/trunk/contrib.&lt;br /&gt;
&lt;br /&gt;
==== Setup the addon development tools====&lt;br /&gt;
These steps show how to download and work with the addon development tools.&lt;br /&gt;
&lt;br /&gt;
{{man tip| 1=Tip |2=To use make.py as shown throughout this document, you may have to use:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;GRAMPSPATH=/path/to/gramps python make.py ...&amp;lt;/pre&amp;gt; &amp;lt;br /&amp;gt; if the default (&amp;quot;../../..&amp;quot;) is not correct.}}&lt;br /&gt;
&lt;br /&gt;
# Checkout the gramps-addons files from the [https://sourceforge.net/projects/gramps-addons/ gramps-addons] project:&lt;br /&gt;
## cd into gramps trunk, for example:&lt;br /&gt;
### cd ~/gramps/trunk&lt;br /&gt;
## Checkout gramps-addons:&lt;br /&gt;
### svn co https://svn.code.sf.net/p/gramps-addons/code gramps-addons&lt;br /&gt;
## Change to trunk or branches/gramps{{stable_branch}} directory:&lt;br /&gt;
### cd gramps-addons/branches/gramps{{stable_branch}}/contrib&lt;br /&gt;
# Make a new project directory in gramps-addon/branches/gramps{{stable_branch}}/contrib:&lt;br /&gt;
## mkdir NewProjectName&lt;br /&gt;
# Initialize the addon:&lt;br /&gt;
## ./make.py init NewProjectName&lt;br /&gt;
&lt;br /&gt;
===Follow the development API for your tool===&lt;br /&gt;
Follow the development API for your tool, [[Report-writing_tutorial|report]], view, or [[Gramplets]]. Place all of your associated .py, .glade, etc. files in this directory. For general information on Gramps development see [[Portal:Developers]] and [[Writing a Plugin]] specifically.&lt;br /&gt;
&lt;br /&gt;
=== Test your addon as you develop ===&lt;br /&gt;
To test your addon as you develop it it is suggested that you replace your Gramps user plugin directory with a link to your addon development directory, like so:&lt;br /&gt;
&lt;br /&gt;
 cd ~/.gramps/gramps{{stable_branch}}/&lt;br /&gt;
 mv plugins/* /wherever/trunk/gramps-addons/branches/gramps{{stable_branch}}/contrib/&lt;br /&gt;
 rm -rf plugins&lt;br /&gt;
 ln -s /wherever/trunk/gramps-addons/branches/gramps{{stable_branch}}/contrib plugins&lt;br /&gt;
&lt;br /&gt;
Gramps will search this folder (and subdirectories) for .grp.py files, and add them to the plugin list.&lt;br /&gt;
&lt;br /&gt;
If you have code that you want to share between addons, you don't need to do anything special. Currently, Gramps adds each directory in which a .gpr.py is found onto the PYTHONPATH which is searched when you perform an import. Thus &amp;quot;import NewProjectName&amp;quot; will work from another addon. You should always make sure you name your addons with a name appropriate for Python imports.&lt;br /&gt;
&lt;br /&gt;
=== Commit your changes ===&lt;br /&gt;
&lt;br /&gt;
To commit your changes so that others can use your addon, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Get an http://sourceforge.net account if you don't already have one.&lt;br /&gt;
# Request SVN write access for the gramps-addon project by emailing one of the admins of the project (listed under the gramps-addon title next to the group icon) from http://sourceforge.net/projects/gramps-addons/&lt;br /&gt;
# Remove the files that should not be added to SVN:&lt;br /&gt;
## ./make.py clean NewProjectName&lt;br /&gt;
# Add the project to the repository:&lt;br /&gt;
## svn add NewProjectName&lt;br /&gt;
## svn commit -m &amp;quot;A message describing what this addon is&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Before making additional edits to your addon, you should:&lt;br /&gt;
&lt;br /&gt;
# svn update&lt;br /&gt;
# svn status&lt;br /&gt;
# svn commit -m &amp;quot;A message describing the changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Config ===&lt;br /&gt;
&lt;br /&gt;
Some addons may want to have persistent data (data settings that remain between sessions). You can handle this yourself, or you can use Gramps' built-in configure system. &lt;br /&gt;
&lt;br /&gt;
At the top of the source file of your addon, you would do this:&lt;br /&gt;
&lt;br /&gt;
 from config import config as configman&lt;br /&gt;
 config = configman.register_manager(&amp;quot;grampletname&amp;quot;)&lt;br /&gt;
 # register the values to save:&lt;br /&gt;
 config.register(&amp;quot;section.option-name1&amp;quot;, value1)&lt;br /&gt;
 config.register(&amp;quot;section.option-name2&amp;quot;, value2)&lt;br /&gt;
 ...&lt;br /&gt;
 # load an existing file, if one:&lt;br /&gt;
 config.load()&lt;br /&gt;
 # save it, it case it didn't exist:&lt;br /&gt;
 config.save()&lt;br /&gt;
&lt;br /&gt;
This will create the file &amp;quot;grampletname.ini&amp;quot; and put in the same directory as the addon. If the settings file already exists, it remains intact.&lt;br /&gt;
&lt;br /&gt;
In the addon, you can then:&lt;br /&gt;
&lt;br /&gt;
 x = cm.get(&amp;quot;section.option-name1&amp;quot;)&lt;br /&gt;
 cm.set(&amp;quot;section.option-name1&amp;quot;, 3)&lt;br /&gt;
&lt;br /&gt;
and when this code is exiting, you might want to save the config. In a Gramplet that would be:&lt;br /&gt;
&lt;br /&gt;
 def on_save(self):&lt;br /&gt;
     cm.save()&lt;br /&gt;
&lt;br /&gt;
If your code is a system-level file, then you might want to save the config in the Gramps system folder:&lt;br /&gt;
&lt;br /&gt;
 cm = config.register_manager(&amp;quot;system&amp;quot;, use_config_path=True)&lt;br /&gt;
&lt;br /&gt;
This, however, would be rare; most .ini files would go into the plugins directory.&lt;br /&gt;
&lt;br /&gt;
In other code that might use this config file, you would do this:&lt;br /&gt;
&lt;br /&gt;
 from config import config&lt;br /&gt;
 cm = config.get_manager(&amp;quot;grampletname&amp;quot;)&lt;br /&gt;
 x = cm.get(&amp;quot;section.option-name1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Localization ===&lt;br /&gt;
&lt;br /&gt;
For general help on translations in Gramps, see [[Coding for translation]]. However, that will only use translations that come with Gramps, or allows you to contribute translations to the Gramps core. To have your own managed translations that will be packaged with your addon, read the rest of this page.&lt;br /&gt;
&lt;br /&gt;
For any addon which you have translations into other languages, you will need to add a way to retrieve the translation. You need to add this to the top of your NewProjectName.py file:&lt;br /&gt;
==== For Gramps 3: ====&lt;br /&gt;
 from TransUtils import get_addon_translator&lt;br /&gt;
 _ = get_addon_translator(__file__).gettext&lt;br /&gt;
&lt;br /&gt;
==== For Gramps 4: ====&lt;br /&gt;
&lt;br /&gt;
 from gramps.gen.const import GRAMPS_LOCALE as glocale&lt;br /&gt;
 _ = glocale.get_addon_translator(__file__).gettext&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then you can use the standard &amp;quot;_()&amp;quot; function to translate phrases in your addon. &lt;br /&gt;
&lt;br /&gt;
You can use one of a few different types of translation functions:&lt;br /&gt;
&lt;br /&gt;
# gettext&lt;br /&gt;
# lgettext&lt;br /&gt;
# ngettext&lt;br /&gt;
# lngettext&lt;br /&gt;
# sgettext&lt;br /&gt;
&lt;br /&gt;
Gramps 3 also provides:&lt;br /&gt;
&lt;br /&gt;
# ugettext&lt;br /&gt;
# ungettext&lt;br /&gt;
&lt;br /&gt;
These have become obsolete in Gramps 4; gettext, ngettext, and sgettext always return translated strings in unicode for consistent portability between Python 2 and Python3.&lt;br /&gt;
&lt;br /&gt;
See the [http://docs.python.org/3/library/gettext.html#the-gnutranslations-class python documentation] for documentation of gettext and ngettext. The &amp;quot;l&amp;quot; versions return the string encoded according to the [http://docs.python.org/3/library/locale.html#locale.setlocale currently set locale]; the &amp;quot;u&amp;quot; versions return unicode strings in Python2 and are not available in Python 3.&lt;br /&gt;
&lt;br /&gt;
'''sgettext''' is a Gramps extension that filters out clarifying comments for translators, such as&lt;br /&gt;
 _(&amp;quot;Remaining names | rest&amp;quot;)&lt;br /&gt;
Where &amp;quot;rest&amp;quot; is the English string that we want to present and &amp;quot;Remaining names&amp;quot; is a hint for translators.&lt;br /&gt;
&lt;br /&gt;
== Create a Gramps Plugin Registration file ==&lt;br /&gt;
&lt;br /&gt;
First, create the NewProjectName.gpr.py file. The registration takes this general form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(PTYPE,&lt;br /&gt;
     gramps_target_version = &amp;quot;3.4&amp;quot;,&lt;br /&gt;
     version = &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
     ATTR = value,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PTYPE is TOOL, GRAMPLET, REPORT, QUICKVIEW, IMPORT, EXPORT, DOCGEN, GENERAL, MAPSERVICE, VIEW, or RELCALC.&lt;br /&gt;
&lt;br /&gt;
ATTR depends on the PTYPE. But you must have '''gramps_target_version''' and '''version'''. gramps_target_version should be a string of the form &amp;quot;X.Y&amp;quot; version number matching Gramps X major, Y minor integer. version is a string of the form &amp;quot;X.Y.Z&amp;quot; representing the version of your addon. X, Y, and Z should all be integers.&lt;br /&gt;
&lt;br /&gt;
Here is a sample Tool GPR file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(TOOL, &lt;br /&gt;
         id    = 'AttachSource',&lt;br /&gt;
         name  = _(&amp;quot;Attach Source&amp;quot;),&lt;br /&gt;
         description =  _(&amp;quot;Attaches a shared source to multiple objects.&amp;quot;),&lt;br /&gt;
         version = '1.0.0',&lt;br /&gt;
         gramps_target_version = '3.4',&lt;br /&gt;
         status = STABLE,&lt;br /&gt;
         fname = 'AttachSourceTool.py',&lt;br /&gt;
         authors = [&amp;quot;Douglas S. Blank&amp;quot;],&lt;br /&gt;
         authors_email = [&amp;quot;doug.blank@gmail.com&amp;quot;],&lt;br /&gt;
         category = TOOL_DBPROC,&lt;br /&gt;
         toolclass = 'AttachSourceWindow',&lt;br /&gt;
         optionclass = 'AttachSourceOptions',&lt;br /&gt;
         tool_modes = [TOOL_MODE_GUI]&lt;br /&gt;
         )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see examples of the kinds of addons [http://svn.code.sf.net/p/gramps/code/trunk/gramps/plugins/ here] (for example, see [http://svn.code.sf.net/p/gramps/code/trunk/gramps/plugins/drawreport/drawplugins.gpr.py trunk/gramps/plugins/drawreport/drawplugins.gpr.py]) and see the full documentation [http://svn.code.sf.net/p/gramps/code/trunk/gramps/gen/plug/_pluginreg.py here] in the comments and docstrings.&lt;br /&gt;
&lt;br /&gt;
Note that this .gpr.py will automatically use translations if you have them (see below). That is, the function &amp;quot;_&amp;quot; is predefined to use your locale translations; you only need to mark the text with _(&amp;quot;TEXT&amp;quot;) and include a translation of &amp;quot;TEXT&amp;quot; in your translation file. For example, in the above example, _(&amp;quot;Attach Source&amp;quot;) is marked for translation. If you have developed and packaged your addon with translation support, then that phrase will be converted into the user's language.&lt;br /&gt;
&lt;br /&gt;
=== Report plugins ===&lt;br /&gt;
The possible report categories are (gen/plug/_pluginreg.py):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#possible report categories&lt;br /&gt;
CATEGORY_TEXT       = 0&lt;br /&gt;
CATEGORY_DRAW       = 1&lt;br /&gt;
CATEGORY_CODE       = 2&lt;br /&gt;
CATEGORY_WEB        = 3&lt;br /&gt;
CATEGORY_BOOK       = 4&lt;br /&gt;
CATEGORY_GRAPHVIZ   = 5&lt;br /&gt;
REPORT_CAT          = [ CATEGORY_TEXT, CATEGORY_DRAW, CATEGORY_CODE,&lt;br /&gt;
                        CATEGORY_WEB, CATEGORY_BOOK, CATEGORY_GRAPHVIZ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each report category has a set of standards and interface. The categories CATEGORY_TEXT and CATEGORY_DRAW use the Document interface of Gramps. See also [[Report API]] for a draft view on this.&lt;br /&gt;
The application programming interface or API for reports is treated at [[Report-writing_tutorial]]. For general information on Gramps development see [[Portal:Developers]] and [[Writing a plugin]] specifically.&lt;br /&gt;
&lt;br /&gt;
=== General plugins ===&lt;br /&gt;
&lt;br /&gt;
The plugin framework also allows you to create generic plugins for use. This includes the ability to create libraries of functions, and plugins of your own design.&lt;br /&gt;
&lt;br /&gt;
==== Example: A library of functions ====&lt;br /&gt;
&lt;br /&gt;
In this example, a file name library.py will be imported at time of registration (when Gramps starts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: library.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
   id    = 'My Library',&lt;br /&gt;
   name  = _(&amp;quot;My Library&amp;quot;),&lt;br /&gt;
   description =  _(&amp;quot;Provides a library for doing something.&amp;quot;),&lt;br /&gt;
   version = '1.0',&lt;br /&gt;
   gramps_target_version = '3.4',&lt;br /&gt;
   status = STABLE,&lt;br /&gt;
   fname = 'library.py',&lt;br /&gt;
   load_on_reg = True,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code in the file library.py will be imported when Gramps begins. You can access the loaded module in other code by issuing an &amp;quot;import library&amp;quot; as Python keeps track of files already imported. However, the amount of useful code that you can run when the program is imported is limited. You might like to have the code do something that requires a dbstate or uistate object, and neither of these is available when just importing a file.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;load_on_reg&amp;quot; was not True, then this code would be unavailable until manually loaded. There is no automatic mechanism in Gramps to load GENERAL plugins automatically.&lt;br /&gt;
&lt;br /&gt;
In addition to importing a file at startup, one can also run a single function inside a GENERAL plugin, and it will be passed the dbstate, the uistate, and the plugin data. The function must be called &amp;quot;load_on_reg&amp;quot;, and take those three parameters, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: library.py&lt;br /&gt;
&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Runs when plugin is registered.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    print &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, you could connect signals to the dbstate, open windows, etc.&lt;br /&gt;
&lt;br /&gt;
Another example of what one can do with the plugin interface is to create a general purpose plugin framework for use by other plugins. Here is the basis for a plugin system that:&lt;br /&gt;
&lt;br /&gt;
* allows plugins to list data files&lt;br /&gt;
* allows the plugin to process all of the data files&lt;br /&gt;
&lt;br /&gt;
First, the gpr.py file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = &amp;quot;ID&amp;quot;,&lt;br /&gt;
  category = &amp;quot;CATEGORY&amp;quot;,&lt;br /&gt;
  load_on_reg = True,&lt;br /&gt;
  process = &amp;quot;FUNCTION_NAME&amp;quot;,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example uses three new features:&lt;br /&gt;
&lt;br /&gt;
# GENERAL plugins can have a category&lt;br /&gt;
# GENERAL plugins can have a load_on_reg function that returns data&lt;br /&gt;
# GENERAL plugins can have a function (called &amp;quot;process&amp;quot;) which will process the data&lt;br /&gt;
&lt;br /&gt;
If you (or someone else) create additional general plugins of this category, and they follow your load_on_reg data format API, then they could be used just like your original data. For example, here is an additional general plugin in the 'WEBSTUFF' category:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# anew.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = 'a new plugin',&lt;br /&gt;
  category = &amp;quot;WEBSTUFF&amp;quot;,&lt;br /&gt;
  version = '1.0',&lt;br /&gt;
  gramps_target_version = '3.4',&lt;br /&gt;
  data = [&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;],&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn't have load_on_reg = True, nor does it have a fname or process, but it does set the data directly in the .gpr.py file. Then we have the following results:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from gui.pluginmanager import GuiPluginManager&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN = GuiPluginManager.get_instance()&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN.get_plugin_data('WEBSTUFF')&lt;br /&gt;
[&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;Stylesheet.css&amp;quot;, &amp;quot;Another.css&amp;quot;]&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; PLUGMAN.process_plugin_data('WEBSTUFF')&lt;br /&gt;
[&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;STYLESHEET.CSS&amp;quot;, &amp;quot;ANOTHER.CSS&amp;quot;]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Registered GENERAL Categories ===&lt;br /&gt;
&lt;br /&gt;
The following are the published secondary plugins API's (type GENERAL, with the following categories):&lt;br /&gt;
&lt;br /&gt;
==== WEBSTUFF ====&lt;br /&gt;
&lt;br /&gt;
A sample gpr.py file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# stylesheet.gpr.py&lt;br /&gt;
&lt;br /&gt;
register(GENERAL, &lt;br /&gt;
  id    = 'system stylesheets',&lt;br /&gt;
  category = &amp;quot;WEBSTUFF&amp;quot;,&lt;br /&gt;
  name  = _(&amp;quot;CSS Stylesheets&amp;quot;),&lt;br /&gt;
  description =  _(&amp;quot;Provides a collection of stylesheets for the web&amp;quot;),&lt;br /&gt;
  version = '1.0',&lt;br /&gt;
  gramps_target_version = '3.4',&lt;br /&gt;
  fname = &amp;quot;stylesheet.py&amp;quot;,&lt;br /&gt;
  load_on_reg = True,&lt;br /&gt;
  process = &amp;quot;process_list&amp;quot;,&lt;br /&gt;
  )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the associated program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# file: stylesheet.py&lt;br /&gt;
&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Runs when plugin is registered.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return [&amp;quot;Stylesheet.css&amp;quot;, &amp;quot;Another.css&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
def process_list(files):&lt;br /&gt;
    return [file.upper() for file in files]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Filters ====&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register(GENERAL,&lt;br /&gt;
   category=&amp;quot;Filters&amp;quot;,&lt;br /&gt;
   ...&lt;br /&gt;
   load_on_reg = True&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def load_on_reg(dbstate, uistate, plugin):&lt;br /&gt;
    # returns a function that takes a namespace, 'Person', 'Family', etc.&lt;br /&gt;
&lt;br /&gt;
    def filters(namespace):&lt;br /&gt;
        print &amp;quot;Ok...&amp;quot;, plugin.category, namespace, uistate&lt;br /&gt;
        # return a Filter object here&lt;br /&gt;
    return filters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get translators to translate your addon into multiple languages ==&lt;br /&gt;
&lt;br /&gt;
# Initialize and update the template.pot for your addon:&lt;br /&gt;
## ./make.py init NewProjectName&lt;br /&gt;
# Initialize a language for your addon (say French, fr):&lt;br /&gt;
## ./make.py init NewProjectName fr&lt;br /&gt;
# Update it from gramps and other addons:&lt;br /&gt;
## ./make.py update NewProjectName fr&lt;br /&gt;
# Edit contrib/NewProjectName/po/fr-local.po&lt;br /&gt;
# Compile the language:&lt;br /&gt;
## ./make.py compile NewProjectName&lt;br /&gt;
# Add or update your local language file, and commit changes:&lt;br /&gt;
## svn add NewProjectName/po/fr-local.po&lt;br /&gt;
## svn commit NewProjectName/po/fr-local.po -m &amp;quot;Added fr po file&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Package your addon ==&lt;br /&gt;
&lt;br /&gt;
To create a downloadable package:&lt;br /&gt;
&lt;br /&gt;
 python make.py build NewProjectName&lt;br /&gt;
&lt;br /&gt;
That will build and copy your addon to ../download&lt;br /&gt;
&lt;br /&gt;
NOTE: Running the '''make.py build''' will increment the third number in your dotted version number of all addons in the gpr.py file. Consider this number to be a &amp;quot;build number&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== List your addon in the Gramps Plugin Manager==&lt;br /&gt;
''New for Gramps 3.4'': You need to then make your addon available in listings of various languages. &lt;br /&gt;
&lt;br /&gt;
'''Make sure you have already built gramps34 or trunk'''&lt;br /&gt;
&lt;br /&gt;
To create a listing:&lt;br /&gt;
&lt;br /&gt;
 python make.py listing&lt;br /&gt;
&lt;br /&gt;
That will create a series of files in the ../listings/ &lt;br /&gt;
&lt;br /&gt;
Then add the package to SVN:&lt;br /&gt;
&lt;br /&gt;
 svn add ../download/NewProjectName.addon.tgz ../listings/*&lt;br /&gt;
 cd ..&lt;br /&gt;
 svn commit -m &amp;quot;Message describing changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== List and document your addon on the wiki==&lt;br /&gt;
&lt;br /&gt;
Document the addon in the wiki using the name '''&amp;quot;Addon:NewProjectName&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
Edit [[Plugins3.4]] or [[Plugins4.0]] and describe your addon. You can point to the addon.tgz in SVN as the downloadable file. &lt;br /&gt;
&lt;br /&gt;
== Miscellaneous commands ==&lt;br /&gt;
&lt;br /&gt;
To build and compile translations for all projects to their download/Addon.addon.tgz files:&lt;br /&gt;
&lt;br /&gt;
 python make.py build all&lt;br /&gt;
&lt;br /&gt;
To compile translations for all projects :&lt;br /&gt;
&lt;br /&gt;
 python make.py compile all&lt;br /&gt;
&lt;br /&gt;
== Support it through issue tracker ==&lt;br /&gt;
&lt;br /&gt;
Visit http://www.gramps-project.org/bugs/view_all_bug_page.php and become a user. Suggest to check it regularly.&lt;br /&gt;
&lt;br /&gt;
== Maintain the code as Gramps continues to evolve ==&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
* https://sourceforge.net/p/gramps-addons/ - Gramps Addons site &lt;br /&gt;
&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Developers/Tutorials]]&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Reports]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46591</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46591"/>
		<updated>2013-10-08T08:56:48Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: /* To do */ Removed the features that have been implemented&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Progress bar while detection is performed&lt;br /&gt;
* Settings dialog&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46581</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46581"/>
		<updated>2013-10-05T11:07:10Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* GIMP-like resizing of selection boxes&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Progress bar while detection is performed&lt;br /&gt;
* Settings dialog&lt;br /&gt;
* Thumbnail images of people in the list&lt;br /&gt;
* Integrate with Picasa&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46580</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46580"/>
		<updated>2013-10-05T10:49:06Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Added Todo section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to {{man menu|Edit -&amp;gt; Preferences}} and click the {{man button|Check now}} button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
== To do ==&lt;br /&gt;
* Good manual on this page&lt;br /&gt;
* GIMP-like resizing of selection boxes&lt;br /&gt;
* Detection of faces across multiple images&lt;br /&gt;
* Progress bar while detection is performed&lt;br /&gt;
* Settings dialog&lt;br /&gt;
* Thumbnail images of people in the list&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46458</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46458"/>
		<updated>2013-09-15T16:30:38Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Created usage section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to Edit -&amp;gt; Preferences and click the 'Check now' button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
To tag a person, select a region of the image by pressing the left mouse button in one of its corners and dragging the pointer across the desired area. A rectangular frame will mark the selected area. Use the toolbar to select an existing person or add a new person to be associated with the region.&lt;br /&gt;
&lt;br /&gt;
To modify a region, press the left mouse button over one of the corners and drag it to its new position.&lt;br /&gt;
&lt;br /&gt;
To associate a region with a different person, click within the region and use the toolbar buttons to select or add a person. In this case, the previous association is discarded.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46435</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46435"/>
		<updated>2013-09-14T08:42:50Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Aglebov moved page PhotoTaggingGramplet to Photo Tagging Gramplet: Include spaces in the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to Edit -&amp;gt; Preferences and click the 'Check now' button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=PhotoTaggingGramplet&amp;diff=46436</id>
		<title>PhotoTaggingGramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=PhotoTaggingGramplet&amp;diff=46436"/>
		<updated>2013-09-14T08:42:50Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Aglebov moved page PhotoTaggingGramplet to Photo Tagging Gramplet: Include spaces in the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Photo Tagging Gramplet]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46433</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46433"/>
		<updated>2013-09-14T08:42:22Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Aglebov moved page Addon:PhotoTaggingGramplet to PhotoTaggingGramplet: Other plugin pages do not include Addon: in the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to Edit -&amp;gt; Preferences and click the 'Check now' button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:PhotoTaggingGramplet&amp;diff=46434</id>
		<title>Addon:PhotoTaggingGramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:PhotoTaggingGramplet&amp;diff=46434"/>
		<updated>2013-09-14T08:42:22Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Aglebov moved page Addon:PhotoTaggingGramplet to PhotoTaggingGramplet: Other plugin pages do not include Addon: in the title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[PhotoTaggingGramplet]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46432</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46432"/>
		<updated>2013-09-14T08:28:16Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to Edit -&amp;gt; Preferences and click the 'Check now' button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv provides the Python bindings for the library. It will require the core library packages (libopencv-*), as well as python-numpy package, to be installed. If OpenCV is not found, the automatic detection feature will be unavailable, but the gramplet should otherwise function correctly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
	<entry>
		<id>https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46431</id>
		<title>Addon:Photo Tagging Gramplet</title>
		<link rel="alternate" type="text/html" href="https://gramps-project.org/wiki/index.php?title=Addon:Photo_Tagging_Gramplet&amp;diff=46431"/>
		<updated>2013-09-14T08:24:44Z</updated>

		<summary type="html">&lt;p&gt;Aglebov: Description of PhotoTaggingGramplet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Photo_Tagging_view.jpg|500px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
== What is Photo Tagging Gramplet ==&lt;br /&gt;
&lt;br /&gt;
'''Photo Tagging Gramplet''' facilitates tagging people in photographs, i.e. associating regions of images with Gramps persons.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
* Image preview with scrolling and zooming&lt;br /&gt;
* List of persons tagged in the current photograph&lt;br /&gt;
* Adding and modifying regions and associations&lt;br /&gt;
* Detecting faces automatically&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
The Photo Tagging gramplet can be installed from within Gramps. Go to Edit -&amp;gt; Preferences and click the 'Check now' button to see a list of plugins which are not installed on your computer.&lt;br /&gt;
 &lt;br /&gt;
Automatic detection of faces requires the following to be installed:&lt;br /&gt;
* OpenCV, its dependencies and Python bindings. This library should be available in common Linux distributions. For example, Debian package python-opencv.&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
[[Category:Developers/General]]&lt;br /&gt;
[[Category:Gramplets]]&lt;/div&gt;</summary>
		<author><name>Aglebov</name></author>
		
	</entry>
</feed>