2026-04-18
Backward-incompatible changes:
- Dropped support for Python 3.9.
Changes:
- Fixed writing old chords in GP3 #48.
2025-11-16
Changes:
- Fixed writing long strings using
writeByteSizeString#47. - Fixed writing long notice lines.
- Refactored the IO methods in GPFileBase.
2025-08-31
Backward-incompatible changes:
- Dropped support for Python 3.7.
- Dropped support for Python 3.8.
- Removed the
guitarpro.__version__attribute.
Changes:
- Fixed
GP3File.getTiedNoteValue#46.
2023-02-22
Changes:
- Fixed
GraceEffect.durationTime#34. - Fixed hashing #31.
- Improved the type checking support for models.
- Fixed
Song.newMeasure.
2022-06-26
Changes:
- Enabled passing
bytesto theparseandwritefunctions.
2022-06-26
Changes:
- Enabled passing PathLike objects to the
parseandwritefunctions. - Fixed reading and writing measure headers in Guitar Pro 5.
2022-01-23
Backward-incompatible changes:
- Aligned the
GuitarStringrepresentation with scientific pitch notation. - Dropped support for Python 3.6.
Changes:
- Switched to the hash function generated by attrs.
2020-11-21
Backward-incompatible changes:
- Dropped support for Python 2.7.
- Dropped support for Python 3.4.
- Dropped support for Python 3.5.
- Removed the
Fingering.unknownmember. - Removed the misleading
MeasureHeader.tempoandMeasure.tempoattributes. - Removed the unused
Beat.indexattribute. - Removed the unused
Color.aattribute. - Removed the unused
MeasureHeader.hasMarkerproperty. - Removed the unused
BeatStroke.getIncrementTimemethod. - Removed the unused
Tempoclass. - Changed the
Beat.texttype tostrand removed theBeatTextclass. - Implemented lenient handling of unknown
Fingering,NoteType,ChordType,ChordExtensionvalues #18. - Functions
guitarpro.parseandguitarpro.writeno longer close the passed file object.
Changes:
- Added type hints.
- Annotated read and write errors with track, measure, voice, and beat numbers.
- Moved the
endproperty fromMeasuretoMeasureHeader. - Truncated the
MeasureHeader.repeatAlternativeto 8 bits when writing GP5 file. - Fixed the vibrato and harmonics when converting a GP3 file to the newer versions.
2020-09-25
Backward-incompatible changes:
- Removed the deprecated
Beat.realStartproperty. - Made
Tuplet.convertTime()andDuration.timereturnintfor whole times andFractionfor rational times.
Changes:
- Fixed creating durations from dotted tuplets #16.
2020-01-19
Backward-incompatible changes:
- Removed the deprecated
Duration.isDoubleDottedproperty.
Deprecations:
- Deprecated the usage of
Beat.realStartin favor ofBeat.startInMeasure. The former will be removed in the next release.
Changes:
- Updated attrs to at least 19.2.
2018-10-21
Backward-incompatible changes:
- Changed the implementation of
Duration.fromTimeand removed itsminimumanddiffarguments. Now it raises aValueErrorif given time cannot be displayed in Guitar Pro.
Deprecations:
- Deprecated the usage of
Duration.isDoubleDottedbecause it's not supported in Guitar Pro 3-5. Setting values to this attribute will issue a warning. The attribute will be completely removed in the next release.
Changes:
Fixed a bug that causes chord information to be lost #10.
Allowed 13-tuplets to be written.
Fixed hashing.
Removed wordy reprs on
Lyrics,Song,MeasureHeader,TrackRSE,Track,Measure,Voice,Beat,NoteEffectinstances. To see an object in somewhat human-readable form use the following snippet:import attr attr.astuple(track, recurse=False)
2018-04-14
Backward-incompatible changes:
Changed default instantiation behaviour of
Song,Track, andMeasureobjects #4. WhenTrackis created withoutmeasuresargument, it automatically creates aMeasureHeaderwith aMeasurethat has twoVoicesin it. To create a track without measures, do:track = guitarpro.Track(base_song, measures=[])
Changed how measure headers are compared. Comparing measures won't consider measure headers. Measure headers are stored in
Songinstances, so they will be compared there.Implemented gradual wah-wah changes. There's no
WahStateenum,WahEffectnow holds the exact value of wah-wah pedal position.
Changes:
- Updated attrs to at least 17.1.
- Fixed note order in beats before writing.
- Fixed chord reading when there's no fingering.
2017-02-13
Changes:
- Made models hashable again.
2017-02-10
Changes:
- Removed
Note.deadNoteattribute. - Fixed track order changes.
- Removed attribute
Marker.measureHeader. - Provided better default values for some models.
- Implemented clipboard files handling.
- Replaced
GPObjectwith attrs class decorator. - Reimplemented version handling. Keyword
versionof functionsparseandwriteexpects a version tuple. - Moved class
GPFileBaseto moduleguitarpro.iobase, and renamed moduleguitarpro.basetoguitarpro.models. - Exported all models alongside with functions
parseandwritefromguitarpromodule. Now they can be accessed asguitarpro.Song, for example. - Swapped beat stroke directions. Downstroke is represented by
BeatStrokeDirection.downand upstroke is represented byBeatStrokeDirection.up. - Resolved issue #1. Now it's easier to create a tab from scratch.
Minor changes:
- Replaced nosetest with pytest.
2014-04-01
Changes:
- Fixed
NoteTypeenumeration. - Included examples into sdist.
- Create
tests.OUTPUTdirectory before running tests. - Type coercion before writing data (fixes py3k compatibility).
2014-03-30
Changes:
- Converted Markdown docs to reST docs.
- Added
MANIFEST.in.
2014-03-30
Changes:
- Added Python 3 compatibility.
- Added documentation.
- Added support for RSE.
- Added automated tests using
nose. - Fixed harmonics conversion.
- Converted some classes to
Enumsubclasses. - Added support for chord diagrams.
- Added generic arguments to
GPObject.__init__. - Cleaned up the code.
2014-03-11
First public release.