Commons:File captions

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
File captions

File captions are a feature part of Structured data (the first part to be enabled). They are meant to store short, multilingual descriptions about files. See Help:File captions for more information. They were enabled on Wikimedia Commons in January 2019.

What makes a good caption?[edit]

Precise guidelines on file captions still have to be developed.

There are technical requirements (limited to 250 characters in length, and cannot contain markup) which necessarily make captions short.


How is this different from descriptions?[edit]

  • Captions are meant to be simple and short. While descriptions can be very expansive, captions are limited to 250 characters in length, cannot contain markup (like Wikitext links or HTML) and do not support external links.
  • Captions are available as part of our structured data, while descriptions are not. In technical terms, a description is plain wikitext wrapped in a language template, wrapped again in an Information template ; while captions are Wikibase labels. As such, they will be searchable through the API, making it easy to find/filter/pull captions from files as metadata.

In many cases, the caption will be similar or identical to the description (or even the file title!). For example, File:Fire station Hallstatt - October 2017 - 02.jpg has the English caption "Hallstatt fire station in October 2017".

Conversely, on Pluto-01 Stern 03 Pluto Color TXT.jpg there is a very extensive description (858 characters, and links) and the caption is much shorter (more or less the same caption used on the Wikipedia articles using that image).

Can't I (or a bot) simply copy descriptions into captions?[edit]

Firstly, captions are shorter than many descriptions; they cannot contain links, nor wiki-markup.

While it may be possible to copy short pieces of text from a description to a caption, this needs human interpretation.

Only text which is so short that it is not copyrightable should be copied into captions, as captions are published under a CC0 ("public domain") waiver.

What are the benefits of captions?[edit]

One of the core benefit is improved language-aware searchability. Classical file descriptions are in the wikitext, and are only searchable through full-text search, which necessarily searches through the entire page contents, including categories and license templates ; and it is not possible to do search per language. As they are searchable via the API, it is easier for 3rd party reusers to find and reuse media and the captions themselves.

Other possible usages can be:

  • filling in infoboxes
  • query files for missing captions in a given language
  • building lists for translation of important files needing a caption localized for a project or campaign

Where are captions stored?[edit]

Captions are stored on Wikimedia Commons, as part of Wikibase (and thus not as part of the wikitext). They are not stored on Wikidata. While Wikibase is indeed powering Wikidata, it is also deployed here on Wikimedia Commons.

How can I search by caption?[edit]

Users can search for files by their MediaInfo captions just as they would search for anything else. For example, if a user uploads a picture of the Eiffel Tower, and enters ‘Tour Eiffel’ (French) and ‘Eiffel Tower’ (English) as multilingual file captions, the picture is findable by another user searching for either ‘Eiffel Tower’ or ‘Tour Eiffel’.

Why are languages X Y and Z displayed for me?[edit]

If you are a logged in user the languages displayed are the ones listed in Babel boxes on your userpage.

How can I change the appearance of captions?[edit]

You may enable the following gadgets in your preferences (under “Interface: Files and categories”):

  • To collapse the caption block and add a link to expand it when needed: Collapse Captions (main script code, additional style code)
  • To make the captions block more compact: Compact Captions (code)
  • To hide the captions completely: Hide Captions (code)

Collapse Captions and Compact Captions can be combined if desired.

See in addition section Styling below.


How can I query the captions using the API?[edit]

API support is for now limited but will be improved soon.

You can retrieve captions using the wbgetentities module with the entity ID. For each file there is a Wikibase entity ID MXXXX, XXXX being the page_id. So for example, File:Pluto-01 Stern 03 Pluto Color TXT.jpg has the page ID 41837276, so the entity ID is M41837276, and you can query wbgetentities&ids=M41837276. An easy way to get the Mid is to use the API action=query&prop=info&titles=File:Pluto-01_Stern_03_Pluto_Color_TXT.jpg (the page ID is provided by the pageid field).

How can I query the captions using Lua/templates[edit]

From Lua you can access them using _SDC_Description function in Module:Information, which have template interface through {{File caption}} template.

How can I set captions at upload time?[edit]

Adding captions in the Upload Wizard.

You can already fill-in captions when uploading using the Upload Wizard. You can pre-fill a caption with URL-parameters caption and captionlang when calling the Upload Wizard via link e.g. in the context of an upload campaign.

For other upload methods, support will be added in the future − you may follow the work on different bug trackers, for Pywikibot, for the Commons Android app or for Pattypan.

