# Scripting

**URL:** https://forum.glyphsapp.com/c/scripting/6.md

[Latest](https://forum.glyphsapp.com/latest.md) · [Categories](https://forum.glyphsapp.com/categories.md) · [Tags](https://forum.glyphsapp.com/tags.md)

---

## [About the Scripting category](https://forum.glyphsapp.com/t/about-the-scripting-category/12)

<div class="topic-metadata">

**Author:** [@system](https://forum.glyphsapp.com/u/system)\
**Replies:** 0\
**Last updated:** [March 25, 2015, 9:28pm UTC](https://forum.glyphsapp.com/t/about-the-scripting-category/12 "2015-03-25T21:28:22Z")

</div>

Writing macros, scripts, plug-ins, programming with Python, and any other extension development.

---

## [Can't skew with Glyphs.drawingTools](https://forum.glyphsapp.com/t/cant-skew-with-glyphs-drawingtools/37387)

<div class="topic-metadata">

**Author:** [@jkutilek](https://forum.glyphsapp.com/u/jkutilek)\
**Replies:** 3\
**Last updated:** [October 1, 2026, 5:20pm UTC](https://forum.glyphsapp.com/t/cant-skew-with-glyphs-drawingtools/37387 "2026-10-01T17:20:58Z")

</div>

from GlyphsApp.drawingTools import skew skew(0.1) Traceback (most recent call last): File "Macro 2.py", line 3 skew(0.1) ~~~~^^^^^ File "/GlyphsApp/drawingTools.py", line 242, in skew Transform.shearXBy\_yBy\_(a, b) …

---

## [Glyphs 4: instance.generate = Return type is None, but should be bool/list](https://forum.glyphsapp.com/t/glyphs-4-instance-generate-return-type-is-none-but-should-be-bool-list/37229)

<div class="topic-metadata">

**Author:** [@Olli](https://forum.glyphsapp.com/u/Olli)\
**Replies:** 1\
**Last updated:** [September 8, 2026, 12:00pm UTC](https://forum.glyphsapp.com/t/glyphs-4-instance-generate-return-type-is-none-but-should-be-bool-list/37229 "2026-09-08T12:00:35Z")

</div>

Hi Georg, it looks like the return type of instance.generate() has changed with Glyphs 4. The Return type used to be bool/list, but is None within Glyphs 4. Try this code: from GlyphsApp import Glyphs, INSTANCETYPEVA…

---

## [What happened to GSFontInfoValue in G4?](https://forum.glyphsapp.com/t/what-happened-to-gsfontinfovalue-in-g4/37206)

<div class="topic-metadata">

**Author:** [@jkutilek](https://forum.glyphsapp.com/u/jkutilek)\
**Replies:** 9\
**Last updated:** [September 7, 2026, 11:05am UTC](https://forum.glyphsapp.com/t/what-happened-to-gsfontinfovalue-in-g4/37206 "2026-09-07T11:05:41Z")

</div>

I’m constructing GSFontInfoValue in Glyphs 3, and add it to the font. But the script doesn’t run anymore in Glyphs 4: ImportError: cannot import name 'GSFontInfoValue' from 'GlyphsApp' (/Applications/Glyphs 4.app/Conten…

---

## [GSFont vs. GSInterpolationFontProxy](https://forum.glyphsapp.com/t/gsfont-vs-gsinterpolationfontproxy/37104)

<div class="topic-metadata">

**Author:** [@jkutilek](https://forum.glyphsapp.com/u/jkutilek)\
**Replies:** 3\
**Last updated:** [August 25, 2026, 10:57am UTC](https://forum.glyphsapp.com/t/gsfont-vs-gsinterpolationfontproxy/37104 "2026-08-25T10:57:48Z")

</div>

When drawing with a reporter plugin, I often need to get values from the parent font of the current layer. In G4, the parent now switches from a GSFont to GSInterpolationFontProxy when I view an interpolation. That means…

---

## [How to control the UI of a GSCustomParameter](https://forum.glyphsapp.com/t/how-to-control-the-ui-of-a-gscustomparameter/37107)

<div class="topic-metadata">

**Author:** [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Replies:** 1\
**Last updated:** [August 24, 2026, 5:55pm UTC](https://forum.glyphsapp.com/t/how-to-control-the-ui-of-a-gscustomparameter/37107 "2026-08-24T17:55:43Z")

</div>

I would like to set a custom parameter, but also control how it looks. In my specific case, I would like to make it a text window popup, to enter a list of characters. But I would also be interested in knowing how to, fo…

---

## [Contextual alternatives in script font - is this possible?](https://forum.glyphsapp.com/t/contextual-alternatives-in-script-font-is-this-possible/37052)

<div class="topic-metadata">

**Author:** [@Kai\_Steel](https://forum.glyphsapp.com/u/Kai_Steel)\
**Replies:** 4\
**Last updated:** [August 19, 2026, 4:55pm UTC](https://forum.glyphsapp.com/t/contextual-alternatives-in-script-font-is-this-possible/37052 "2026-08-19T16:55:02Z")

</div>

Is it possible to activate the contextual alternatives in the image? If I type ‘e’ it’s fairly easy to make the next letter an ‘m.002’ in this case, but once the ‘m.002’ is triggered, the ‘e’ would need to turn into …

---

## [\[4004\] Adding a glyph to a font adds additional layers](https://forum.glyphsapp.com/t/4004-adding-a-glyph-to-a-font-adds-additional-layers/37060)

<div class="topic-metadata">

**Author:** [@jkutilek](https://forum.glyphsapp.com/u/jkutilek)\
**Replies:** 1\
**Last updated:** [August 19, 2026, 1:14pm UTC](https://forum.glyphsapp.com/t/4004-adding-a-glyph-to-a-font-adds-additional-layers/37060 "2026-08-19T13:14:48Z")

</div>

I want to build a glyph with all layers before adding it to the font, then finally add it. After running the script, there’s an additional layer called “(empty)” in the glyph. from GlyphsApp import Glyphs, GSFont, GSGly…

---

## [GSHandle and layer.selectionBounds](https://forum.glyphsapp.com/t/gshandle-and-layer-selectionbounds/36916)

<div class="topic-metadata">

**Author:** [@harbortype](https://forum.glyphsapp.com/u/harbortype)\
**Replies:** 3\
**Last updated:** [August 5, 2026, 12:10pm UTC](https://forum.glyphsapp.com/t/gshandle-and-layer-selectionbounds/36916 "2026-08-05T12:10:46Z")

</div>

In Glyphs 4 (4000), if I have any GSHandle selected, layer.selectionBounds will not return the correct bounds of the selection.

---

## [\[4000\] Delete nodes via Python](https://forum.glyphsapp.com/t/4000-delete-nodes-via-python/36822)

<div class="topic-metadata">

**Author:** [@jkutilek](https://forum.glyphsapp.com/u/jkutilek)\
**Replies:** 3\
**Last updated:** [July 28, 2026, 2:13pm UTC](https://forum.glyphsapp.com/t/4000-delete-nodes-via-python/36822 "2026-07-28T14:13:54Z")

</div>

This used to work in G3: path = Layer.paths\[0\] del path.nodes\[0\] But now I get: Traceback (most recent call last): File "Macro 1.py", line 2 File "\_\_init\_\_.py", line 776, in \_\_delitem\_\_ self.removeByIndex(idx)…

---

## [Distance-based interpolation between cuts in a text/ creating curve of tension within static text](https://forum.glyphsapp.com/t/distance-based-interpolation-between-cuts-in-a-text-creating-curve-of-tension-within-static-text/36660)

<div class="topic-metadata">

**Author:** [@ffelix](https://forum.glyphsapp.com/u/ffelix)\
**Replies:** 9\
**Last updated:** [July 3, 2026, 10:20am UTC](https://forum.glyphsapp.com/t/distance-based-interpolation-between-cuts-in-a-text-creating-curve-of-tension-within-static-text/36660 "2026-07-03T10:20:26Z")

</div>

Hey Guys, I am currently working on my master-thesis in communication design. My topic is the impact of Characteristics and Techniques in Graphic Design and Typography on the Design of Type. My project consists of a Ty…

---

## [Changing the order of the layers with Python](https://forum.glyphsapp.com/t/changing-the-order-of-the-layers-with-python/12443)

<div class="topic-metadata">

**Author:** [@bagsn](https://forum.glyphsapp.com/u/bagsn)\
**Replies:** 10\
**Last updated:** [June 27, 2026, 6:35pm UTC](https://forum.glyphsapp.com/t/changing-the-order-of-the-layers-with-python/12443 "2026-06-27T18:35:51Z")

</div>

Hi! I tried to change the order of the layers within python, but since the Layer object is neither an array neither a dictionary but a \<objective-c class GSLayer at 0x10fbde728\> I don’t know how to do. It seems like I c…

---

## [Better way to select a created anchor?](https://forum.glyphsapp.com/t/better-way-to-select-a-created-anchor/36591)

<div class="topic-metadata">

**Author:** [@kontur](https://forum.glyphsapp.com/u/kontur)\
**Replies:** 4\
**Last updated:** [June 23, 2026, 11:37am UTC](https://forum.glyphsapp.com/t/better-way-to-select-a-created-anchor/36591 "2026-06-23T11:37:51Z")

</div>

This: anchors = \[\] for a in l.anchors: if a.name == "bottom": dupe = a.copy() dupe.name = "cedilla" dupe.selected = True # anchor not in the glyph yet, causes error anchors.append(dupe) anchors.a…

---

## [Pre-Interpolation filters?](https://forum.glyphsapp.com/t/pre-interpolation-filters/36499)

<div class="topic-metadata">

**Author:** [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Replies:** 9\
**Last updated:** [June 16, 2026, 1:51pm UTC](https://forum.glyphsapp.com/t/pre-interpolation-filters/36499 "2026-06-16T13:51:37Z")

</div>

Hello, is it possible to call a filter in an instance before it is interpolated? For example: I have a font which uses different corner components between masters. I want to decompose them (because they are compatible) b…

---

## [Font Info trademark statement](https://forum.glyphsapp.com/t/font-info-trademark-statement/18686)

<div class="topic-metadata">

**Author:** [@fredjonze](https://forum.glyphsapp.com/u/fredjonze)\
**Replies:** 13\
**Last updated:** [May 26, 2026, 5:21pm UTC](https://forum.glyphsapp.com/t/font-info-trademark-statement/18686 "2026-05-26T17:21:56Z")

</div>

I’m adapting the Font Info Batch Setting script for a specific use. I added the Font Name and License attributes, but I’m unable to find the Glyphs scripting attribute name for the ‘trademark statement’ (appears after th…

---

## [How to access list filter through script](https://forum.glyphsapp.com/t/how-to-access-list-filter-through-script/36423)

<div class="topic-metadata">

**Author:** [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Replies:** 1\
**Last updated:** [May 26, 2026, 5:14pm UTC](https://forum.glyphsapp.com/t/how-to-access-list-filter-through-script/36423 "2026-05-26T17:14:36Z")

</div>

Hello, I would like to add the contents of a list filter through a Python script. Is this possible?

---

## [Previewing on a separate monitor](https://forum.glyphsapp.com/t/previewing-on-a-separate-monitor/15807)

<div class="topic-metadata">

**Author:** [@giu](https://forum.glyphsapp.com/u/giu)\
**Replies:** 13\
**Last updated:** [May 25, 2026, 1:26pm UTC](https://forum.glyphsapp.com/t/previewing-on-a-separate-monitor/15807 "2026-05-25T13:26:38Z")

</div>

Is there any plugin out there that is specially made for previewing on a separate monitor? Would be quite nice actually if Glyphs had possibility of detatching windows instead of everything being fixed in tabs. That way …

---

## [How to get master stems horizontal or vertical separately](https://forum.glyphsapp.com/t/how-to-get-master-stems-horizontal-or-vertical-separately/36346)

<div class="topic-metadata">

**Author:** [@michaelrafailyk](https://forum.glyphsapp.com/u/michaelrafailyk)\
**Replies:** 4\
**Last updated:** [May 14, 2026, 11:37am UTC](https://forum.glyphsapp.com/t/how-to-get-master-stems-horizontal-or-vertical-separately/36346 "2026-05-14T11:37:21Z")

</div>

I saw older examples where it was possible to get master stems like this: master.horizontalStems master.verticalStems But it seems like this doesn’t work anymore. The newer examples (and also official documentation) o…

---

## [Is there a way to set a custom stroke end angle without modifying nodes or handles?](https://forum.glyphsapp.com/t/is-there-a-way-to-set-a-custom-stroke-end-angle-without-modifying-nodes-or-handles/36326)

<div class="topic-metadata">

**Author:** [@Hyunsokism](https://forum.glyphsapp.com/u/Hyunsokism)\
**Replies:** 4\
**Last updated:** [May 11, 2026, 10:55am UTC](https://forum.glyphsapp.com/t/is-there-a-way-to-set-a-custom-stroke-end-angle-without-modifying-nodes-or-handles/36326 "2026-05-11T10:55:30Z")

</div>

Hi, I’m developing a Korean typeface using stroke paths, and I need to set a custom angle for stroke endings — not just the built-in presets (vertical, horizontal, etc.). By comparing the .glyphs file before and after …

---

## [how can I get openBezierPath of a component?](https://forum.glyphsapp.com/t/how-can-i-get-openbezierpath-of-a-component/36277)

<div class="topic-metadata">

**Author:** [@Daekwon\_Kim](https://forum.glyphsapp.com/u/Daekwon_Kim)\
**Replies:** 4\
**Last updated:** [May 5, 2026, 8:04am UTC](https://forum.glyphsapp.com/t/how-can-i-get-openbezierpath-of-a-component/36277 "2026-05-05T08:04:04Z")

</div>

GSComponent provides an openBezierPath, but it appears to return incorrect values. layer = f.selectedLayers\[0\] for c in l.components: # from the current layer print(c.openBezierPath) # from the component…

---

## [How to access glyph.layers in objective-c class GSGlyph](https://forum.glyphsapp.com/t/how-to-access-glyph-layers-in-objective-c-class-gsglyph/36275)

<div class="topic-metadata">

**Author:** [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Replies:** 3\
**Last updated:** [May 3, 2026, 6:51pm UTC](https://forum.glyphsapp.com/t/how-to-access-glyph-layers-in-objective-c-class-gsglyph/36275 "2026-05-03T18:51:13Z")

</div>

Hello, I am running into an odd issue: I am using the method processFont\_withArguments\_() in a Python filter. When I run it on a variable font setting and try print(font.glyphs\[0\].layers), Glyphs immediately crashes. I…

---

## [Ink Trap Filter](https://forum.glyphsapp.com/t/ink-trap-filter/36251)

<div class="topic-metadata">

**Author:** [@knikola](https://forum.glyphsapp.com/u/knikola)\
**Replies:** 2\
**Last updated:** [April 29, 2026, 7:45pm UTC](https://forum.glyphsapp.com/t/ink-trap-filter/36251 "2026-04-29T19:45:58Z")

</div>

Hi everyone, Is there a way to add an Ink Trap Custom Parameter Filter to an instance? Something that would put a simple v-shaped ink trap on any corner smaller than e.g. 60 degrees?

---

## [Mekkablue Insert Instances window not showing up](https://forum.glyphsapp.com/t/mekkablue-insert-instances-window-not-showing-up/36249)

<div class="topic-metadata">

**Author:** [@Vii](https://forum.glyphsapp.com/u/Vii)\
**Replies:** 1\
**Last updated:** [April 29, 2026, 11:45am UTC](https://forum.glyphsapp.com/t/mekkablue-insert-instances-window-not-showing-up/36249 "2026-04-29T11:45:21Z")

</div>

I have the 3.4.1 version of Glyphs and 3.13.7 version of python for mekkablue (as well as vanilla that mekka is dependent on), however when I click insert instances while i’m in the exports tab, the window won’t show. I …

---

## [PickGlyphs issue](https://forum.glyphsapp.com/t/pickglyphs-issue/36235)

<div class="topic-metadata">

**Author:** [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Replies:** 5\
**Last updated:** [April 28, 2026, 5:00pm UTC](https://forum.glyphsapp.com/t/pickglyphs-issue/36235 "2026-04-28T17:00:49Z")

</div>

Hello, I wrote a small script to paste a component into the background in all masters. I used PickGlyphs, but I see that that method automatically pasted the selected glyph as a component into the current layer. Is this…

---

## [Running a filter on an instance](https://forum.glyphsapp.com/t/running-a-filter-on-an-instance/36194)

<div class="topic-metadata">

**Author:** [@SCarewe](https://forum.glyphsapp.com/u/SCarewe)\
**Replies:** 7\
**Last updated:** [April 25, 2026, 12:49pm UTC](https://forum.glyphsapp.com/t/running-a-filter-on-an-instance/36194 "2026-04-25T12:49:21Z")

</div>

Hi, I want to write a filter that runs once on the instance. I know about the “Process font with arguments” method, but does something similar exist for the instance on which the filter is called? Thanks!

---

## [Disabling draw call of inactive layer](https://forum.glyphsapp.com/t/disabling-draw-call-of-inactive-layer/33552)

<div class="topic-metadata">

**Author:** [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Replies:** 6\
**Last updated:** [April 23, 2026, 6:03pm UTC](https://forum.glyphsapp.com/t/disabling-draw-call-of-inactive-layer/33552 "2026-04-23T18:03:33Z")

</div>

I am developing a general plugin and want to disable the outline drawing in inactive layers, and found needsExtraMainOutlineDrawingForInactiveLayer\_(layer) but I can’t get it to work. I have this method in the class: d…

---

## [layer.bounds failure](https://forum.glyphsapp.com/t/layer-bounds-failure/36193)

<div class="topic-metadata">

**Author:** [@Tosche](https://forum.glyphsapp.com/u/Tosche)\
**Replies:** 4\
**Last updated:** [April 23, 2026, 5:17pm UTC](https://forum.glyphsapp.com/t/layer-bounds-failure/36193 "2026-04-23T17:17:59Z")

</div>

I’m working on a copied layer and want make changes after getting its bounds. I assign the parent and can get the bounds values fine, but the rest of the code seems to stop (I cannot apply affineTransform or simply move …

---

## [How to listen for whether the option key is pressed in the right-click menu?](https://forum.glyphsapp.com/t/how-to-listen-for-whether-the-option-key-is-pressed-in-the-right-click-menu/35369)

<div class="topic-metadata">

**Author:** [@Real](https://forum.glyphsapp.com/u/Real)\
**Replies:** 25\
**Last updated:** [April 22, 2026, 5:32pm UTC](https://forum.glyphsapp.com/t/how-to-listen-for-whether-the-option-key-is-pressed-in-the-right-click-menu/35369 "2026-04-22T17:32:50Z")

</div>

I use -(void)contextMenuCallback:(NSMenu \*)menu forSelectedLayers:(NSArray \*)glyphs event:(NSEvent \*)event create a NSMenuItem,and item.view is a customview,I want to change some control’s status in customview when …

---

## [Consecutive contextual alts](https://forum.glyphsapp.com/t/consecutive-contextual-alts/36059)

<div class="topic-metadata">

**Author:** [@maxmajoros](https://forum.glyphsapp.com/u/maxmajoros)\
**Replies:** 2\
**Last updated:** [March 31, 2026, 5:29pm UTC](https://forum.glyphsapp.com/t/consecutive-contextual-alts/36059 "2026-03-31T17:29:29Z")

</div>

Hello. I’m building a font with a contextual alternate lowercase ‘o’. The alternate version was built because I think it looks nicer when placed next to certain letters. (k, n, b, etc.) I’m also trying to keep the sty…

---

## [Substitute one glyph with another if space on both sides?](https://forum.glyphsapp.com/t/substitute-one-glyph-with-another-if-space-on-both-sides/414)

<div class="topic-metadata">

**Author:** [@Musgrapha](https://forum.glyphsapp.com/u/Musgrapha)\
**Replies:** 18\
**Last updated:** [March 26, 2026, 6:41pm UTC](https://forum.glyphsapp.com/t/substitute-one-glyph-with-another-if-space-on-both-sides/414 "2026-03-26T18:41:54Z")

</div>

I'm creating an all-caps comics font, where you usually want to substitute the "I" noun with a crossbar-I. I don't want the font to substitute all I's (for example, within any word) with a crossbar-I, only the ones that …

[Next page](https://forum.glyphsapp.com/c/scripting/6.md?page=1)