How can I edit the captions using the API?[edit]

You could use the API wbsetlabel module with the Wikibase entity ID MXXXX (see the section about querying for more details).


The captions form field can be styled with Cascading Style Sheets. Add the rules into your common.css file or a browser addon like Stylus Userstyles Manager or xStyle. In the latter case you should use the provided restriction to Commons domain

Show caption in collapsed mode[edit]

With the gadget Collapse Captions you will in collapsed mode by default only see an empty box apart from the Expand string. The following will make the caption visible in this state (i.e. Captions in your language):

.mw-collapsible-content { display: initial !important; }
.mw-slot-header, .mw-collapsible-content *:not(.wbmi-entityview-captions-header)
	{ display: none; } .wbmi-entityview-captions-header	{
	display: block;
	border-bottom: none;
	margin-bottom: 0;
	padding-top: 0;
	font-style: italic;
	font-weight: normal;
.ltr .mw-collapsible-content .wbmi-entityview-captions-header { text-align: right; }
.rtl .mw-collapsible-content .wbmi-entityview-captions-header { text-align: left; }
.rtl .mw-collapsible-toggle { float: left; }


  • Because of the method, how the line numbers are inserted here in the presentation, in the copy of the rules you will see every second line being empty. You can safely delete these empty lines, if you want. There is actually some indentation with a tab character, too, which is also not shown here.
    This is valid for the following rules with line numbers below, as well.
  • Line 1: In tests the part !important was necessary. This will provoke a warning here in Commons in the code editor of common.css. Maybe it could be even left out when this file is used (tested only with browser addon).
  • Line 2: This will remove the header (Structured data in your language). If you want to have it displayed instead, delete this line including the comma.
  • Lines 10–12 are for formatting of the visible caption. If you want to have the default upright, bold string, delete these lines.
  • Lines 13–14: You probably need in most cases only either of these two rules, though it doesn’t matter if you copy them both. To decide which one you usually will need look at their beginning:
    • .ltr: left-to-right writing systems like Latin script (e.g. English).
    • .rtl: right-to-left writing systems like Arabian script.
If you want to have the default string at beginning (left for ltr, right for rtl systems), delete these lines.
  • Line 15 is only needed for rtl systems. It sends the toggle for collapsing and decollapsing to the left of the page. This rule will be active also for every toggle on all other Commons pages.

Further styling just for appearance, add this below the rules from above: .wbmi-entityview-captions-header::after { content: " …"; }
.wbmi-entityview-captionsPanel:not(.mw-collapsed) .wbmi-entityview-captions-header {
	border-bottom: none;
	text-decoration: underline;


  • Line 1: If the ellipsis inside of content: " …"; is not in the usual style of your language then replace it according to your taste, but do not omit the quote signs! If the added content is on the wrong side in your writing system then replace after with before.
  • Lines 2–5 are for the caption in uncollapsed mode. If you don’t want it to be underlined then delete line 4.

More compact collapsed mode[edit]

… but not that compact like with the gadget Compact Captions

.mw-slot-header { display: none; }
.wbmi-entityview-captionsPanel:not(.mw-collapsed) .wbmi-entityview-captions-header
	{ border-bottom: none; }
.wbmi-entityview-captionsPanel {
	border: none;
	margin-top: -1.5em;
.wbmi-entityview-captionsPanel .wbmi-entityview-captions-header {
	margin-bottom: 0;
	padding-top: 0;
.wbmi-entityview-captionsPanel .wbmi-entityview-entitycontent {
	padding: 0.3em 0;


  • If the block interferes with the preceding text block, then delete line 6 or at least reduce the amount of the value. margin-top: -0.5em; seems to be usable.
  • Lines 1–3 can be left out if you use the unchanged rules from above, but it does not cause harm if you add them twice, as long as you remember this in future edits.

Further styling just for appearance:

.wbmi-entityview-captions-header .wbmi-entityview-editButton { font-size: smaller; }
.ltr .wbmi-entityview-editButton { margin-left: 0.25em !important; }
.rtl .wbmi-entityview-editButton { margin-right: 0.25em !important; }
.wbmi-entityview-editButton::before { content: "("; }
.wbmi-entityview-editButton::after { content: ")"; }


  • Lines 2–3: Read notes above for .ltr and .rtl.
  • Lines 4–5: If you do not want to have parentheses around the edit string (Edit in your language) either delete both rules or replace them with your preferred characters inside of content: "…";, but do not omit the quote signs!